Mysql-高可用集群[MyCat中间件使用]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql-高可用集群[MyCat中间件使用]相关的知识,希望对你有一定的参考价值。
服务器-节点: 4台
- mysql-主: 192.168.2.40
- mysql-从-node-0: 192.168.2.41
- mysql-从-node-1: 192.168.2.42
- mycat: 192.168.2.45
操作过程
- 1.搭建mysql主从节点
- 2.搭建mycat中间件节点
- 3.mycat服务配置
- 4.测试读写分离,读的分发
1.搭建mysql主从节点
2.搭建mycat中间件节点
# 2-1.基础环境搭建: 安装jdk
# 下载页面: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
rpm -ivh jdk-8u201-linux-x64.rpm
# 2-2.下载安装 mycat:
wget http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -P /usr/local/src/
tar xvf /usr/local/src/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
# 配置: 写入环境变量,增加相应用户
echo export PATH=$PATH:/usr/local/mycat/bin >>/etc/profile
echo export MYCAT_HOME=/usr/local/mycat >> /etc/profile
source /etc/profile
# 增加相应用户
groupadd mycat -g 910
useradd mycat -g 910
chown -R mycat:mycat /usr/local/mycat
3.mycat服务配置
3-1.读写数据库配置
vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 声明一个逻辑表, 表名为TESTDB, 和server.xml中的对应 -->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!-- 通过dataHost定义的数据库: database="xh"(真实数据库) -->
<dataNode name="dn1" dataHost="dataHost01" database="xh" />
<dataHost name="dataHost01" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<!-- 写入节点(主节点) -->
<writeHost host="serverM1" url="192.168.2.40:3306" user="myuser" password="Aa123456">
<!-- 读取节点(从节点) -->
<readHost host="serverS0" url="192.168.2.41:3306" user="myuser" password="Aa123456"/>
<readHost host="serverS1" url="192.168.2.42:3306" user="myuser" password="Aa123456"/>
</writeHost>
</dataHost>
</mycat:schema>
balance指的负载均衡类型,目前的取值有4种:
- 0: 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
- 1: 全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡
- 2: 所有读操作都随机的在writeHost、readhost上分发。
- 3: 所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
switchType指的是切换的模式,目前的取值也有4种:- -1: 表示不自动切换
- 1: 默认值,表示自动切换
- 2: 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
writeType值:- 0: 所有请求,分发到第一个: dataHost
- 1: 所有请求,分发到所有的: dataHost
- 2: 不执行写操作
3-2.mycat服务,用户配置
vim /usr/local/mycat/conf/server.xml
....
# 服务端口
<property name="serverPort">8066</property>
....
// 管理员配置,读写
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
// 普通用户配置,只读
<user name="user" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
....
3-3.开启日志debug,启动服务:
vim /usr/local/mycat/conf/log4j2.xml
....
# 开启debug日志
<asyncRoot level="info" includeLocation="true"> 改为 <asyncRoot level="debug" includeLocation="true">
....
# 启动服务
mycat start
# 启动防火墙规则
firewall-cmd --permanent --add-port=8066/tcp && firewall-cmd --reload
4.测试读写分离
// 4-1.分发测试
// 4-1-1.先将 schema.xml 中的配置为: balance=0,不进行分发操作,【读写】全部在【主库-192.168.2.40】
....
<dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
....
// 客户端链接mycat
![](https://s1.51cto.com/images/blog/201904/06/d69dfb492c47a1f35dda3e7d4621d46c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
// 分别查看: 数据库(【主-192.168.2.40】,【从0-192.168.2.41】,【从1-192.168.0.42】)查询次数,写入次数:
// 查询次数
show global status like ‘Com_select‘;
// 写入次数
show global status like ‘%Com_in%‘;
// 【客户端】执行查询: 10次,注意:工具可能不能直接打开表进行操作,只能运行sql语句
SELECT * FROM `user` limit 1;
INSERT `user`(name) VALUES(‘王五1‘);
INSERT `user`(name) VALUES(‘王五2‘);
INSERT `user`(name) VALUES(‘王五3‘);
// 分别查看: 数据库(主,从0,从1)查询次数,应该只有【主库-192.168.2.40】有明显的增加
//
// 4-1-2.更改schema.xml 中的配置为: balance=3,读在从库,写在主库
// 客户端】执行查询: 10次
// 分别查看: 数据库(主,从0,从1)查询次数,应该只有【从0-192.168.2.41】,【从1-192.168.0.42】有明显的增加
5.遗留问题:
- 主库-宕机后,查询语句也无法执行
- 从库-有一台宕机后,查询语句也无法执行
以上是关于Mysql-高可用集群[MyCat中间件使用]的主要内容,如果未能解决你的问题,请参考以下文章