Keepalived

目录

什么是Keepalived

主要功能

工作原理

应用场景

Keepalived 的工作原理

心跳机制

状态监测

故障转移

选举机制(在多主多备场景下)

Keepalived功能

Keepalived环境准备

Keepalived相关文件

Keepalived的安装

Keepalived配置说明

keepalived配置文件组成部分

Keepalived配置语法说明

帮助

全局配置

虚拟路由配置

修改KA1配置文件

修改KA2配置文件

测试

通信功能的开启

原因

解决方法

解决

启用Keepalived日志

实现独立子配置文件

原因

子配置文件

Keepalived应用示例

抢占模式和非抢占模式

非抢占模式 nopreempt

抢占延迟模式  preempt_delay

VIP单播模式

Keepalived通知脚本配置

邮件通知

准备工作

通知脚本的创建

权限添加

脚本调用

Keepalived双主模式

实现ipvs的高可用

示例

准备工作

配置Keepalived

测试

Keepalived+haproxy的高可用集群


什么是Keepalived

        Keepalived 是一种用于实现高可用的软件工具

主要功能

        实现对服务器的健康检查:定期检测服务器的运行状态,如网络连接是否正常、服务是否可用等。

        虚拟 IP(VIP)管理:可以将一个虚拟 IP 绑定到多台服务器上,当主服务器故障时,自动将虚拟 IP 切换到备份服务器。

工作原理

        通过发送心跳报文来检测服务器的状态。主服务器和备份服务器之间相互发送这些报文,当备份服务器在一定时间内未收到主服务器的心跳报文时,就会认为主服务器故障。

        触发故障转移机制,将虚拟 IP 绑定到备份服务器上,并接管主服务器的服务,以保证服务的连续性。

应用场景

        在负载均衡架构中:与负载均衡软件(如 LVS、Nginx 等)配合使用,当其中一台负载均衡服务器故障时,自动切换到另一台服务器,确保负载均衡服务不中断。

        保障关键业务服务的高可用性:如数据库服务器、Web 服务器等,当主服务器出现故障时,快速切换到备份服务器,减少服务中断时间

Keepalived 的工作原理

        Keepalived 的工作原理主要包含以下关键要点:

心跳机制

        Keepalived 采用多播或单播等方式在主服务器(Master)和备份服务器(Backup)之间发送心跳报文,通常是按照一定的时间间隔(可配置)进行发送。

        这些心跳报文用于相互检测对方的状态,以判断服务器是否正常运行。

状态监测

        对自身服务以及关联的关键资源(如网络连接、应用程序端口等)进行持续监测。

        同时也接收来自对方服务器的心跳报文,并根据报文的接收情况和自身监测结果来综合判断服务器的健康状态。

故障转移

        当主服务器在规定时间内没有收到备份服务器的心跳报文,或者自身监测到自身或对方出现故障时,会认为自身或对方出现问题。

        如果主服务器判定自身故障,它会主动停止自身的服务并释放资源,如虚拟 IP(VIP)等。

        备份服务器在发现主服务器故障后,会迅速启动自身的服务,并接管主服务器的虚拟 IP,开始对外提供服务,以实现服务的无缝切换,保证业务的连续性。

选举机制(在多主多备场景下)

        在一些复杂的高可用架构中,如果存在多个 Keepalived 实例,当故障发生后,多个备份服务器之间可能需要通过一定的选举规则来确定新的主服务器。

        选举通常基于预先配置的优先级或者根据服务器的一些特定属性(如硬件性能等)来进行。

Keepalived功能

        基于 vrrp 协议完成地址流动

        为 VIP 地址所在的节点生成 ipvs 规则(在配置文件中预先定义)

        为 ipvs 集群的各 RS 做健康状态检测

        基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

Keepalived环境准备

###主机1
版本:rhel7.9
hostname: real server1
172.25.254.110

###主机2
版本:rhel7.9
hostname: real server2
172.25.254.120

###主机3
版本:rhel7.9
hostname: KA1
172.25.254.10

###主机4
版本:rhel7.9
hostname: KA2
172.25.254.20

Keepalived相关文件

        软件包名: keepalived

        主程序文件:/usr/sbin/keepalived

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

        配置文件示例:/usr/share/doc/keepalived/

        Unit File:/lib/systmed/system/keepalived.service

        Unif File的环境配置文件:/etc/sysconfig/keepalived

Keepalived的安装

### KA1
dnf install keepalived -y
systemctl start keepalived
ps axf | grep keepalived

Keepalived配置说明

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

Keepalived配置语法说明

帮助

man keepalived.conf

全局配置

global_defs {
   notification_email {
        [email protected]              #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
        [email protected]
   }
   notification_email_from [email protected]   #发邮件的地址

   smtp_server 127.0.0.1                 #邮件服务器地址
   smtp_connect_timeout 30               #邮件服务器连接超时时间
   router_id ka1.ccc.com                 #每个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地址范围:

}

虚拟路由配置

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      #两种机制分别为AH和PASS
                            #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
        
        auth_pass 1111      #预共享密钥,仅前8位有效
                            #同一个虚拟路由器的多个keepalived节点必须一样
}
    }
    virtual_ipaddress {     #虚拟IP,生产环境可能指定上百个IP地址
        172.25.254.100/24 dev eth0
    }
}

修改KA1配置文件

### 安装keepalived
yum install keepalived -y

### master
vim /etc/keepalived/keepalived.conf

### 配置文件修改如下
global_defs {
   notification_email {
        [email protected]        #发生事件时,邮件接收地址
   }
   notification_email_from [email protected]        #指定发送通知邮件的发件人地址
   smtp_server 127.0.0.1         #设置用于发送邮件的 SMTP 服务器地址为本地回环地址
   smtp_connect_timeout 30       #定义连接到 SMTP 服务器的超时时间为 30 秒,如果在这个时间内无法建立连接,则可能触发相应的错误处理机制

   router_id KA1.CCC.org         #运行 Keepalived 的这台机器在 VRRP 协议中设置一个唯一标识,用于在 VRRP 组中区分不同的节点

   vrrp_skip_check_adv_addr      #对所有通告报文都检查,会比较消耗性能
   vrrp_strict                   #开启严格模式,严格遵循vrrp协议
   vrrp_garp_interval 0          #报文发送没有延迟
   vrrp_gna_interval 0           #消息发送没有延迟
   vrrp_mcast_group4 224.0.0.18       #组播IP地址范围
}

vrrp_instance VI_1 {
    state MASTER                 #初始角色是主节点
    interface eth0               #绑定为当前虚拟路由器使用的物理接口
    virtual_router_id 20         #虚拟路由唯一标识
    priority 100                 #当前物理节点在此路由器的优先级
    advert_int 1                 #vrrp通过的时间间隔,默认1s
    authentication {
        auth_type PASS           #AH为简单密码
        auth_pass 1111           #预共享密钥
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1        #定义了一个虚拟 IP 地址为 172.25.254.100,子网掩码为 24 位(即 255.255.255.0),绑定到 eth0 接口,并使用标签 eth0:1 进行标识
    }
}

### 开机自启,立即执行
systemctl enable --now keepalived.service

修改KA2配置文件

### backup
vim /etc/keepalived/keepalived.conf

### 修改内容如下
global_defs {
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]    #指定发送通知邮件的发件人地址
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA2.CCC.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}

vrrp_instance VI_1 {
    state BACKUP            #初始角色
    interface eth0
    virtual_router_id 20    
    priority 80             #低优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

### 开机自启,立即执行
systemctl enable --now keepalived.service

测试

### KA1测试
### KA2上没有VIP
[root@ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:32:10.747046 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:11.748445 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:12.749700 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
20:32:13.751268 IP 172.25.254.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

通信功能的开启

原因

        ping VIP172.25.254.100,ping不通

解决方法

        添加参数:vrrp_iptables

解决
### 打开配置文件
vim /etc/keepalived/keepalived.conf

### 添加参数
global_defs {
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ka1.example.com
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   vrrp_iptables    #添加参数
}

启用Keepalived日志

vim /etc/sysconfig/keepalived

### 
KEEPALIVED_OPTIONS="-D -S 6"

### 将keepalived日志信息添加到系统日志
vim /etc/rsyslog.conf
### 内容
local6.*                                                /var/log/keepalived.log  

### 重启
systemctl restart keepalived.service
systemctl restart rsyslog.service

### 查看
ll /var/log/keepalived.log 
-rw-------. 1 root root 3452 Aug 14 20:55 /var/log/keepalived.log

实现独立子配置文件

原因

        当一个大型系统或应用使用 Keepalived 进行高可用性配置时,整体配置可能会非常复杂且包含众多细节。将不同功能模块或不同方面的配置拆分成独立子配置文件,可以使每个配置文件专注于一个特定的任务或功能领域

        如果在运行过程中出现问题,独立子配置文件可以帮助快速定位问题所在的配置区域

### 将原来的主配置文件的虚拟路由部分干掉
### 重新写一个子配置文件(在主配置文件中加载子配置文件)
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
        [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id KA1.CCC.com
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
   #vrrp_iptables
}

include "/etc/keepalived/conf.d/*.conf"    #加载子配置文件
子配置文件
### 创建
mkdir -p /etc/keepalived/conf.d

### 编辑
vim /etc/keepalived/conf.d/children.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
    }
}

Keepalived应用示例

抢占模式和非抢占模式

非抢占模式 nopreempt

        默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色,这样会使vip在KA主机中来回漂移,造成网络抖动

        建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色

        非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机

### KA1配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 20
    priority 100        #高优先级
    nopreempt        #非抢占模式
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
   }
}

### KA2配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 20
    priority 80        #低优先级
    advert_int 1
    nopreempt            #非抢占模式
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
   }
}

抢占延迟模式  preempt_delay

        抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回VIP

### preempt_delay    #指定抢占延迟时间,默认300s
# KA1配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 100    #高优先级
    preempt_delay 10s    #抢占延迟10s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
   }
}

# KA2配置
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80    #低优先级
    advert_int 1
    preempt_delay 10s    #抢占延迟10s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
   }
}

VIP单播模式

        默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

注意:

        启用 vrrp_strict 时,不能启用单播

### KA1配置

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
   }
   unicast_src_ip 172.25.254.10        #单播模式配置
                                       #定义了本节点在进行 VRRP 通信时使用的源 IP 地址为 172.25.254.10
   unicast_peer {            #指定了一个对等节点(Peer)的 IP 地址为 172.25.254.20
        172.25.254.20
   }
}

### KA2配置

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.20        #单播模式配置
                                        #定义了本节点在进行 VRRP 通信时使用的源 IP 地址为 172.25.254.20
    unicast_peer {            #指定了一个对等节点(Peer)的 IP 地址为 172.25.254.10
        172.25.254.10
    }

}

Keepalived通知脚本配置

邮件通知

准备工作
### KA1 KA2安装相应工具mailx
dnf install mailx -y
### KA1配置
vim /etc/mail.rc
### 内容
set bsdcompat
set [email protected]  #指定发送邮件时显示的发件人邮箱地址
set smtp=smtp.qq.com        #定义了用于发送邮件的简单邮件传输协议(SMTP)服务器的地址为 smtp.qq.com

set [email protected]        #指定用于 SMTP 认证的用户名
set smtp-auth-password=pltyvzyohcgkgfha  #设置 SMTP 认证的密码,这里的密码是经过加密或特定处理后的授权码形式,这里就是授权码

set smtp-auth=login        #使用的 SMTP 认证方式为 login
set ssl-verify=ignore        #将其设置为 ignore 意味着在与 SMTP 服务器建立安全连接时,邮件客户端将忽略对服务器 SSL 证书的某些常规验证步骤

#测试邮箱是否接收到信息
echo 111222333 | mail -s test [email protected]  

### KA2配置
vim /etc/mail.rc
### 内容
set bsdcompat
set [email protected]  #指定发送邮件时显示的发件人邮箱地址
set smtp=smtp.qq.com        #定义了用于发送邮件的简单邮件传输协议(SMTP)服务器的地址为 smtp.qq.com

set [email protected]        #指定用于 SMTP 认证的用户名
set smtp-auth-password=pltyvzyohcgkgfha  #设置 SMTP 认证的密码,这里的密码是经过加密或特定处理后的授权码形式,这里就是授权码

set smtp-auth=login        #使用的 SMTP 认证方式为 login
set ssl-verify=ignore        #将其设置为 ignore 意味着在与 SMTP 服务器建立安全连接时,邮件客户端将忽略对服务器 SSL 证书的某些常规验证步骤

#测试邮箱是否接收到信息
echo 999888555887 | mail -s test [email protected] 

通知脚本的创建

### 编辑文件
vim /etc/keepalived/mail.sh

### 内容
#!/bin/bash
mail_dest='[email protected]'        #变量 mail_dest,并将其赋值为一个邮箱地址 [email protected]

send_message()
{
  mail_subj="$HOSTNAME to be $1 vip move"        #定义邮件的主题
  mail_mess="`date +%F\ %T`: vrrp move $HOSTNAME change $1"    #定义了邮件正文内容
  echo "$mail_mess" | mail -s "$mail_sub" $mail_dest    #将邮件正文通过管道传递给 mail 命令进行发送
}

case $1 in
  master)
  send_message master
  ;;
  backup)
  send_message backup
  ;;
  fault)
  send_message fault
  ;;
  *)
  ;;
esac
权限添加
chmod +x /etc/keepalived/mail.sh
脚本调用
### KA1配置
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 20
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
 
    notify_master "/etc/keepalived/mail.sh master"
    notify_backup "/etc/keepalived/mail.sh backup"
    notify_fault "/etc/keepalived/mail.sh fault"
}

### KA2配置
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 20
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
 
    notify_master "/etc/keepalived/mail.sh master"
    notify_backup "/etc/keepalived/mail.sh backup"
    notify_fault "/etc/keepalived/mail.sh fault"
}

Keepalived双主模式

        master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用master/master的双主架构,解决此问题

master/master的双主架构:

        即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高服务器资源利用率

### KA1配置
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    #nopreempt
    #preempt_delay 10s
    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
   }

}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 200
    priority 80
    advert_int 1
    #nopreempt
    #preempt_delay 10s
    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
   }
}


#KA2配置
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 100
    priority 80
    advert_int 1
    #nopreempt
    #preempt_delay 10s
    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
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 200
    priority 100
    #advert_int 1
    #nopreempt
    preempt_delay 10s
    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.20
   unicast_peer {
        172.25.254.10
   }
}

实现ipvs的高可用

示例

        实现单主的LVS-DR模式

准备工作

### 准备real server1   real server2

### real server1
yum install httpd -y
echo realserver1 - 172.25.254.110 > /var/www/html/index.html

ip a a 172.25.254.100/32 dev lo    ### 换回IP配置

### ARP响应禁用
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce


### real server2
yum install httpd -y
echo realserver1 - 172.25.254.120 > /var/www/html/index.html

ip a a 172.25.254.100/32 dev lo    ### 换回IP配置

### ARP响应禁用
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

配置Keepalived

### KA1配置
vim /etc/keepalived/keepalived.conf
### 内容
virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
    sorry_server 172.25.254.30

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


### KA2配置
virtual_server 172.25.254.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
    sorry_server 172.25.254.30

    real_server 172.25.254.110 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 5
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

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

测试

### 查看策略
ipvsadm -Ln

###
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 wrr
  -> 172.25.254.110:80            Route   1      0          0         
  -> 172.25.254.120:80            Route   1      0          0        

Keepalived+haproxy的高可用集群

### 实现haproxy配置
### KA1,KA2
vim /etc/haproxy/haproxy.cfg
### 内容
listen webserver
    bind 172.25.254.100:80
    server web1 172.25.254.110:80
    server web2 172.25.254.120:80

### KA1 KA2启用内核参数
vim /etc/sysctl.conf
### 内容
net.ipv4.ip_nonlocal_bind = 1
### 生效
sysctl -p

#KA1中编写脚本进行检测
vim /etc/keepalived/srcipts/haproxy.sh
### 内容
#!/bin/bash
/usr/bin/killall -0 haproxy

### KA1中给检测脚本添加权限
chmod +x /etc/keepalived/srcipts/haproxy.sh

### KA1中配置keepalived
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_script check_haproxy {
    script "/etc/keepalived/scripts/haproxy.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}

vrrp_instance web {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100 dev eth0 label eth0:1
    }
    track_script {
        check_haproxy
    }
}

### KA2中配置keepalived
vim /etc/keepalived/keepalived.conf
### 内容
vrrp_script check_haproxy {
    script "/etc/keepalived/scripts/haproxy.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}

vrrp_instance web {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100 dev eth0 label eth0:1
    }
    track_script {
        check_haproxy
    }
}

你可能感兴趣的:(Keepalived)