学海无涯
go,go,go

3-mycat实现读写分离高可用

在正在使用的DN1-1 192.168.2.220节点上创建一个可以远程登陆的用户这里使用root作为测试,在生产环境中对于库是要配置专门管理库的用户以及登陆ip的权限
grant all privileges on *.* to root@'192.168.2.%' identified by 'qwe123';
flush privileges;


配置配置文件
cd /tools/mycat/conf/
mv schema.xml schema.xml.ba

添加新的配置文件实现读写分离高可用
cat >>schema.xml<<
<?xml version="1.0"?>  
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> 
</schema>  
	<dataNode name="dn1" dataHost="localhost1" database= "hellodb" />  
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"  writeType="0" dbType="mysql"  dbDriver="native" switchType="1"> 
		<heartbeat>select user()</heartbeat>  
	<writeHost host="db1" url="192.168.2.220:3306" user="root" password="qwe123"> 
			<readHost host="db2" url="192.168.2.221:3306" user="root" password="qwe123" /> 
	</writeHost> 
    <writeHost host="db3" url="192.168.2.222:3306" user="root" password="qwe123"> 
			<readHost host="db4" url="192.168.2.223:3306" user="root" password="qwe123" /> 
	</writeHost>        
	</dataHost>  
</mycat:schema>
EOF
balance="2"修改此参数让所有的节点都变为可读并且是随机分配
database= "hellodb"被管理的库是hellodb


重启mycat
[root@mycat conf]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...

登陆mycat进行读写分离和高可用测试
mysql -uroot -p123456 -h 127.0.0.1 -P8066
读写分离
MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 11    |
+---------------+-------+
1 row in set (0.00 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 10    |
+---------------+-------+
1 row in set (0.00 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 13    |
+---------------+-------+
1 row in set (0.01 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 12    |
+---------------+-------+
1 row in set (0.00 sec)
通过serverid可以看到所有的节点都是读节点

而写节点只有一台
MySQL [(none)]> begin;show variables like 'server_id';commit;
Query OK, 0 rows affected (0.00 sec)

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 10    |
+---------------+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
生产中如故写业务比较多可以配置writeType=“1”,但是要配置主和备主之间,定义字段增长的id字段的数值范围为奇偶
在使用的主
auto-increment-offset = 1     开始点是1
auto-increment-increment = 2 每次数据库写入插入id增长加2,开始为1,然后3,5,7,
备用的主
auto-increment-offset = 2     开始点是2
auto-increment-increment = 2 每次数据库写入插入id增长加2,开始为2,然后4.6.8
高可用测试
停止掉正在使用的主库
[root@dn1-1-master ~]# /etc/init.d/mysqld stop
Shutting down MySQL............ SUCCESS! 
在mycat进程读写操作测试
读操作
MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 12    |
+---------------+-------+
1 row in set (0.01 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 13    |
+---------------+-------+
1 row in set (0.00 sec)
可以看到只有第二组分片的在使用,默认当第一组分片主节点挂了,从是不被容许使用的
可以使用此参数tempReadHostAvailable="1"让挂了的主的从库临时使用
tempReadHostAvailable="1"表示主库挂了,跟着挂了的主库的从库还是可以使用,默认主库挂了,跟着的从库就不可以使用,添加此参数就可以临时使用,但不推荐使用
会跟原主库的从库会跟备用主库的从库的数据库不一致,会出现查询问题

写操作
MySQL [(none)]> begin;show variables like 'server_id';commit;
Query OK, 0 rows affected (0.00 sec)

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 12    |
+---------------+-------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
从原来分片dn1-1的serverid为11的节点变为了分片dn2-1的serverid为12的备用主库上面了

恢复原来的主库进行测试
[root@dn1-1-master ~]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!

读操作
MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 13    |
+---------------+-------+
1 row in set (0.00 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 11    |
+---------------+-------+
1 row in set (0.00 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 10    |
+---------------+-------+
1 row in set (0.00 sec)

MySQL [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 12    |
+---------------+-------+
1 row in set (0.00 sec)
所有的分片节点都可以进行读操作了

写操作
MySQL [(none)]> begin;show variables like 'server_id';commit;
Query OK, 0 rows affected (0.00 sec)

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 12    |
+---------------+-------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.00 sec)
当原来进行写操作的主挂掉后,备的变为写的主库,当原写操作主库恢复,原来的备主就变为写操作的主,原来的写操作的主变为备主

赞(0) 打赏
未经允许不得转载:YYQ运维技术博客_运维的工作学习之路 » 3-mycat实现读写分离高可用
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

运维devops

联系我们关于本博客

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏