现有后端 MYSQL 架构:
- MHA1 192.168.1.20
- MHA2 192.168.1.30
- MHA3 192.168.1.40
- SLAVE 192.168.1.50
- MANAGER 192.168.1.60(VIP192.168.1.100)
因现有架构前端程序都是利用脚本轮询读写来实现人肉分离, 没有健康检查, 造成了网站时时有卡顿, 因此需要利用中间件 mycat 来实现读写分离, 且带有有健康检查.
安装包: Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
一, 新服务器 192.168.1.70 配置 mycat
1. 下载 Mycat-server-1.6-RELEASE
[root@mycat ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2. 安装 mycat(解压)
- [root@mycat ~]# tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
- [root@mycat mycat]# cp -r ~/mycat//usr/local/mycat
3. 修改登录 mycat 的账户密码和防火墙的设置 server.xml
- [root@mycat mycat]# vim /usr/local/mycat/conf/server.xml
- <user name="root">
- <property name="password">123456</property>
- <!-- < 登录 mycat 的用户和密码 & gt; -->
- <property name="schemas">mycat</property>
- <!-- <mydb 是显示的虚拟库名, 库名多个时, 使用逗号分隔 & gt; -->
- </user>
- <user name="user">
- <property name="password">user</property>
- <property name="schemas">mycat</property>
- <property name="readOnly">true</property>
- <!-- < 这里配置只读用户 & gt; -->
- </user>
4. 修改 mycat 配置分表读写分离策略 schema.xml(没用的我删掉了)
- [root@mycat mycat]# vim /usr/local/mycat/conf/schema.xml
- <?xml version="1.0"?>
- <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
- <mycat:schema xmlns:mycat="http://io.mycat/">
- <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
- <!-- < 对应上面文件的虚拟库名 mycat> -->
- <!-- < 这里我不需要分数据分片, 所以要加回一个表名 dn1> -->
- </schema>
- <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
- /> -->
- <dataNode name="dn1" dataHost="localhost1" database="mydb" />
- <!-- <mydb 真实数据库名 & gt; -->
- <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
- writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
- <heartbeat>select user()</heartbeat>
- <!-- can have multi write hosts -->
- <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">
- <!-- < 写入的用户名密码 & gt; -->
- <!-- can have multi read hosts -->
- <readHost host="node1" url="192.168.1.30:3306" user="read" password="123456" />
- <readHost host="node2" url="192.168.1.40:3306" user="read" password="123456" />
- <readHost host="node3" url="192.168.1.50:3306" user="read" password="123456" />
- <!-- < 读的用户名密码 & gt; -->
- </writeHost>
- </dataHost>
- </mycat:schema>
这里面, 有三个参数需要注意, balance,writeType 和 switchType.
其中, balance 指的负载均衡类型, 目前的取值有 4 种:
1. balance="0", 不开启读写分离机制, 所有读操作都发送到当前可用的 writeHost 上.
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡, 简单的说, 当双主双从模式 (M1->S1,M2->S2, 并且 M1 与 M2 互为主备), 正常情况下, M2,S1,S2 都参与 select 语句的负载均衡.
3. balance="2", 所有读操作都随机的在 writeHost,readhost 上分发.
4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行, writerHost 不负担读压力
writeType 属性负载均衡类型, 目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost, 第一个挂了切到还生存的第二个 writeHost, 重新启动后已切换后的为准,
切换记录在配置文件中: dnindex.properties .
2. writeType="1", 所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐.
3. writeType="-1", 不开启读写分离
switchType 指的是切换的模式, 目前的取值也有 4 种:
1. switchType='-1' 表示不自动切换
2. switchType='1' 默认值, 表示自动切换
3. switchType='2' 基于 MySQL 主从同步的状态决定是否切换, 心跳语句为 show slave status
4. switchType='3'基于 MySQL galary cluster 的切换机制 (适合集群)(1.4.1), 心跳语句为 show status like 'wsrep%'.
5. 安装 java 环境
[root@mycat mycat]# yum -y install java-1.8.0-openjdk
6. 主 mysql 授权 select 用户 (对应设置的读用户名字)
mysql> grant select on *.* to read@'%' identified by '123456';
7. 开启 mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat start
二, 测试读写分离 (mycat 端口 8066)
- [root@mha1 ~]# for i in {1..5};do mysql -uroot -p123456 -P8066 -h192.168.1.70 -e "select @@hostname"; done
- | @@hostname |
- +------------+
- | slave |
- +------------+
- | @@hostname |
- +------------+
- | mha3 |
- +------------+
- | @@hostname |
- +------------+
- | mha2 |
- +------------+
- | @@hostname |
- +------------+
- | mha2 |
- +------------+
- | @@hostname |
- +------------+
- | slave |
- +------------+
来源: http://www.bubuko.com/infodetail-2645529.html