一、环境
操纵体系:CentOS-6.5-x86_64-bin-DVD1.iso
JDK版本:jdk1.7.0_80
MyCat版本:Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz (下载源码自行编译的)
MyCat节点IP:192.168.209.133 主机名:liuyazhuang133 主机设置:4核CPU、4G内存
MySQL版本:mysql-5.6.32.tar.gz
主节点IP:192.168.209.131 主机名:liuyazhuang131 主机设置:4核CPU、4G内存
从节点IP:192.168.209.132 主机名:liuyazhuang132 主机设置:4核CPU、4G内存
二、MyCat引见 ( MyCat官网:http://mycat.io/ )
MyCat的读写星散是基于后端MySQL集群的主从同步来完成的,而MyCat供应语句的分发功用。MyCat1.4最先支撑MySQL主从复制状况绑定的读写星散机制,让读越发平安可靠。
三、MyCat的装置
1、设置MyCat的主机名和IP与主机名的映照
# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=liuyazhuang133
# vi /etc/hosts 127.0.0.1 liuyazhuang133 192.168.209.131 liuyazhuang131 192.168.209.132 liuyazhuang132 192.168.209.133 liuyazhuang133
2、设置Java环境变量
由于MyCat是用Java开辟的,因而MyCat运转须要装置JDK(正确来说是JRE就够了),而且须要JDK1.7或以上版本
# vi /etc/profile ## java env export JAVA_HOME=/usr/local/java/jdk1.7.0_80 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin # source /etc/profile # java -version
3、上传装置包
上传Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz 到 MyCat效劳器中的/home/mycat目次,并解压并移动到 /usr/local/mycat目次
$ tar -zxvf Mycat-server-1.5.1-RELEASE-20170717215510-linux.tar.gz
# mv /home/mycat/mycat /usr/local/ # cd /usr/local/mycat/ # ll
4、设置Mycat的环境变量
# vi /etc/profile ## mycat env export MYCAT_HOME=/usr/local/mycat export PATH=$PATH:$MYCAT_HOME/bin # source /etc/profile
四、设置MyCat
1、确认MySQL主从复制一般
在设置MyCat前,请确认MySQL的主从复制装置设置已完成并一般运转。MySQL主从数据的同步在MySQL中设置,MyCat不担任数据同步的题目。
补充:
(1) MySQL主从复制设置中,假如涉及到函数或存储历程的同步复制,须要在/etc/my.cnf中的[mysqld]段中增添设置log_bin_trust_function_creators=true 或在客户端中设置 set global log_bin_trust_function_creators = 1;
(2) 假如要做读写星散下的主从切换,那末从节点也有可能会变成写节点,因而从节点就不能设置为只读 read_only=1 。
(3) Linux版本的MySQL,须要设置为MySQL大小写不敏感,不然可能会发作找不到表的题目。可在/etc/my.cnf的[mysqld]段中增添lower_case_table_names=1 。
2、设置MyCat的schema.xml
schema.xml是MyCat最重要的设置文件之一,用于设置MyCat的逻辑库、表、数据节点、dataHost等内容,
[root@liuyazhuang133 conf]$ cd /usr/local/root/conf/ [root@liuyazhuang133 conf]$ vi schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <!-- 定义MyCat的逻辑库,逻辑库的观点与MySQL中的 database 观点雷同 --> <!-- schema name="rc_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="rc_dn1"></schema --> <!--schema name="pay_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay_dn1"></schema--> <schema name="lyz_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn1"></schema> <schema name="lyz_schema2" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn2"></schema> <!-- 个中checkSQLschema表明是不是搜检并过滤SQL中包括schema的状况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.edu_user,此时会自动过滤TESTDB,SQL变成select * from edu_user,若不会涌现上述写法,则能够封闭属性为false --> <!--sqlMaxLimit默许返回的最大纪录数限定,MyCat1.4版本内里,用户的Limit参数会覆盖掉MyCat的sqlMaxLimit默许设置--> <!-- 定义MyCat的数据节点 --> <dataNode name="lyz_dn1" dataHost="dtHost2" database="lyzdb1" /> <dataNode name="lyz_dn2" dataHost="dtHost2" database="lyzdb2" /> <!-- dataNode 中的 name 数据示意节点称号, dataHost示意数据主机称号, database示意该节点要路由的数据库的称号 --> <!-- dataHost设置的是现实的后端数据库集群(固然,也能够黑白集群) --> <!-- 注重:schema中的每个dataHost中的host属性值必需唯一,不然会涌现主从在一切dataHost中悉数切换的征象 --> <!-- 定义数据主机dtHost1,只衔接到MySQL读写星散集群中的Master节点,不运用MyCat托管MySQL主从切换 --> <!-- <dataHost name="dtHost1" maxCon="500" minCon="20" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.205:3306" user="root" password="lyz" /> </dataHost> --> <!-- 运用MyCat托管MySQL主从切换 --> <!-- 定义数据主机dtHost2,衔接到MySQL读写星散集群,并设置了读写星散和主从切换 --> <dataHost name="dtHost2" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <!-- 经由过程show slave status检测主从状况,当主宕机今后,发作切换,从变成主,本来的主变成从,这时候show slave status就会发作毛病,由于本来的主没有开启slave,不发起直接运用switch操纵,而是在DB中做主从对换。 --> <heartbeat>show slave status</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM2" url="192.168.209.131:3306" user="root" password="root" /> <writeHost host="hostS2" url="192.168.209.132:3306" user="root" password="root" /> </dataHost> <!-- 参数balance决议了哪些MySQL效劳器介入到读SQL的负载平衡中 --> <!-- balance="0",为不开启读写星散,一切读操纵都发送到当前可用的writeHost上--> <!-- balance="1",悉数的readHost与stand by writeHost介入select语句的负载平衡--> <!-- balance="2",一切读操纵都随机的在writeHost、readHost上分发--> <!-- MyCat1.4版本中,若想支撑MySQL一主一从的规范设置,而且在主节点宕机的状况下,从节点还能读取数据,则须要在MyCat里设置为两个writeHost并设置balance="1" --> <!-- writeType="0",一切写操纵都发送到可用的writeHost上 --> <!-- writeType="1",仅仅关于galera for mysql集群这类多主多节点都能写入的集群起效,此时Mycat会随机挑选一个writeHost并写入数据,关于非galera for mysql集群,请不要设置writeType=1,会致使数据库不一致的严重题目 --> </mycat:schema>
MyCat1.4最先支撑MySQL主从复制状况绑定的读写星散机制,让读越发平安可靠,设置以下:
MyCat心跳搜检语句设置为 show slave status ,dataHost 上定义两个新属性:switchType="2" 与 slaveThreshold="100",此时意味着开启MySQL主从复制状况绑定的读写星散与切换机制,MyCat心跳机制经由过程检测 show slave status 中的
"Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个字段来肯定当前主从同步的状况以及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master 大于slaveThreshold时,读写星散挑选器会过滤掉此Slave机械,防备读到良久之前的旧数据,而当主节点宕机后,切换逻辑会搜检Slave上的Seconds_Behind_Master是不是为0,为0时则示意主从同步,能够平安切换,不然不会切换。
3、设置 server.xml
server.xml 重要用于设置体系变量、治理用户、设置用户权限等。
[root@liuyazhuang133 conf]$ vi server.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <property name="defaultSqlParser">druidparser</property> <property name="charset">utf8mb4</property> <!-- <property name="useCompression">1</property>--> <!--1为开启mysql紧缩协定--> <!-- <property name="processorBufferChunk">40960</property> --> <!-- <property name="processors">1</property> <property name="processorExecutor">32</property> --> <!--默许是65535 64K 用于sql剖析时最大文本长度 --> <!--<property name="maxStringLiteralLength">65535</property>--> <!--<property name="sequnceHandlerType">0</property>--> <!--<property name="backSocketNoDelay">1</property>--> <!--<property name="frontSocketNoDelay">1</property>--> <!--<property name="processorExecutor">16</property>--> <!-- <property name="mutiNodeLimitType">1</property> 0:开启小数目级(默许) ;1:开启亿级数据排序 <property name="mutiNodePatchSize">100</property> 亿级数目排序批量 <property name="processors">32</property> <property name="processorExecutor">32</property> <property name="serverPort">8066</property> <property name="managerPort">9066</property> <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> --> </system> <!-- 用户1,对应的MyCat逻辑库衔接到的数据节点对应的主机为MySQL主从复制设置中的Master节点,没完成读写星散,读写都在该Master节点中举行 --> <!-- <user name="user1"> <property name="password">roncoo.1</property> <property name="schemas">rc_schema1,pay_schema1</property> </user> --> <!-- 用户2,对应的MyCat逻辑库衔接到的数据节点对应的主机为主从复制集群,并经由过程MyCat完成了读写星散 --> <user name="lyz"> <property name="password">lyz.123</property> <property name="schemas">lyz_schema1,lyz_schema2</property> </user> <!-- 用户3,只读权限--> <user name="userlyz"> <property name="password">lyz.123</property> <property name="schemas">lyz_schema1,lyz_schema2</property> <property name="readOnly">true</property> </user> </mycat:server>
4、防火墙中翻开8066和9066端口
MyCat的默许数据端口为8066,mycat经由过程这个端口吸收数据库客户端的接见要求。
治理端口为9066,用来吸收mycat监控敕令、查询mycat运转状况、从新加载设置文件等。
[root@liuyazhuang133 mycat]# vi /etc/sysconfig/iptables
增添:
## MyCat -A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 9066 -j ACCEPT
重启防火墙:
[root@liuyazhuang133 mycat]# service iptables restart
5、修正log日记级别为debug
修正log日记级别为debug,以便经由过程日记确认基于MyCat的MySQL数据库集群读写星散的数据操纵状况(能够在正式上生产前改成info级别)
[root@liuyazhuang133 conf]$ vi /usr/local/mycat/conf/log4j.xml
6、启动root
[root@liuyazhuang133 bin]$ cd /usr/local/root/bin/
(1) 控制台启动,这类启动体式格局在控制台封闭后,root效劳也将封闭,合适调试运用:
[root@liuyazhuang133 bin]$ ./root console
(2) 能够采纳以下背景启动的体式格局:
[root@liuyazhuang133 bin]$ ./root start Starting root-server...
(对应的,重启: root restart , 封闭: root stop )
7、MyCat衔接测试
(1) 假如当地Windows装置有MySQL,能够运用已有的mysql客户端长途操纵Mycat
(2) Nativecat衔接Mycat
8、读写星散测试
(1) 监听MyCat日记
[root@liuyazhuang133 ~]$ cd /usr/local/mycat/logs/ [root@liuyazhuang133 logs]$ tail -f mycat.log
(2) 读测试
$ mysql -uuserlyz -plyz.123 -h192.168.209.233 -P8066 mysql> show databases;
mysql> use lyz_schema2;
mysql> show tables;
mysql> select * from lyz_user_02;
屡次实行 select * from lyz_user_02 语句,Mycat打印出来的日记信息显现读操纵要求都是路由到Slave节点(192.168.209.132)
(2) 写测试
mysql> insert into lyz_user_02 (userName, pwd) values('liuyazhuang', 'lyz。123');
实行上面的新增插进去语句后,此时对应的Mycat日记信息以下:
屡次实行以上插进去语句,发明新增数据都是从 Master节点(192.168.209.131)插进入的,而且Slave节点经由过程Binlog同步了Master节点中的数据。
综上,基于MyCat的读写星散集群设置胜利。
以上就是Mycat读写星散在MySQL主从复制基础上完成的实例的细致内容,更多请关注ki4网别的相干文章!