环境说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 软件版本 mysql版本5.7.44 mycat版本1.6.7.4 linux版本CentOS7.9.2009 keepalived版本1.3.5-19(yum安装)
主机地址分配 为了避免主库与mycat使用keepalived冲突,所以mycat部署在从库上 192.168.10.125 mysql-1 master-1 192.168.10.126 mysql-2 master-2 slave-1 (当前主库) 192.168.10.127 mysql-3 slave-2 mycat-1 192.168.10.128 mysql-4 slave-3 mycat-2 keepalived VIP 192.168.10.197/24
账号分配(测试环境) mycat用户名admin mycat密码admin mysql用户root mysql密码root
|
mycat部署与配置
mysql-3和mysql-4节点部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| cd /root/ wget https://github.com/MyCATApache/Mycat-Server/releases/download/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz tar -xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz yum -y install java
cat >/root/mycat/conf/schema.xml<<EOF <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="db01" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema> <schema name="db02" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema> <dataNode name="dn1" dataHost="localhost1" database="ws" /> <dataNode name="dn2" dataHost="localhost1" database="xhy" /> <dataHost name="localhost1" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="master" url="192.168.10.126:3306" user="root" password="root"> <readHost host="slave1" url="192.168.10.127:3306" user="root" password="root"/> <readHost host="slave2" url="192.168.10.128:3306" user="root" password="root"/> <readHost host="slave3" url="192.168.10.125:3306" user="root" password="root"/> </writeHost> </dataHost> </mycat:schema> EOF
<user name="admin"> <property name="password">admin</property> <property name="schemas">db01,db02</property> <property name="readOnly">false</property> </user>
/root/mycat/bin/mycat start ss -tunlp | grep -c 8066
|
keepalived配置
主mycat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| yum -y install keepalived cat >/etc/keepalived/keepalived.conf<<'EOF' ! Configuration File for keepalived global_defs { router_id mysql-1 } vrrp_script check_mycat { script "/etc/keepalived/check_mycat.sh" interval 3 } vrrp_instance mycat { state MASTER interface ens18 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.197/24 dev ens18 } track_script { check_mycat } } EOF
|
备mycat
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| yum -y install keepalived cat >/etc/keepalived/keepalived.conf<<EOF ! Configuration File for keepalived global_defs { router_id mysql-2 } vrrp_script check_mycat { script "/etc/keepalived/check_mycat.sh" interval 3 } vrrp_instance mycat { state BACKUP interface ens18 virtual_router_id 52 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.197/24 dev ens18 } track_script { check_mycat } } EOF
|
简单检查脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cat >/etc/keepalived/check_mycat.sh<<'EOF'
counter=$(ps -ef | grep mycat | grep -v grep | wc -l) if [ $counter -eq 0 ]; then echo "$(date +%F) 尝试重启 Mycat" >> /etc/keepalived/check.log /root/mycat/bin/mycat start 2>&1 /dev/null sleep 2 counter=$(ps -ef | grep mycat | grep -v grep | wc -l) if [ $counter -eq 0 ]; then echo "$(date +%F) mycat重启失败,关闭keepalived" >> /etc/keepalived/check.log systemctl stop keepalived echo "$(hostname) 主机 Mycat 服务异常,vip 已切换" | mail -s "keepalived 告警" alertwarning@163.com fi fi EOF
chmod +x /etc/keepalived/check_mycat.sh
|
测试VIP漂移
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| systemctl daemon-reload systemctl restart keepalived.service systemctl is-active keepalived.service
此时已经有VIP了 mysql-3: ip a | grep 192 inet 192.168.10.127/24 brd 192.168.10.255 scope global noprefixroute ens18 inet 192.168.10.197/24 scope global secondary ens18 mysql-4: ip a| grep 192 inet 192.168.10.128/24 brd 192.168.10.255 scope global noprefixroute ens18
并且能够连接成功
关闭mysql-3的keepalived systemctl stop keepalived.service ip a | grep 192. inet 192.168.10.127/24 brd 192.168.10.255 scope global noprefixroute ens18 ip a| grep 192 inet 192.168.10.128/24 brd 192.168.10.255 scope global noprefixroute ens18 inet 192.168.10.197/24 scope global secondary ens18
|

(连接成功)
-
Next Post
Mycat部署与读写分离
-
Previous Post
MySQL高可用之MHA