现有后端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的用户和密码> -->
                <property name="schemas">mycat</property>
								<!-- <mydb是显示的虚拟库名,库名多个时,使用逗号分隔> -->
        </user>
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">mycat</property>
                <property name="readOnly">true</property>
								<!-- <这里配置只读用户> -->
        </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真实数据库名> -->		
        <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">
									<!-- <写入的用户名密码> -->	
                        <!-- 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" />
									<!-- <读的用户名密码> -->	
                </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加入system管理

[root@mycat system]# vim /usr/lib/systemd/system/mycat.service

[Unit]
Description=mycat
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mycat/bin/mycat start
ExecStop=/usr/local/mycat/bin/mycat stop
ExecReload=/usr/local/mycat/bin/mycat restart
[Install]
WantedBy=multi-user.target

[root@mycat ~]# systemctl start mycat

二、测试读写分离(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 | +------------+