有关主从(读写角色)切换设置属性规则的相关dataHost标签属性switchType值: (1)-1表示不自动切换 (2)1默认值,自动切换 (3)2基于mysql主从同步的状态决定是否切换 (4)3基于cluster的切换,心跳语句要改成show status like "wsrep%",这个里面配置的都是writehost
此例中writeType值使用默认值0,写请求只分发到主节点,不会分发到其他的writeHost上这里我们变更45行的心跳检测为show slave status,来方便之后我们的读写分离校验验证读写分离效果 写操作主节点上: mysql> show global status like "%Com_in%"; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | Com_insert | 13 | | Com_insert_select | 0 | | Com_install_plugin | 0 | +--------------------+-------+ 3 rows in set (0.00 sec)从节点上: mysql> show global status like "%Com_in%"; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | Com_insert | 13 | | Com_insert_select | 0 | | Com_install_plugin | 0 | +--------------------+-------+ 3 rows in set (0.00 sec)写入insert: mysql> insert into travelrecord(id,name)values(10000005,"ddd"); Query OK, 1 row affected (0.00 sec)可以看到几次插入的结果都落到了节点192.168.1.250也就是master上 也可以使用show global status like ‘Com_insert’;查看主从mysql上的insert请求,如果两者都增加,说明请求分发到了主上,并复制到了从上,如果请求分发到了从上,那么就不会复制到主上,结果就是主上的这个状态变量不会增加,只有从上的这个状态变量会增加。读操作 执行select之前 主节点: mysql> show global status like "Com_select"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_select | 1334 | +---------------+-------+ 1 row in set (0.00 sec)从节点: mysql> show global status like "Com_select"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_select | 385 | +---------------+-------+ 1 row in set (0.00 sec)执行select语句: mysql> select * from travelrecord where id=1; +----+------+------+ | id | name | age | +----+------+------+ | 1 | aaa | NULL | +----+------+------+ 1 row in set (0.00 sec)主节点: mysql> show global status like "Com_select"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_select | 1334 | +---------------+-------+ 1 row in set (0.00 sec)从节点: mysql> show global status like "Com_select"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_select | 386 | +---------------+-------+ 1 row in set (0.00 sec)都落在了hostS1也就是slave上
多测几次也是以上的效果,说明符合了balance=1的效果,读请求分发到了除主节点以外的节点(即从节点)。验证自动切换 停止当前主节点mysql服务 [root@HE3 conf]# cat dnindex.properties #update #Mon Sep 12 00:28:33 PDT 2016 localhost1=0 [root@HE3 conf]# /etc/init.d/mysqld stop Shutting down MySQL............ SUCCESS!观察dnindex.properties文件内容是否变化 [root@HE3 conf]# cat dnindex.properties #update #Mon Sep 12 18:32:28 PDT 2016 localhost1=1当前可用节点只剩下原从节点,期望结果是之后的写入操作全部落到原从节点,验证: mysql> insert into travelrecord values(3,"helei",25); ERROR 1064 (HY000): partition table, insert must provide ColumnList mysql> insert into travelrecord(id,name,age) values(3,"helei",25); Query OK, 1 row affected (0.37 sec)登录原从节点,观察数据变化: mysql> use db1; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | travelrecord | +---------------+ 1 row in set (0.00 sec) mysql> select * from travelrecord; +---------+-------+------+ | id | name | age | +---------+-------+------+ | 1 | aaa | NULL | | 2 | asd | NULL | | 3 | helei | 25 | | 5000000 | bbb | 11 | +---------+-------+------+ 4 rows in set (0.00 sec)说明此时写入节点已经切换为配置好的第二个writeHost,也就是原从节点,此时如果想要将原失败节点重新加入集群,需要重做主从,将原主节点作为从节点加入到集群中,mycat无需重启,对前端应用是透明的。Ubuntu 16.04.1 安装MyCat http://www.linuxidc.com/Linux/2016-08/134330.htmMyCAT实现MySQL读写分离实践 http://www.linuxidc.com/Linux/2016-01/127957.htmMyCAT实现MySQL的读写分离 http://www.linuxidc.com/Linux/2016-01/127555.htmMyCAT ER分片的验证 http://www.linuxidc.com/Linux/2016-02/128636.htmLVS+Keepalived搭建MyCAT高可用负载均衡集群 http://www.linuxidc.com/Linux/2016-03/129231.htmMycat实现数据库读写分离 http://www.linuxidc.com/Linux/2016-07/133518.htm本文永久更新链接地址