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 keepalived
 2 [root@db-51 ~]#vim /etc/keepalived/keepalived.conf
 3  ! Configuration File for keepalived
 4 
 5 global_defs {
 6  router_id mysqlmha
 7 }
 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                    //因为开始非抢占方式,必须BACKUP
16         interface eth0
17         virtual_router_id 151
18         priority 100
19         advert_int 1
20         nopreempt
21         authentication {
22                 auth_type PASS
23                 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/bash
 4 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 keepalived
 2 [root@db-52 mysql]#vim /etc/keepalived/keepalived.conf
 3 ! Configuration File for keepalived
 4 
 5 global_defs {
 6  router_id mysqlmha
 7 }
 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
16         interface eth0
17         virtual_router_id 151
18         priority 90
19         advert_int 1
20         authentication {
21                 auth_type PASS
22                 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 -v
2 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时要搞清楚执行过程

    主备的优先级顺序:
      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: 判定服务正常的检查次数。