3)现在db-51与db-52 的Mysql已互为主从,现在要实现高可用性,需要安装keepalived服务,并设置vip地址。
db-51 192.168.4.51 Mysql 5.7
db-52 192.168.4.52 Mysql 5.7
vip: 192.168.4.50
1.在192.168.4.51 ( db-51 )安装keepalive,并配置参数:
1 [root@db-51 ~]#yum install -y keepalived2 [root@db-51 ~]#vim /etc/keepalived/keepalived.conf3 ! Configuration File forkeepalived4
5 global_defs {6 router_id mysqlmha7 }8
9 vrrp_script check_run {10 script "/opt/chk_mysql.sh"
11 interval 1
12 }13
14 vrrp_instance VI_1 {15 state BACKUP //因为开始非抢占方式,必须BACKUP16 interface eth017 virtual_router_id 151
18 priority 100
19 advert_int 1
20 nopreempt21 authentication {22 auth_type PASS23 auth_pass 1111
24 }25 track_script { //track_script表示执行健康检查脚本26 check_run weight=0 //如果故障,就把weight配置成0.
27 }28 virtual_ipaddress {29 192.168.4.50/24 brd 192.168.4.255 dev eth0 label eth0:1 //设置vip地址(其配置符合ip命令)
30 }31 }
2)在192.168.4.51配置keepalived检查mysql服务脚本
1 [root@db-51 ~]#touch /opt/chk_mysql.sh
2 [root@db-51 ~]#vim /opt/chk_mysql.sh
3 #!/bin/bash4 count=$(netstat -na | grep"LISTEN" | grep "3306" | wc -l )5 if [[ "$count" -eq 0 ]] ; then
6 exit 2
7 fi
8 [root@db-51 ~]#chmod a+x /opt/chk_mysql.sh
9 [root@db-51 ~]#scp /etc/keepalived/keepalived.conf root@192.168.4.52:/etc/keepalived/
10 [root@db-51 ~]#scp //opt/chk_mysql.sh root@192.168.4.52:/opt/
3.在192.168.4.52 ( db-52 )安装keepalive,并配置参数
1 [root@db-52 mysql]#yum install -y keepalived2 [root@db-52 mysql]#vim /etc/keepalived/keepalived.conf3 ! Configuration File forkeepalived4
5 global_defs {6 router_id mysqlmha7 }8
9 vrrp_script check_run {10 script "/opt/chk_mysql.sh"
11 interval 1
12 }13
14 vrrp_instance VI_1 {15 state BACKUP16 interface eth017 virtual_router_id 151
18 priority 90
19 advert_int 1
20 authentication {21 auth_type PASS22 auth_pass 1111
23 }24 track_script {25 check_run weight=0
26 }27 virtual_ipaddress {28 192.168.4.50/24 brd 192.168.4.255 dev eth0 label eth0:1
29 }30 }31 [root@db-52 mysql]#
小结:
注意:在配置keepalived.conf中 { 与前面字符必须有空格。否则该配置段会被忽略的。
注意:上述keepalived配置为非抢占式。
keepalived做HA时,经常会遇到抢占式的master和backup之间的切换问题。
通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。
注意:这样(非抢占式)配置后,我们要注意启动keepalived服务的顺序,假设我想让A成为backup那就不能先启动A的keepalived服务。
注意:检查keepalived软件版本:
1 [root@tomcat1 ~]# keepalived -v2 Keepalived v1.2.13 (03/19,2015)
注意:keepalived.conf配置文件中virtual_ipaddress 配置项遵从ip命令配置。
virtual_ipaddress {192.168.4.50 //如果只写IP地址,掩码默认为32位,label绑定到keepalive指定接口上。如eth0:1}
注意:keepalived.conf配置文件中
1 vrrp_script chk_mysql_port {2 script "/opt/chk_mysql.sh"
3 interval 2
4 weight -20
5 fall 2
6 rise 1
7 }
1)关于配置健康检查配置vrrp_script时要搞清楚执行过程:(摘自:https://blog.csdn.net/qq_41814635/article/details/84166700)
主备的优先级顺序:
vrrp_script脚本中weight这个值必须指定,否则有时候重启服务后该节点被显示为fault 状态。weight值分为正值和负值,假定weight值为W,初始的优先级为P。
当weight值小于0时:
如果检测脚本返回值=0,则节点最终优先级不改变;
如果检测脚本返回值≠0,则节点最终优先级=P-W,优先级会减小。
当weight值大于0时:
如果检测脚本返回值=0,则节点最终优先级=P+W,优先级会增加;
如果检测脚本返回值≠0,则节点最终优先级不改变。
2)vrrp_script配置段包括:
-script: 一句指令或者一个脚本文件,需返回0(成功)或非0(失败),keepalived以此为依据判断其监控的服务状态。
-interval: 健康检查周期。
-weight: 优先级变化幅度。
-fall: 判定服务异常的检查次数。
-rise: 判定服务正常的检查次数。