keepalived安装

Posted w329636271

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived安装相关的知识,希望对你有一定的参考价值。

作用

Keepalived的作用是检测服务器的状态,如果有一台web服务器、mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。

这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的WEB和Mysql服务器。Layer3,4&7工作在IP/TCP协议栈的网络层、传输层及应用层,实现原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(如果发现某台服务的IP地址无法ping通,Keepalived便报告这台服务器失效,并将它从服务器集群中剔除。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。)
Layer4: Layer4主要以TCP端口的状态来决定服务器工作正常与否。如WEB server的服务端口一般是80,(如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除)
Layer7:Layer7工作在应用层,Keepalived将根据用户的设定检查服务器程序的运行是否正常。(如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除)

vrrp

VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,它负责转发数据包到这些虚拟 IP 地址。一旦主路由器不可用,这种选择过程就提供了动态的故障转移机制,这就允许虚拟路由器的 IP 地址可以作为终端主机的默认第一跳路由器。是一种LAN接入设备备份协议。一个局域网络内的所有主机都设置缺省网关,这样主机发出的目的地址不在本网段的报文将被通过缺省网关发往三层交换机,从而实现了主机和外部网络的通信
特点:
1、IP地址备份,VRRP的主要功能。可以在网络中提供多个VirtuaI Router选举的负载均衡以及在单一的网络中支持多重逻辑IP子网络。
2、最优路径指示。从VRRP组内多个路由器的路由中,保证Master收敛到现成可用最优先的路由器。
3、最小化不必要的服务中断。在主路由正常工作期间,不触发其他低优先级别路由器选择主路由的服务。
4、广泛的安全性。它可在多种不同的交互环境中采用不同的安全策略,它只需极少的配置和开销就可以进行严格的验证。
5、在可扩展网络有效的工作。

选举机制

VRRP使用选举机制来确定路由器的状态(Master或Backup)。运行VRRP的一组路由器对外组成了一个虚拟路由器,其中一台路由器处于Master状态,其他的处于Backup状态。
运行VRRP的路由器都会发送和接收VRRP通告消息,在通告消息中包含了自身的VRRP优先级信息。VRRP通过比较路由器的优先级进行选举,优先级高的路由器将成为主路由器,其他路由器都为备份路由器。
虚拟路由器和VRRP路由器都有自己的lP地址(虚拟路由器的lP地址可以和VRRP备份组内的某个路由器的接口地址相同)。如果VRRP组中存在lP地址拥有者,即虚拟地址与某台VRRP路由器的地址相同时,IP地址拥有者将成为主路由器,并且拥有最高优先级255。如果VRRP组中不存在IP地址拥有者。VRRP路由器将通过比较优先级来确定主路由器。路由器可配置的优先级范围为1~254,默认情况下VRRP路由器的优先级为100。当优先级相同时,VRRP将通过比较IP地址来进行选举,lP地址大的路由器将成为主路由器。

安装

配置两台虚拟机,规划如下

192.168.28.133
192.168.28.134
192.168.28.110虚拟ip

软件安装

yum install -y keepalived  #安装命令
systemctl enable keepalived  #配置开启自启动

192.168.28.133配置如下

[zwy@localhost ~]$ cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs 
   notification_email 
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   vrrp_skip_check_adv_addr
   vrrp_mcast_group4 224.0.0.18  # 同一个局域网内存在多组keepalived,同一组的keepalived的多播地址要相同,不同组的尽量不同
   router_id LVS_DEVEL  #同一组的keepalived的相同,不同组的不同
#   vrrp_strict    # 部署的时候发现这个导致禁ping了
   vrrp_garp_interval 0
   vrrp_gna_interval 0


vrrp_instance VI_1 
    state MASTER  # 从机路由改为BACKUP
    interface ens33  #ifconfig查看网卡
    virtual_router_id 51 #同一组的keepalived的 需要相同,不然会导致脑裂
    priority 150 #master的参数大,backup的参数小,
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111 #同一组的keepalived的相同,不同组的不同  
    
    virtual_ipaddress 
        192.168.28.110 # 虚拟ip
    


启动

#防火墙策略
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
 firewall-cmd --reload
#启动
service keepalived restart

192.168.28.134配置如下

[zwy@localhost ~]$ cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs 
   notification_email 
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   vrrp_skip_check_adv_addr
   vrrp_mcast_group4 224.0.0.18  # 同一个局域网内存在多组keepalived,同一组的keepalived的多播地址要相同,不同组的尽量不同
   router_id LVS_DEVEL  #同一组的keepalived的相同,不同组的不同
#   vrrp_strict    # 部署的时候发现这个导致禁ping了
   vrrp_garp_interval 0
   vrrp_gna_interval 0


vrrp_instance VI_1 
    state BACKUP  # 从机路由改为BACKUP
    interface ens33  #ifconfig查看网卡
    virtual_router_id 51 #同一组的keepalived的 需要相同,不然会导致脑裂
    priority 100 #master的参数大,backup的参数小,
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111 #同一组的keepalived的相同,不同组的不同  
    
    virtual_ipaddress 
        192.168.28.110 # 虚拟ip
    

启动

#防火墙策略
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
 firewall-cmd --reload
#启动
service keepalived restart

验证如下:
133机器上执行,可以看到ip;192.168.28.110

[root@localhost keepalived]# ip add |grep 110
    inet 192.168.28.110/32 scope global ens33

需要在134上执行相同命令,没看到110ip,则为正常;

可以在133上关闭keepalived,查看ip是否可以飘到134上。

keepalive与mysql

192.168.28.133
192.168.28.134
192.168.28.119虚拟ip

192.168.28.133操作如下
配置修改

cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs 
   notification_email 
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   vrrp_skip_check_adv_addr
   vrrp_mcast_group4 224.0.0.18  # 同一个局域网内存在多组keepalived,同一组的keepalived的多播地址要相同,不同组的尽量不同
   router_id LVS_DEVEL  #同一组的keepalived的相同,不同组的不同
#   vrrp_strict    # 部署的时候发现这个导致禁ping了
   vrrp_garp_interval 0
   vrrp_gna_interval 0


vrrp_script chk_mysql 
    script "/etc/keepalived/chk_mysql.sh"
    interval 3
    fall 3


vrrp_instance VI_1 
    state MASTER  # 从机路由改为BACKUP 主路由为MASTER
    interface ens33  #ifconfig查看网卡
    virtual_router_id 51 #同一组的keepalived的 需要相同,不然会导致脑裂
    priority 150 #master的参数大,backup的参数小,
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111 #同一组的keepalived的相同,不同组的不同  
    
    virtual_ipaddress 
        192.168.28.119 # 虚拟ip
    

    track_script 
        chk_mysql
    

如下路径创建chk_mysql.sh,注意修改mysql的用户名密码

[root@localhost keepalived]# cat  /etc/keepalived/chk_mysql.sh 

#!/bin/sh
 
###判断如果上次检查的脚本还没执行完,则退出此次执行
if [ `ps -ef|grep -w "$0"|grep "/bin/sh*"|grep "?"|grep "?"|grep -v "grep"|wc -l` -gt 2 ];then  #理论上这里应该是1,但是实验的结果却是2
    exit 0
fi
 
alias mysql_con='mysql -uroot -pnew-password'
 
###定义一个简单判断mysql是否可用的函数
function excute_query 
    mysql_con -e "select 1;" 2>>/etc/keepalived/logs/check_mysql.err

 
###定义无法执行查询,且mysql服务异常时的处理函数
function service_error 
    echo -e "`date "+%F  %H:%M:%S"`    -----mysql service error,now stop keepalived-----" >> /etc/keepalived/logs/check_mysql.err
#    /sbin/service keepalived stop &>> /etc/keepalived/logs/check_mysql.err
    echo -e "\\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\\n" >> /etc/keepalived/logs/check_mysql.err

 
 
###检查开始: 执行查询
excute_query
if [ $? -ne 0 ];then
    /sbin/service mysql status &>/dev/null
    if [ $? -ne 0 ];then
        service_error
    fi
   exit 1 
fi

exit 0

修改可执行权限,并创建logs目录

 chmod +x /etc/keepalived/chk_mysql.sh
 mkdir /etc/keepalived/logs
service keepalived restart

192.168.28.134操作
主要注意的是priority,state

[root@localhost keepalived]# cat keepalived.conf 
! Configuration File for keepalived

global_defs 
   notification_email 
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   vrrp_skip_check_adv_addr
   vrrp_mcast_group4 224.0.0.18  # 同一个局域网内存在多组keepalived,同一组的keepalived的多播地址要相同,不同组的尽量不同
   router_id LVS_DEVEL  #同一组的keepalived的相同,不同组的不同
#   vrrp_strict    # 部署的时候发现这个导致禁ping了
   vrrp_garp_interval 0
   vrrp_gna_interval 0


vrrp_instance VI_1 
    state BACKUP  # 从机路由改为BACKUP 主路由为MASTER
    interface ens33  #ifconfig查看网卡
    virtual_router_id 51 #同一组的keepalived的 需要相同,不然会导致脑裂
    priority 100 #master的参数大,backup的参数小,
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111 #同一组的keepalived的相同,不同组的不同  
    
    virtual_ipaddress 
        192.168.28.119 # 虚拟ip
    

    track_script 
        chk_mysql
    



vrrp_script chk_mysql 
    script "/etc/keepalived/chk_mysql.sh"
    interval 3
    fall 3

#chk_myql.sh的创建与133相同操作;这边不再重复;
#重启keepalived

service keepalived restart

其他
日志查看

service keepalived status
sudo tailf /var/log/messages

报错
keepalived Then you must tell SELinux about this by enabling the ‘keepalived_connect_any’ boolean
解决:

setsebool -P keepalived_connect_any 1

某些情况下可以把selinux关闭

vim/etc/selinux/config
把selinux = disable (修改成disable)

以上是关于keepalived安装的主要内容,如果未能解决你的问题,请参考以下文章

keepalived 安装

keepalived高可用搭建

【keepalived】keepalived 容器化安装

Keepalived概述和安装

keepalived安装与配置

keepalived编译安装