keepalived高可用

keepalived高可用

1. keepalived简介

1.1 keepalived

Keepalived是一个开源的软件,用于在Linux系统上实现高可用性和负载平衡。它通过监控服务器的状态并自动切换到备用服务器,以确保服务的连续可用性。Keepalived使用VRRP(虚拟路由器冗馀协议)来实现高可用性,该协议允许多台服务器共享同一个虚拟IP地址,当主服务器失效时,其他备用服务器会自动接管该IP地址以提供持续的服务。此外,Keepalived还支持负载平衡,可以根据预定的算法将流量分发到多个服务器上,从而实现较好的性能和可扩展性。

1.2 keepalived主要功能

  • 高可用性:Keepalived通过实现VRRP协议(虚拟路由器冗馀协议)来确保服务的连续可用性。它允许多个服务器共享同一个虚拟IP地址,当主服务器不可用时,其他备用服务器能够自动接管虚拟IP地址,实现快速且无感知的故障转移。
  • 负载平衡:Keepalived可以根据预定义的负载平衡算法将流量均匀分发到多个服务器上,从而提高系统的性能和可扩展性。它支持多种负载平衡算法,如轮询、最小连接数等。
  • 健康检查:Keepalived提供了健康检查机制,可以定期检测服务器的可用性。它可以检查服务器的连通性、端口状态、应用程序状态等,并根据检查结果进行相应的故障转移或负载平衡操作。
  • 事件通知:Keepalived可以通过邮件、SNMP(简单网络管理协议)、Syslog等方式向管理人员发送通知,以便及时了解系统的状态和事件。

1.3 keepalived高可用故障转移的原理

  • 主/备概念:在使用Keepalived的多个服务器中,有一个主(Master)服务器和一个或多个备(Backup)服务器。主服务器拥有一个虚拟IP(Virtual IP,VIP),而备服务器没有。
  • 健康检查:Keepalived定期通过健康检查检测主服务器的可用性。这可以包括检查服务器的连通性、监听服务端口的状态以及应用程序的运行状态等。
  • VRRP协议:Keepalived使用VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗馀协议)来管理主备服务器之间的通信。VRRP定义了主服务器和备服务器之间的心跳机制和优先级设定。
  • 心跳检测:主服务器通过定期发送VRRP心跳消息来宣告自己的存在和权威性。备服务器通过监听这些心跳消息来检测主服务器的可用性。

在 Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活看,当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

1.4 keepalived工作原理

VRRP

  1. VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
  2. VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
  3. VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
  4. 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
  5. VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
  6. VRRP选举机制
    VRRP路由器在运行过程中有三种状态:
    1. Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;
    2. Master状态;
    3. Backup状态;
      一般主路由器处于Master状态,备份路由器处于Backup状态。

Keepalived服务的工作原理:

Keepalived高可用是通过 VRRP 进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在 Keepalived 服务之间,只有作为主的服务器会一直发送 VRRP 广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。

2. 部署keepalived+haproxy

主机名ip系统版本
rs1192.168.234.11CentOS7服务器1
rs2192.168.234.33CentOS8服务器2
ha1192.168.234.22CentOS8主haproxy1
ha2192.168.234.123CentOS8备haproxy2

高可用虚拟ip地址(vip) 为192.168.234.234

2.1部署haproxy

部署HAproxy详细步骤可参考此篇博客《HAproxy》,在此不多做赘述

//先部署好两台haproxy,这两台haproxy服务的配置文件一样

//ha1主配置文件
[root@ha1 ~]# vim /etc/haproxy/haproxy.cfg 
··························略
     server RS1 192.168.234.11:80 check inter 2000 fall 5
     server RS2 192.168.234.33:80 check inter 2000 fall 5
     
//ha2主配置文件
[root@ha2 ~]# vim /etc/haproxy/haproxy.cfg 
··························略
     server RS1 192.168.234.11:80 check inter 2000 fall 5
     server RS2 192.168.234.33:80 check inter 2000 fall 5

image-20231012142737210

image-20231012142749123

image-20231012142806042

image-20231012142816430

2.2 部署keepalived

ha1做主服务器,ha2做备服务器

keepalived默认配置文件介绍

[root@master ~]# 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      //定义邮箱超时时间
   router_id LVS_DEVEL          //定义路由标识信息,同局域网内唯一
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {        //定义实例
    state MASTER            //指定keepalived节点的初始状态,可选值为MASTER|BACKUP
    interface eth0          //VRRP实例绑定的网卡接口,用户发送VRRP包
    virtual_router_id 51    //虚拟路由的ID,同一集群要一致
    priority 100            //定义优先级,按优先级来决定主备角色,优先级越大越优先
    nopreempt               //设置不抢占
    advert_int 1            //主备通讯时间间隔
    authentication {        //配置认证
        auth_type PASS      //认证方式,此处为密码
        auth_pass 1111      //同一集群中的keepalived配置里的此处必须一致,推荐使用8位随机数
    }
    virtual_ipaddress {     //配置要使用的VIP地址
        192.168.200.16
    }
}

virtual_server 192.168.200.16 1358 {    //配置虚拟服务器
    delay_loop 6        //健康检查的时间间隔
    lb_algo rr          //lvs调度算法
    lb_kind NAT         //lvs模式
    persistence_timeout 50      //持久化超时时间,单位是秒
    protocol TCP        //4层协议

    sorry_server 192.168.200.200 1358   //定义备用服务器,当所有RS都故障时用sorry_server来响应客户端

    real_server 192.168.200.2 1358 {    //定义真实处理请求的服务器
        weight 1    //给服务器指定权重,默认为1
        HTTP_GET {
            url {
              path /testurl/test.jsp    //指定要检查的URL路径
              digest 640205b7b0fc66c1ea91c463fac6334d   //摘要信息
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            url {
              path /testurl3/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334d
            }
            connect_timeout 3       //连接超时时间
            nb_get_retry 3          //get尝试次数
            delay_before_retry 3    //在尝试之前延迟多长时间
        }
    }

    real_server 192.168.200.3 1358 {
        weight 1
        HTTP_GET {
            url {
              path /testurl/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            url {
              path /testurl2/test.jsp
              digest 640205b7b0fc66c1ea91c463fac6334c
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

开始配置

// 两台haproxy都安装keepalived
[root@ha1 ~]# yum install -y keepalived

[root@ha2 ~]# yum install -y keepalived


//修改keepalived配置文件
//修改之前先备份



//ha1配置文件
[root@ha1 ~]# cp /etc/keepalived/keepalived.conf /opt/keepalived.confbackup

[root@ha1 ~]# vim /etc/keepalived/keepalived.conf 
[root@ha1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id haproxy01_master
}

vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 111
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kiwi111
    }
    virtual_ipaddress {
        192.168.234.234
    }
}

virtual_server 192.168.234.234 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.234.22 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }
    }

    real_server 192.168.234.123 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
     }
     

//启动服务
[root@ha1 ~]# systemctl enable --now keepalived
[root@ha1 ~]# 


//h2配置文件
[root@ha2 ~]# cp /etc/keepalived/keepalived.conf /opt/keepalived.confbackup
[root@ha2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id haproxy02_slave
}

vrrp_instance VI_1 {
    state BACKUP           ## 与主服务器不同
    interface ens160
    virtual_router_id 111  ## 与主服务器一致
    priority 80            ## 与主服务器不同,优先级低一点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kiwi111
    }
    virtual_ipaddress {
        192.168.234.234
    }
}

virtual_server 192.168.234.234 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.234.22 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }
    

    real_server 192.168.234.123 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }
[root@ha2 ~]# 

//启动服务
[root@ha2 ~]# systemctl enable --now keepalived
2.3 查看vip

查看vip在哪台服务器上

//ha1
[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:86:97:1e brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.22/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.234.234/32 scope global ens160     ### 可以看见这里有vip
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe86:971e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       

//ha2
[root@ha2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:44:e4:20 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.123/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe44:e420/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       
       
## 可以看到vip在ha1上,所以访问的时候
2.4 在web上访问vip

可以看到访问成功

image-20231012150436181

image-20231012150514131

2.5 修改内核参数,开启vip监听功能

这步可做可不做,这步是为了让用户只能访问vip

//ha1
[root@ha1 ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
[root@ha1 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1


//ha2
[root@ha2 ~]# echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
[root@ha2 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

现在将主服务器的keepalived服务停止,看是否能正常访问

[root@ha1 ~]# systemctl stop keepalived
//h1上vip已经消失
[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:86:97:1e brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.22/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe86:971e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@ha1 ~]# 


//可以看见vip已经转到h2上了
[root@ha2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:44:e4:20 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.123/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.234.234/32 scope global ens160   ## vip
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe44:e420/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

可以正常访问

image-20231012160158092

image-20231012160209767

再将h1的keepalived开启

//可以看见vip又回来了
[root@ha1 ~]# systemctl start keepalived
[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:86:97:1e brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.22/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.234.234/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe86:971e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

3. 定制主配置文件

3.1 主配置文件介绍

vrrp_instance段配置

nopreempt   //设置为不抢占。默认是抢占的,当高优先级的机器恢复后,会抢占低优先 级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。

preempt_delay   //设置抢占延迟。单位是秒,范围是0---1000,默认是0.发现低优先级的MASTER后多少秒开始抢占。

vrrp_script段配置

//作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。
//注意:至少有一个VRRP实例调用它并且优先级不能为0.优先级范围是1-254.
vrrp_script <SCRIPT_NAME> {
          ...
    }

//选项说明:
script "/path/to/somewhere"      //指定要执行的脚本的路径。
interval <INTEGER>              //指定脚本执行的间隔。单位是秒。默认为1s。
timeout <INTEGER>               //指定在多少秒后,脚本被认为执行失败。
weight <-254 --- 254>           //调整优先级。默认为2.
rise <INTEGER>                  //执行成功多少次才认为是成功。
fall <INTEGER>                  //执行失败多少次才认为失败。
user <USERNAME> [GROUPNAME]     //运行脚本的用户和组。
init_fail                       //假设脚本初始状态是失败状态。

//weight说明: 
1. 如果脚本执行成功(退出状态码为0),weight大于0,则priority增加。
2. 如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
3. 其他情况下,priority不变。

real_server段配置

weight <INT>            //给服务器指定权重。默认是1
inhibit_on_failure      //当服务器健康检查失败时,将其weight设置为0, \
                        //而不是从Virtual Server中移除
notify_up <STRING>      //当服务器健康检查成功时,执行的脚本
notify_down <STRING>    //当服务器健康检查失败时,执行的脚本
uthreshold <INT>        //到这台服务器的最大连接数
lthreshold <INT>        //到这台服务器的最小连接数

tcp_check段配置

connect_ip <IP ADDRESS>     //连接的IP地址。默认是real server的ip地址
connect_port <PORT>         //连接的端口。默认是real server的端口
bindto <IP ADDRESS>         //发起连接的接口的地址。
bind_port <PORT>            //发起连接的源端口。
connect_timeout <INT>       //连接超时时间。默认是5s。
fwmark <INTEGER>            //使用fwmark对所有出去的检查数据包进行标记。
warmup <INT>    //指定一个随机延迟,最大为N秒。可防止网络阻塞。如果为0,则关闭该功能。
retry <INIT>                //重试次数。默认是1次。
delay_before_retry <INT>    //默认是1秒。在重试之前延迟多少秒。
3.2 配置检查状态脚本

当某个服务出现故障的时候,keepalived能够检测这个服务出现故障后并自动停止

主服务器上的脚本

//第一个脚本
[root@ha1 ~]# mkdir /kiwi_scripts/
[root@ha1 ~]# cd /kiwi_scripts/
[root@ha1 kiwi_scripts]# vim check_haproxy.sh
[root@ha1 kiwi_scripts]# cat check_haproxy.sh
#!/bin/bash
haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
if [ $haproxy_status -lt 1 ];then
    systemctl stop keepalived
fi
[root@ha1 kiwi_scripts]# chmod +x check_haproxy.sh


//第二个脚本
[root@ha1 kiwi_scripts]# vim notify_haproxy.sh 
#!/bin/bash
case "$1" in
  master)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $haproxy_status -lt 1 ];then
            systemctl start haproxy
        fi
  ;;
  backup)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $nginx_status -gt 0 ];then
            systemctl stop haproxy
        fi
  ;;
  *)
        echo "Usage:$0 master|backup"
  ;;
esac
[root@ha1 kiwi_scripts]# chmod +x notify_haproxy.sh 

备服务器上的脚本

//备服务器只需一个脚本
[root@ha2 kiwi_scripts]# vim notify_haproxy.sh 
#!/bin/bash
case "$1" in
  master)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $haproxy_status -lt 1 ];then
            systemctl start haproxy
        fi
  ;;
  backup)
        haproxy_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhaproxy\b'|wc -l)
        if [ $haproxy_status -gt 0 ];then
            systemctl stop haproxy
        fi
  ;;
  *)
        echo "Usage:$0 master|backup"
  ;;
esac
3.3 配置keepalived将脚本加入配置文件

配置主服务器

[root@ha1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id haproxy01_master
}

vrrp_script haproxy_check {             ## 添加这一段
    script "/kiwi_scripts/check_haproxy.sh"
    interval 1
    weight -50
}    ## 添加这一段


vrrp_instance VI_1 {
    state MASTER
    interface ens160
    virtual_router_id 111
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kiwi111
    }
    virtual_ipaddress {
        192.168.234.234
    }
    track_script {             ## 添加这一段
        haproxy_check
    }            ## 添加这一段
}

virtual_server 192.168.234.234 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.234.22 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }
    }

    real_server 192.168.234.123 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }

配置备服务器

[root@ha2 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   router_id haproxy02_slave
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 111
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass kiwi111
    }
    virtual_ipaddress {
        192.168.234.234
    }
    notify_master "/kiwi_scripts/notify_haproxy.sh master"     ## 添加这一行
    notify_backup "/kiwi_scripts/notify_haproxy.sh backup"     ## 添加这一行
}

virtual_server 192.168.234.234 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.234.22 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }
    

    real_server 192.168.234.123 80 {
        weight 1
        TCP_CHECK {
            connect_port 8080
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
         }
        }

检查

//主服务器
//关闭haproxy
[root@ha1 ~]# systemctl stop haproxy
[root@ha1 ~]# systemctl is-active haproxy
inactive
//查看keepalived状态
[root@ha1 ~]# systemctl is-active keepalived
inactive
//可以看到vip已经消失
[root@ha1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:86:97:1e brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.22/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe86:971e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       
   
   
//vip已经传到备服务器
[root@ha2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:44:e4:20 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.234.123/24 brd 192.168.234.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.234.234/32 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe44:e420/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

//当主服务haproxy的服务恢复正常时,备服务器的haproxy服务就会停止
[root@ha1 ~]# systemctl start haproxy keepalived
[root@ha1 ~]# systemctl is-active haproxy keepalived
active
active

//备服务器
[root@ha2 kiwi_scripts]# systemctl is-active haproxy keepalived
inactive
active

//当主服务器停止之后备服务器就会自动开启服务
[root@ha1 ~]# systemctl stop haproxy

//备服务器
[root@ha2 kiwi_scripts]# systemctl is-active haproxy
active

部署完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值