MyCat+MySQL实现高可用读写分离(实测记录)
2022-01-28 本文已影响0人
忧郁的冥
一.测试环境
创建两台CentOS7虚机,部署两套MySQL数据库配置主从同步,直接在主库服务器安装mycat进行测试。
主库:192.168.216.128 port:3306
从库:192.168.216.129 port:3306
1.下载MyCat安装文件上传至主库服务器M
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
百度网盘:https://pan.baidu.com/s/1Xeyno8pRomT__AvmzcvKnQ
提取码:hmhc
- 上传成功后解压至
/home
目录下
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2.配置环境变量
vim /etc/profile
export PATH=/home/mycat/bin:$PATH
source /etc/profile
3.修改MyCat配置文件
vim /home/mycat/conf/server.xml
<!--读写权限管理员账户-->
<user name="root">
<property name="password">123456</property>
<property name="schemas">test</property>
</user>
<!--只读权限普通账户-->
<user name="user">
<property name="password">user123</property>
<property name="schemas">test</property>
<property name="readOnly">true</property>
</user>
vim /home/mycat/conf/schems.xml
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定义一个MyCat的模式,逻辑数据库名称TestDB -->
<!-- “checkSQLschema”:描述的是当前的连接是否需要检测数据库的模式 -->
<!-- “sqlMaxLimit”:表示返回的最大的数据量的行数 -->
<!-- “dataNode="dn1"”:该操作使用的数据节点是dn1的逻辑名称 -->
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
<!-- 定义个数据的操作节点,以后这个节点会进行一些库表分离使用 -->
<!-- “dataHost="localhost1"”:定义数据节点的逻辑名称 -->
<!-- “database="test"”:定义数据节点要使用的数据库名称 -->
<dataNode name="dn1" dataHost="localhost1" database="test" />
<!-- 定义数据节点,包括了各种逻辑项的配置 -->
<dataHost name="test" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 配置真实MySQL与MyCat的心跳 -->
<heartbeat>select user()</heartbeat>
<!-- 配置真实的MySQL的连接路径 -->
<writeHost host="hostM1" url="192.168.216.128:3306" user="root" password="123456">
<readHost host="hostS1" url="192.168.216.129:3306" user="root" password="123456"/>
</writeHost>
<writeHost host="hostM2" url="192.168.216.129:3306" user="root" password="123456">
</writeHost>
</dataHost>
</mycat:schema>
4.启动MyCat : mycat start
二.关键配置项
在mycat/conf
目录下 MyCat的核心配置文件schems.xml
属性 | 状态 | 说明 |
---|---|---|
balance | 表示负载模式 | |
balance | 0 | 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。 |
balance | 1 | 全部的readHost与stand by writeHost参与select语句的负载均衡。简单的说当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 |
balance | 2 | 所有读操作都随机的在writeHost、readhost上分发。 |
balance | 3 | 所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力 |
writeType | 表示写模式 | |
writeType | 0 | 所有的操作发送到配置的第一个writehost |
writeType | 1 | 随机发送到配置的所有writehost |
writeType | 2 | 不执行写操作 |
switchType | 指的是切换模式,目前的取值也有4种。 | |
switchType | -1 | 表示不自动切换 |
switchType | 1 | 默认值,表示自动切换 |
switchType | 2 | 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status |
switchType | 3 | 基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。 |
三.测试记录
采用 banlance =1,writeType = 0 ,switchType = 1的配置模式
1.使主库宕机 service mysql stop;
结果:读写转移至从库,mycat正常连接。
2.恢复主库运行service mysql start
结果:mycat依旧采用从库进行读写未重新接入主库