KEEPALIVED高可用集群最详解

news2024/12/24 0:06:22

目录

一、高可用集群

1.1 集群的类型

1.2 实现高可用

1.3  VRRP:Virtual Router Redundancy Protocol

1.3.1 VRRP相关术语

1.5.2 VRRP 相关技术

二、部署KEEPALIVED

2.1 keepalived 简介

2.2 Keepalived 架构

2.3 Keepalived 环境准备

2.3.1 实验环境

2.4 Keepalived 相关文件 

2.5 安装软件

2.6 KeepAlived 配置说明 

2.6.1 配置虚拟路由

2.6.2 示例: keepalived配置文件中配置虚拟路由

2.6.2.1  抓包命令查看组播信息:

2.6.3 实现独立子配置文件

三.Keepalived 应用示例

3.1 实现master/slave的 Keepalived 单主架构

3.1.1 配置MASTER

3.1.2 配置BACKUP 

3.1.3 抓包查看

3.2 抢占模式和非抢占模式  

3.2.1 非抢占模式 

3.2.2 抢占延迟模式

3.3vip单播模式

 3.3.1 抓包命令查看:  ka2上看不到,因为没有vip

3.4 keepalived实现邮件通知

3.5 实现keepalived的双主架构 master/master

3.6 实现IPVS的高可用性(DR模式)

3.6.1 应用层监测

3.6.2 TCP监测

3.6.3 实现单主的 LVS-DR 模式

3.7 vrrp Script 配置 脚本控制vip

3.7.1 利用脚本实现主从角色切换

​3.8 keepalived-haproxy实现高可用

3.8.1 还原状态

​3.8.2 实现haproxy高可用 

3.8.3 测试


一、高可用集群

1.1 集群的类型

  • LBLoad Balance 负载均衡
  • LVS/HAProxy/nginxhttp/upstream, stream/upstream
  • HAHigh Availability 高可用集群 数据库、Redis
  • SPoF: Single Point of Failure,解决单点故障
  • HPCHigh Performance Computing 高性能集群

1.2 实现高可用

提升系统高用性的解决方案:降低 MTTR- Mean Time To Repair( 平均故障时间 )
解决方案:建立冗余机制
  • active/passive /
  • active/active 双主
  • active --> HEARTBEAT --> passive
  • active <--> HEARTBEAT <--> active

1.3  VRRPVirtual Router Redundancy Protocol

虚拟路由冗余协议 , 解决静态网关单点风险
  • 物理层:路由器、三层交换机
  • 软件层:keepalived

1.3.1 VRRP相关术语

  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIPVirtual IP
  • VMACVirutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:
    1.  master:主设备
    2.  backup:备用设备
    3.   priority:优先级

1.5.2 VRRP 相关技术

通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全认证:
  • 无认证
  • 简单字符认证:预共享密钥
  • MD5
工作模式:
  • /备:单虚拟路由器
  • /主:主/备(虚拟路由器1),备/主(虚拟路由器2

二、部署KEEPALIVED

2.1 keepalived 简介

vrrp 协议的软件实现,原生设计目的为了高可用 ipvs 服务
官网: http://keepalived.org/
功能:
  • 基于vrrp协议完成地址流动
  • vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginxhaproxy等服务

2.2 Keepalived 架构

官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html
  • 用户空间核心组件:
        vrrp stack: VIP 消息通告
        checkers:监测 real server
        system call:实现 vrrp 协议状态转换时调用脚本的功能
        SMTP:邮件组件
        IPVS wrapper:生成 IPVS 规则
        Netlink Reflector:网络接口
        WatchDog:监控进程
  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

2.3 Keepalived 环境准备

2.3.1 实验环境

主机名IP
ka1172.25.254.10/24
ka2172.25.254.20/24
realserver1172.25.254.110/24
realserver2172.25.254.120/24
  • 各节点时间必须同步:ntp, chrony
  • 关闭防火墙及SELinux
  • 各节点之间可通过主机名互相通信:非必须
  • 建议使用/etc/hosts文件实现:非必须
  • 各节点之间的root用户可以基于密钥认证的ssh服务完成互相通信:非必须

2.4 Keepalived 相关文件 

  • 软件包名:keepalived
  • 主程序文件:/usr/sbin/keepalived
  • 主配置文件:/etc/keepalived/keepalived.conf
  • 配置文件示例:/usr/share/doc/keepalived/
  • Unit File/lib/systemd/system/keepalived.service
  • Unit File的环境配置文件:/etc/sysconfig/keepalived

2.5 安装软件

[root@ka1 ~]# dnf install keepalived -y
[root@ka1 ~]# systemctl start keepalived

2.6 KeepAlived 配置说明 

配置文件:/etc/keepalived/keepalived.conf

  • GLOBAL CONFIGURATION
        Global definitions: 定义邮件配置, route_id vrrp 配置,多播地址等
  • VRRP CONFIGURATION
         VRRP instance(s): 定义每个vrrp虚拟路由器
  • LVS CONFIGURATION
        Virtual server group(s)
        Virtual server(s): LVS集群的VS RS

2.6.1 配置虚拟路由

配置master:

vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
      2961953033@qq.com                #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区
                                    分写多个
   }
   notification_email_from keepalived@ka1.exam.org      #发邮件的地址
   smtp_server 127.0.0.1                                #邮件服务器地址
   smtp_connect_timeout 30                              #邮件服务器连接timeout
   router_id ka1.exam.org                               #每个keepalived主机唯一标识,多节点 
                                                         重名不影响
 
   vrrp_skip_check_adv_addr                 #对所有通告报文都检查,会比较消耗性能  
                                            启用此配置后,如果收到的通告报文和上    
                                            一个报文是同一个路由器,则跳过检查, 
                                            默认值为全检查
 
   #vrrp_strict                            #严格遵循vrrp协议
                                           #启用此项后以下状况将无法启动服务:
                                              1.无VIP地址
                                              2.配置了单播邻居
                                              3.在VRRP版本2中有IPv6地址
                                           #建议不加此项配置
 
   vrrp_garp_interval 0                    #报文发送延迟,0表示不延迟
   vrrp_gna_interval 0                     #消息发送延迟
   vrrp_mcast_group4 224.0.0.18            #指定组播IP地址范围:
}

配置slave:

vrrp_instance VI_1 {
    state MASTER
    interface eth0                   #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和            
                                      VIP不在一个网卡
    
    virtual_router_id 100            #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此 
                                      值必须唯一,否则服务无法启动
                                      同属一个虚拟路由器的多个keepalived节点必须相同
                                      务必要确认在同一网络中此值必须唯一
    
    priority 100                    #当前物理节点在此虚拟路由器的优先级,范围:1-254
                                     值越大优先级越高,每个keepalived主机节点此值不同
 
    advert_int 1                    #vrrp通告的时间间隔,默认1s
    authentication {                #认证机制
        auth_type PASS              #PASS为简单密码(建议使用)
        auth_pass 1111              #预共享密钥,仅前8位有效
                                     同一个虚拟路由器的多个keepalived节点必须一样
    }
    virtual_ipaddress {             #虚拟IP,生产环境可能指定上百个IP地址
                                    
        172.25.250.100/24 dev eth0 label eth0:1    #<IPADDR> dev <STRING> scope <SCOPE>                                     
                                                   label <LABEL>
                                       #指定VIP,不指定网卡,默认为eth0,注意:不指 
                                        定/prefix,默认32
    }
}

2.6.2 示例: keepalived配置文件中配置虚拟路由

ka1和ka2中安装软件包:

yum install keepalived -y

主配置文件:

/etc/keepalived/keepalived.conf


默认为抢占模式:
vim /etc/keepalived/keepalived.conf
配置全局参数:
global_defs {
   notification_email {
        2961953033@qq.com
        18883572121@163.com
   }
   notification_email_from keepalived@timingding.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timingding.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

配置vip:
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

systemctl start keepalived.service

查看:

这里简便快捷一下:使用scp命令直接传到另一台ka上面

 直接传到ka2上面:
scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf

ka2上面的优先级设置的低一些: 

ka2配置vip的地方要改优先级:

vrrp_instance VI_1 {
    state BACKUP   ------ 改为BACKUP
    interface eth0
    virtual_router_id 100
    priority 80    ------ 改的比ka1低一些
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
2.6.2.1  抓包命令查看组播信息:

tcpdump -i eth0 -nn host 224.0.0.18

 此时ping 172.25.254.100 不通。

 命令查看:

iptables -nL

想ping通,得在全局配置里面加参数 vrrp_iptables,不想加就可以把vrrp_strict注释掉,要么都开,要么就注释掉

ka1和ka2都要加
global_defs {
   notification_email {
        2961953033@qq.com
        18883572121@163.com
   }
   notification_email_from keepalived@timingding.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timingding.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables  ------ 加这个参数
}

此时就可以ping通172.25.254.100了。

2.6.3 实现独立子配置文件

vim /etc/keepalived/keepalived.conf
把虚拟路由注释掉:
#vrrp_instance VI_1 {
#    state MASTER
#    interface eth0
#    virtual_router_id 100
#    priority 100
#    advert_int 1
#    authentication {
#        auth_type PASS
#        auth_pass 1111
#    }
#    virtual_ipaddress {
#        172.25.254.100/24 dev eth0 label eth0:1
#    }
#}
加上
include "/etc/keepalived/conf.d/*.conf"

vim /etc/keepalived/conf.d/172.25.254.100.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
   }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

systemctl restart keepalived.service

.Keepalived 应用示例

3.1 实现master/slave Keepalived 单主架构

3.1.1 配置MASTER


[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

global_defs {
   notification_email {
        2961953033@qq.com
        18883572121@163.com
   }
   notification_email_from keepalived@timingding.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.timingding.org
   vrrp_skip_check_adv_addr
   #vrrp_strict                
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   #vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}



vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

3.1.2 配置BACKUP 

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {
   notification_email {
      2961953033@qq.com
      18883572121@163.com
   }
   notification_email_from keepalived@ka2.timingding.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka2.timingding.org
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group 224.0.0.18
   #vrrp_iptables
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

3.1.3 抓包查看

tcpdump -i eth0 -nn host 224.0.0.18

3.2 抢占模式和非抢占模式  

      默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的 master 角色, 这样会使vip KA 主机中来回漂移,造成网络抖动,
        建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的 master 角色
        
        非抢占模块下,如果原主机 down , VIP 迁移至的新主机 , 后续也发生 down , 仍会将 VIP 迁移回原主机

 master角色下线后,会转移到另一台主机后,master角色重新恢复之后,不会因为优先级抢占vip

3.2.1 非抢占模式 

使用参数:nopreempt

ka1和ka2一样:
vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP   ---- 也得设置为BACKUP,两台都为备机
    interface eth0
    virtual_router_id 100 
    priority 100
    advert_int 1
    nopreempt     ------- 加上这个参数
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

3.2.2 抢占延迟模式

使用参数:preempt_delay

        抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP
ka1主机上:ka2也一样
vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    preempt_delay 5s    ---- 抢占延时为5s,一般设定一分钟,五分钟,这里演示。
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }

3.3vip单播模式

ka1主机上:ka2也一样
vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10   ---- 指定谁到谁  ka2上相反
    unicast_peer {
        172.25.254.20
    }

 3.3.1 抓包命令查看:  ka2上看不到,因为没有vip

[root@ka1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20

3.4 keepalived实现邮件通知

安装邮件发送工具:
dnf install mailx -y

QQ邮箱配置:
vim /etc/mail.rc

set from=2961953033@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2961953033@qq.com
set smtp-auth-password=gyzvbkvimprddecb   ---- 去QQ邮箱上面登录弄授权码
set smtp-auth=login
set ssl-verify=ignore

测试发送邮件:
echo test message |mail -s test 2961953033@qq.com

写个脚本:
vim /etc/keepalived/mail.sh

#!/bin/bash
mail_dst="2961953033@qq.com"
send_message()
{
  mail_sub="HOSTNAME to be $1 vip mopve"
  mail_msg="`date +%F\ %T`: vrrp move $HOSTNAME chage $1"
  echo $mail_msg | mail -s "$mail_sub" $mail_dst
}

case $1 in
  master)
  send_message master
  ;;
  backup)
  send_message backup
  ;;
  fault)
  send_message fault
  ;;
  *)
  ;;
esac

chmod +x /etc/keepalived/mail.sh

在ka1和ka2虚拟路由上面添加节点:
vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
    notify_master "/etc/keepalived/notify.sh master"     ----- 添加这三行
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}

3.5 实现keepalived的双主架构 master/master

         master/slave的单主架构,同一时间只有一个Keepalived 对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master 的双主架构,解决此问题。
master/master 的双主架构:        
        即将两个或以上VIP分别运行在不同的 keepalived 服务器,以实现服务器并行提供 web 访问的目的,提高 服务器资源利用率
ka1和ka2上都加上,都有一个主备
vim /etc/keepalived/keepalived.conf

vrrp_instance VI_2 {
    state MASTWE
    interface eth0
    virtual_router_id 200
    priority 80      ----- 优先级不能一样
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
}

3.6 实现IPVS的高可用性(DR模式)

3.6.1 应用层监测

应用层检测: HTTP_GET|SSL_GET
HTTP_GET|SSL_GET {
    url {
    path <URL_PATH> #-----------定义要监控的URL
    status_code <INT> #---------判断上述检测机制为健康状态的响应码,一般为 200
    }
    connect_timeout <INTEGER> #---------客户端请求的超时时长, 相当于haproxy的timeout server
    nb_get_retry <INT> #---------重试次数
    delay_before_retry <INT> #---------重试之前的延迟时长
    connect_ip <IP ADDRESS> #---------向当前RS哪个IP地址发起健康状态检测请求
    connect_port <PORT> #--------向当前RS的哪个PORT发起健康状态检测请求
    bindto <IP ADDRESS> #---------向当前RS发出健康状态检测请求时使用的源地址
    bind_port <PORT> #----------向当前RS发出健康状态检测请求时使用的源端口
}

3.6.2 TCP监测

TCP_CHECK {
    connect_ip <IP ADDRESS> #----------向当前RS的哪个IP地址发起健康状态检测请求
    connect_port <PORT> #---------向当前RS的哪个PORT发起健康状态检测请求
    bindto <IP ADDRESS> #--------发出健康状态检测请求时使用的源地址
    bind_port <PORT> #---------发出健康状态检测请求时使用的源端口
    connect_timeout <INTEGER> #------客户端请求的超时时长
                              #-------等于haproxy的timeout server
}

3.6.3 实现单主的 LVS-DR 模式

永久设定vip:
vim /etc/sysconfig/network-scripts/ifcfg-lo 

加上:
IPADDR1=172.25.254.100
NETMASK1=255.255.255.255
NETWORK=127.0.0.0

这里我们给上临时的就行:
reslserver1和2上面给上vip(临时)
ip a a 172.25.254.100 dev lo

解决响应问题:
查看arp:
sysctl -a | grep arp

ka1上面
vim /etc/sysctl.d/arp.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.lo.arp_ignore=1

用scp命令写到ka2上面:
scp /etc/sysctl.d/arp.conf root@172.25.254.110:/etc/sysctl.d/arp.conf


ka1和ka2上面安装ipvsadm 用来查看策略:
yum install ipvsadm -y

ka1和ka2一样:
vim /etc/keepalived/keepalived.conf

virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 50
    protocol TCP

    real_server 172.25.254.110 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
    real_server 172.25.254.120 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
        }
    }
}



ssytemctl restart keepalived.service


使用ipvsadm -Ln 查看策略是否写进去

3.7 vrrp Script 配置 脚本控制vip

3.7.1 利用脚本实现主从角色切换

示例:先用例子测试一下:
检测文件是否存在,存在为真(1),ka1就降低优先级,vip飘到ka2上面,不存在为假(0),vip就按兵不动
[root@ka1 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
[ ! -f /mnt/ding ]   ---- 取反
 
chmod +x /etc/keepalived/test.sh ---- 给上可执行权限

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_script check_file {
   script "/etc/keepalived/test.sh"     ------shell命令或脚本的路径
   interval 1                  ------ 检测的间隔时间,默认为1s
   weight -30                  ------ 默认为零,这里测试设置-30,当运行脚本检测到之后,为非0,就会与VIP的优先级相加,优先										 降低,实现VIP飘移,为0时就VIP就按兵不动。
   fall 2					   ------ 脚本连续几次都执行失败,则转换为失败,建议设置为2以上
   rise 2  					   ------ 执行脚本连续几次都成功,把服务器标记为成功
   timeout 2                   ------ 设置的超时时间。
}


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
	track_script {            ------ 调用这个script配置参数
 		check_file
	}    
}

[root@ka1 ~]# systemctl restart keepalived.service 

sh /etc/keepalived/test.sh
echo $?

0
此时/mnt底下没有ding这个文件,运行脚本输出0,VIP就按兵不动

此时在/mnt底下创建ding这个文件,输出为非0,执行脚本,此时vip飘到ka2上面

touch /mnt/ding
sh /etc/keepalived/test.sh
echo $?

1

ka1上面:

ka2上面: 

 删除这个文件之后,VIP就自动飘回来了
rm -rf /mnt/ding
systemctl restart keepalived.service

ifconfig

3.8 keepalived-haproxy实现高可用

3.8.1 还原状态

两台ka1和ka2上安装haproxy
yum install haproxy -y

把两台server机上面的VIP和arp响应给去掉:
[root@realserver1 ~]# ip a d 172.25.254.100/32 dev lo
[root@realserver2 ~]# ip a d 172.25.254.100/32 dev lo

arp响应:
[root@realserver1 ~]# vim /etc/sysctl.d/arp.conf
[root@realserver2 ~]# vim /etc/sysctl.d/arp.conf

net.ipv4.conf.all.arp_ignore=0
net.ipv4.conf.all.arp_announce=0
net.ipv4.conf.lo.arp_announce=0
net.ipv4.conf.lo.arp_ignore=0

sysctl --system   ---- 查看


ka1和ka2上都开启内核路由:
[root@ka1 ~]# vim /etc/sysctl.conf 
[root@ka2 ~]# vim /etc/sysctl.conf 

et.ipv4.ip_nonlocal_bind=1    ---- 两台都开启内核路由

sysctl -p    ----- 刷新一下

记住要把之前做的LVS给注释掉,lvs和haproxy不能同时使用!!!!
[root@ka1 ~]# vim /etc/haproxy/haproxy.cfg
[root@ka2 ~]# vim /etc/haproxy/haproxy.cfg

listen webcluster
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web1 172.25.254.120:80 check inter 3 fall 2 rise 5

查看端口是否开启:
[root@ka1 ~]# netstat -antlupe | grep haproxy
tcp        0      0 172.25.254.100:80       0.0.0.0:*    LISTEN      0          2636800    5709/haproxy     
tcp        0      0 0.0.0.0:5000            0.0.0.0:*    LISTEN      0          2636798    5709/haproxy     
udp        0      0 0.0.0.0:35424           0.0.0.0:*                0          2636799    5708/haproxy     
[root@ka1 ~]# 

3.8.2 实现haproxy高可用 

如何检测haproxy的存活状态:
killall -0 haproxy

写入之前示例的那个脚本:
[root@ks2 ~]# vim /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf 
[root@ka2~]# vim /etc/keepalived/keepalived.conf 

vrrp_script check_haproxy {
   script "/etc/keepalived/test.sh"     
   interval 1                  
   weight -30                 
   fall 2					   
   rise 2  					   
   timeout 2                   
}


vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
	track_script {            
 		check_haproxy
	}    
}

systemctl restart keepalived.service

3.8.3 测试

复制一个ka1出来,写个死循环:
while true
>do
>curl 172.25.254.100;sleep 0.5
>done

把ka1上的haproxy挂掉,这边不会受影响,一直循环,VIP会飘到ka2上面

把ka1上面的haproxy给挂掉:

[root@ka1 ~]# systemctl stop haproxy.service
此时ka1上面没有VIP了

查看ka2上面:

把ka1上面的haproxy重新启动,VIP又回来了
systemctl start haproxy.service

       死循环也不会受影响,因为ka1上面haproxy挂掉了,ka1上的VIP优先级降低,飘到ka2上面去了,ka2上面的haproxy还存活,也有VIP,所以死循环会一直能访问。最终不会影响架构的最终访问。

至此,keepalived-haproxy就实现了高可用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酒店民宿小程序开发,提升用户体验,增加收益

近年来&#xff0c;我国旅游业蓬勃发展&#xff0c;推动了酒店民宿的快速发展。目前&#xff0c;酒店行业也结合数字化模式打造出了线上酒店民宿预订小程序。 随着网络时代的到来&#xff0c;大红都开始热衷于在手机上完成各种消费&#xff0c;酒店民宿小程序的开发也顺应了时…

1.1 数据库的定义与作用

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

Linux服务器:Samba配置

Window配置 安装协议 首先确认自己的电脑有误安装SMB协议&#xff0c;安装方法&#xff1a;控制面板→程序功能 然后选择左侧的安装或关闭Window功能 安装就好了。 修改工作组 然后就是记住、或者修改Window账户所在组了 右键我的电脑属性&#xff0c;去找电脑的工作组&am…

【信创】双系统下删除Windows只保留麒麟系统

原文链接&#xff1a;【信创】双系统下删除Windows只保留麒麟系统 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在双系统环境下删除Windows操作系统并只保留麒麟系统的文章。在双系统环境中&#xff0c;如果你决定完全转向麒麟系统&#xff0c;删除Windows系统…

BayesPrism 增速 400 倍?!免疫反卷积算法 InstaPrism

生信碱移 BayesPrism 加速 计算细胞类型去卷积是一种重要的分析技术&#xff0c;用于模拟整体基因表达数据的成分异质性。之前小编给大家介绍过一篇子刊文章&#xff0c;其综合比较了多种细胞去卷积算法&#xff08;图1&#xff09;。研究的结果显示&#xff0c;BayesPrism 作…

文献解读-肿瘤测序-第二十八期|《基于Palbociclib的高通量联合药物筛选确定了HPV阴性头颈部鳞状细胞癌的协同治疗选择》

关键词&#xff1a;肿瘤测序&#xff1b;基因测序&#xff1b;变异检测&#xff1b; 文献简介 标题&#xff08;英文&#xff09;&#xff1a;Palbociclib-based high-throughput combination drug screening identifies synergistic therapeutic options in HPV-negative hea…

HTML中的<fieldset>标签元素框的使用

HTML 提供的 <fieldset> 标签用于在表单中分组相关元素。 <fieldset> 标签会在相关元素周围绘制一个框。 <legend> 标签为 fieldset 元素定义标题。 语法如下&#xff1a; <fieldset><legend>标题</legend><!-- 元素内容... -->…

C++第三十六弹---二叉搜索树的性能飞跃:AVL树原理与实现

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1 AVL 树 1.1 AVL树的概念 1.2 AVL树节点的定义 1.3 AVL树的插入 1.4 AVL树的旋转 1.5 AVL树的验证 1 AVL 树 1.1 AVL树的概念 二叉搜索树虽…

韩顺平Java-第十九章:IO流

一 文件 文件是保存数据的地方。 1 文件流 文件在程序中是以流的形式来操作的。 流&#xff1a;数据在数据源&#xff08;文件&#xff09;和程序&#xff08;内存&#xff09;之间经历的路径&#xff1b; 输入流&#xff1a;数据从数据源&#xff08;文件&#xff09;到程…

深度解析 MetaArena 游戏引擎,如何让 GameFi 应用更具生命力?

从去年下边年 Friend.tech 引发的新一轮社交热&#xff0c;到去年年底铭文赛道高潮不断&#xff0c;加密市场情绪不断被点燃。但事实上&#xff0c;链游板块在最近几轮热潮中显得有些冷清&#xff0c;无论是彼时的 GameFi 龙头 Axie Infinity&#xff0c;还是在上一轮 GameFi 热…

PHP微信V3支付完整版:实现与微信退款回调 总结

一、在微信商户平台注册账号并完成相关设置&#xff0c;获取到商户号和API密钥。同时&#xff0c;下载并安装官方提供的PHP SDK。 二、发起支付 使用SDK发起支付请求相对简单。首先&#xff0c;创建一个UnifiedOrder对象&#xff0c;然后设置订单的相关信息&#xff0c;如商品…

【HeadFirst 设计模式】装饰者模式的C++实现

一、案例背景 Starbuzz是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店&#xff0c;在对面街上肯定还会看到另一家。因为扩张速度实在太快了&#xff0c;他们准备更新订单系统&#xff0c;以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时&am…

HTTP/1.1

目录 一、比较HTTP/1.0的优点 二、请求报文 1.请求报文 &#xff08;1&#xff09;格式 2.get请求 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体 3.post请求 &#xff08;1&#xff09;请求行 &#xff08;2&…

LLM - 微调(Fine-Tuning) Llama3 以及合并微调模型 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/141218047 在微调 Llama3 大模型时&#xff0c;需要注意一些事项&#xff1a; 合适的预训练模型&#xff1a;不同的预训练模型具有不同的特点和适…

Selenium WebDriver 的 Microsoft Edge 驱动程序【附代码】

1、从 Microsoft Edge 驱动程序的官方网站下载与浏览器版本相匹配的驱动程序。 https://msedgewebdriverstorage.z22.web.core.windows.net/https://msedgewebdriverstorage.z22.web.core.windows.net/ 2、指向驱动程序&#xff08;msedgedriver.exe&#xff09;的路径 serv…

Datawhale X魔搭AI夏令营 AIGC方向Task01学习笔记

目录 一、开通PAL-DSW适用 二、报名可图Kolors-LoRA风格故事挑战赛 三、创建PAL实例 四、跑baseline 五、结果上传魔塔 六、关闭PAL 小白&#xff0c;刚跑通Baseline&#xff0c;初步了解了竞赛。 Datawhale官方的速通教程链接&#xff1a;Task 1 从零入门AI生图原理&am…

利用Matlab实现【图论】中的图

目录 前言 一、图论是什么&#xff1f; 1.基本概念 2.表达形式 二、使用matlab作图 1.作无向图 2.作有向图 总结 前言 本文将讲解如何使用matlab中的函数实现最短路径算法&#xff0c;所提供代码仅供参考&#xff0c;严禁用于数模比赛中使用&#xff01; 一、图论是什么&#…

Linux:进程管理,任务管理,监控系统

1&#xff0c;任务管理 从前台丢到后台&#xff1a;【ctrl】 z&#xff0c;如果正在使用vim&#xff0c;突然想干其他事情&#xff0c;但又不想关闭vim&#xff0c;只需要暂时将vim丢到后台等待即可&#xff08;暂停&#xff09;。 查看后台任务状态&#xff1a;jobs&#xff0…

许多人在网络上“裸奔”,你信吗?

现在网络的热议话题之一&#xff0c;是近年来不仅网络诈骗、电信诈骗比比皆是&#xff0c;而更加让人恐怖的是仅只一个QQ号码就可以查出你所有的个人信息。 ​在时下&#xff0c;我国个人隐私泄漏的现象比比皆是&#xff0c;而且不只是仅几大社交平台才存在着严重的漏洞。早前…

WPF 资源、引用命名空间格式、FrameworkElement、Binding、数据绑定

资源 对象级别独立文件 静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用&#xff0c;之后就不再去访问这个资源了。 动态资源使用&#xff08;DynamicResource&#xff09;使用指的是在程序运行过程中仍然会去访问资源。 显然&#xff0c;如果你确定…