环境是PXC的3节点,虽然PXC的3个节点都是可读写,避免主键的争用,还是做成了1写2读的读写分离,读写分离的中间件选用了mycat来做,因为mycat 可以很好地做 写节点切换。
PXC的集群已经搭建好了。3个节点
js-ypt-percona1-t 192.168.50.130
js-ypt-percona2-t 192.168.50.131
js-ypt-percona3-t 192.168.50.132
mycat 的机子IP为 192.168.50.10
mycat 选用的版本是Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
下载安装包,并解压到 /usr/local/mycat
mycat 的读写分离配置,只用到2个配置文件,conf 里面的 schema.xml 和 server.xml。
schema.xml 配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
上面3行都不需要改变
下面的配置主要分3个配置项,schema , datanode,datahost
<schema name="percona" checkSQLschema="true" sqlMaxLimit="100" dataNode="db_node">
</schema>
--name 逻辑数据库名,与server.xml中的schema对应
--sqlMaxLimit 限制返回行数,语句有带limit以语句的为准,否则以这个参数为准
--dataNode 读写分离没有这个参数就改成这个参数,对应下一个dataNode选项配置,可以随意命名
<dataNode name="db_node" dataHost="pxc-cluster" database="percona" />
--name 对应上面的schema
--dataHost 可以随意命名
--database PXC中真实的库名
<dataHost name="pxc-cluster" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="write1" url="192.168.50.130:3306" user="admin" password="Abc_123456">
<readHost host="write1r1" url="192.168.50.131:3306" user="admin" password="Abc_123456" />
<readHost host="write1r2" url="192.168.50.132:3306" user="admin" password="Abc_123456" />
</writeHost>
<writeHost host="write2" url="192.168.50.131:3306" user="admin" password="Abc_123456">
<readHost host="write2r1" url="192.168.50.132:3306" user="admin" password="Abc_123456" />
<readHost host="write3r2" url="192.168.50.130:3306" user="admin" password="Abc_123456" />
</writeHost>
--name 对应dataNode 配置选项的 dataHost
-- maxCon 最大连接1000,minCon最小连接,balance=2 负载均衡是select 随机往写和读节点分布
--writeType =0 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost
--switchType=1 自动切换writeHost , 上面的配置中 我定义了2个 writeHost
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>
server.xml 配置
<user name="admin" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">percona</property>
<property name="defaultSchema">percona</property>
</user>
-- 配置很简单 用户 admin,密码 123456,库是 percona
启动mycat
/usr/local/mycat/bin/startup_nowrap.sh ##启动mycat
有可能会碰到一个奇怪的问题。
vim startup_nowrap.sh
set ff 可能查看到的是 windows, 执行 set ff=unix 即可,然后重新运行脚本
用客户端 连接 mycat
192.168.50.10:8806 admin/123456
连接成功!
done!