Akemi

Mycat与keepalived高可用

2024/09/10

环境说明

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
#修改/root/mycat/conf/server.xml
<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
#1

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'
#!/bin/bash
counter=$(ps -ef | grep mycat | grep -v grep | wc -l)
if [ $counter -eq 0 ]; then
# 尝试启动 Mycat(这里需要根据你的实际启动命令修改)
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
#active

此时已经有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


(连接成功)

CATALOG
  1. 1. 环境说明
  2. 2. mycat部署与配置
  3. 3. keepalived配置