keepalived搭建(用于MHA集群负载)

1. 安装keepalived并将其配置成系统服务。

(1) master1(10.162.16.221)和master2(10.162.16.223)两台机器上同样进行如下操作:

yum install -y openssl-devel

已安装:
openssl-devel.x86_64 1:1.0.2k-21.el7_9
作为依赖被安装:
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-50.el7 libcom_err-devel.x86_64 0:1.42.9-19.el7 libkadm5.x86_64 0:1.15.1-50.el7 libselinux-devel.x86_64 0:2.5-15.el7 libsepol-devel.x86_64 0:2.5-10.el7
libverto-devel.x86_64 0:0.2.5-4.el7 pcre-devel.x86_64 0:8.32-17.el7 zlib-devel.x86_64 0:1.2.7-18.el7

yum install –y keepalived

已安装:
keepalived.x86_64 0:1.3.5-19.el7
作为依赖被安装:
lm_sensors-libs.x86_64 0:3.4.0-8.20160601gitf9185e5.el7 net-snmp-agent-libs.x86_64 1:5.7.2-49.el7 net-snmp-libs.x86_64 1:5.7.2-49.el7

(2) master1机器上的keepalived.conf配置。

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf        #清空默认内容,直接采用下面配置:
! Configuration File for keepalived
       
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
       
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1 
smtp_connect_timeout 30
router_id MASTER-HA
}
       
vrrp_script chk_mysql_port {     
    script "/opt/chk_mysql.sh"   
    interval 2                   
    weight -5                  
    fall 2                    
    rise 1                    
}
       
vrrp_instance VI_1 {
    state BACKUP    
    interface bond0.102      
    mcast_src_ip 10.162.16.221
    virtual_router_id 221    
    priority 101             
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        10.162.16.251
    }
      
track_script {               
   chk_mysql_port             
}
}

(3) 编写切换脚本。

KeepAlived做心跳检测,如果Master的MySQL服务挂了(3306端口挂了),那么它就会选择自杀。Slave的KeepAlived通过心跳检测发现这个情况,就会将VIP的请求接管.

vim /opt/chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    systemctl stop keepalived
fi

chmod 755 /opt/chk_mysql.sh

启动keepalived服务

systemctl start keepalived
正在启动 keepalived:                                      [确定]

(4) master2机器上的keepalived配置。

master2机器上的keepalived.conf文件只修改priority为90、nopreempt不设置、real_server设置本地IP。

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf        #清空默认内容,直接采用下面配置:
! Configuration File for keepalived
       
global_defs {
notification_email {
ops@wangshibo.cn
tech@wangshibo.cn
}
       
notification_email_from ops@wangshibo.cn
smtp_server 127.0.0.1 
smtp_connect_timeout 30
router_id MASTER-HA
}
       
vrrp_script chk_mysql_port {
    script "/opt/chk_mysql.sh"
    interval 2            
    weight -5                 
    fall 2                 
    rise 1               
}
       
vrrp_instance VI_1 {
    state BACKUP
    interface bond0.102
    mcast_src_ip 10.162.16.223
    virtual_router_id 221
    priority 99          
    advert_int 1         
    authentication {   
        auth_type PASS 
        auth_pass 1111     
    }
    virtual_ipaddress {    
        10.162.16.251
    }
      
track_script {               
   chk_mysql_port             
}
}
vim /opt/chk_mysql.sh

#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
    systemctl stop keepalived
fi

chmod 755 /opt/chk_mysql.sh

启动keepalived服务

systemctl start keepalived
正在启动 keepalived:                                      [确定]

2. 默认情况下,vip是在master1上的。使用"ip addr"命令查看vip切换情况


停止master1机器上的mysql服务,根据配置中的脚本,mysql服务停了,keepalived也会停,从而vip资源将会切换到master2机器上。(mysql服务没有起来的时候,keepalived服务也无法顺利启动!)

再次启动master1的mysql和keepalived服务。(注意:如果restart重启mysql,那么还要启动下keepalived,因为mysql重启,根据脚本会造成keepalived关闭)
注意:一定要先启动mysql服务,然后再启动keepalived服务。如果先启动keepalived服务,按照上面的配置,mysql没有起来,就会自动关闭keepalived。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容