keepalived安装配置

1.yum/apt安装

# yum install keepalived (CentOS)
# apt-get install keepalived (Ubuntu)

2. 源码安装

复制代码
1)安装依赖

yum -y install gcc openssl-devel libnfnetlink-devel

2)下载源码

wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz

3)解压

tar -zxvf keepalived-2.2.7.tar.gz -C /usr/src

4)编译安装

cd /usr/src/keepalived-2.2.7/

./configure && make -j 4 && make install
复制代码

3. 程序环境:

主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:
  • /usr/lib/systemd/system/keepalived.service (CentOS)
  • /lib/systemd/system/keepalived.service (Ubuntu)
Unit File的环境配置文件:
  • /etc/sysconfig/keepalived


 

4.配置文件组件部分:

Global definitions
VRRP instance(s):即一个个的vrrp虚拟路由器
Virtual server(s):ipvs集群的vs和rs

 配置虚拟路由器:

vrrp_instance <STRING> {
....
}
配置参数:
state MASTER|BACKUP: #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME:  #绑定为当前虚拟路由器使用的物理接口 ens32,eth0,bond0,br0
virtual_router_id VRID
:   #当前虚拟路由器惟一标识,范围是0-255
priority 100
:                    #当前物理节点在此虚拟路由器中的优先级;范围1-254
advert_int 1
:                   #vrrp通告的时间间隔,默认1s

authentication {                #认证机制
auth_type AH|PASS
auth_pass <PASSWORD> #仅前8位有效
}

virtual_ipaddress {             #虚拟IP
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.17/24 dev eth1
192.168.200.18/24 dev eth2 label eth2:1
}


track_interface {                #配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移
eth0
eth1

}

5.组播配置示例

复制代码
 global_defs {
   notification_email {
     root@localhost #keepalived 发生故障切换时邮件发送的对象,可以按行区分写多个
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id ha1.example.com
   vrrp_skip_check_adv_addr #所有报文都检查比较消耗性能,此配置为如果收到的报文和上一个报文是同一个路由器则跳过检查报文中的源地址
   vrrp_strict              #严格遵守VRRP协议,不允许状况:1,没有VIP地址,2.配置了单播邻居,3.在VRRP版本2中有IPv6地址.
   vrrp_garp_interval 0     #ARP报文发送延迟
   vrrp_gna_interval 0      #消息发送延迟
   vrrp_mcast_group4 224.0.0.18 #默认组播IP地址,224.0.0.0到239.255.255.255
   #vrrp_iptables           #建议添加,禁止生成iptables
 } 
复制代码

# iptables -D INPUT -s 0.0.0.0/0 -d 192.168.7.248 -j DROP   #yum安装会自动生成防火墙策略,可以删除或禁止生成

复制代码
 vrrp_instance VI_1 {
      state MASTER
      interface eth0
      virtual_router_id 80
      priority 100
      advert_int 1
      authentication {
      auth_type PASS
      auth_pass 1111qwer
     }
  virtual_ipaddress {
      192.168.7.248 dev eth0 label eth0:0
     }
  }
复制代码

总结非抢占与抢占延迟

    • 两个keepalived服务器必须同时工作在BACKUP模式下
    • 关闭vrrp_strict
    • nopreempt #直接不抢占
    • preempt_delay 60s #延迟多少秒后抢占

6. 单播配置及示例 

 unicast_src_ip #指定单播的源IP
       unicast_peer { #指定单播的对方IP
           目标主机IP
   }

[root@s2 ~]# tcpdump -i eth0 host -nn 172.18.200.101 and host 172.18.200.102   #观察vrrp通告信息

advert_int 1 #此时通告时间是,间隔1秒发送一次,推荐使用2秒

Keepalivde 双主配置
       两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高服务器资源利用率。高可用负载均衡

实现方式:两个maste互为主备,即增加一个虚拟路由器,注意优先级

 

Keepalivde 三主配置
当业务进一步变大时,增加一个负载均衡配置逻辑如下
每台主机配置3个虚拟路由

 

 

 

7. Keepalived通知配置

发件人配置:
[root@s2 ~]# yum install mailx -y
[root@s2 ~]# vim /etc/mail.rc
set from=xxxxxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=xxxxx@qq.com  #登录用户
set smtp-auth-password=xxxxxxxx    #QQ授权码
set smtp-auth=login
set ssl-verify=ignore                          #忽略ssl
notify_master <STRING>|<QUOTED-STRING>:
当前节点成为主节点时触发的脚本
notify_backup <STRING>|<QUOTED-STRING>:
当前节点转为备节点时触发的脚本
notify_fault <STRING>|<QUOTED-STRING>:
当前节点转为“失败”状态时触发的脚本
notify <STRING>|<QUOTED-STRING>:
通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知

定义通知脚本:

复制代码
[root@localhost keepalived]# cat /etc/keepalived/notify.sh 
#!/bin/bash
contact='xxxxxx@qq.com'
notify() {
mailsubject="$(hostname) to be $1, vip 转移"
mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac
复制代码

脚本的调用方法:

1)chmod a+x /etc/keeplived/notify.sh
2)在每个keepalived节点的每个虚拟路由器上都配置
0

3)通知验证

停止keepalived服务,验证IP 切换后是否收到通知邮件


 

8. KeepAlived与IPVS

virtual server (虚拟服务)的定义:
virtual_server IP port #定义虚拟主机IP地址及其端口    【常用此方式】
virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群
virtual_server group string #将多个虚拟服务器定义成组,将组定义成虚拟服务
复制代码
delay_loop <INT>:检查后端服务器的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh:定义调度方法
lb_kind NAT|DR|TUN:集群的类型
persistence_timeout <INT>:持久连接时长
protocol TCP|UDP|SCTP:指定服务协议
sorry_server <IPADDR> <PORT>:所有RS故障时,备用服务器地址
real_server <IPADDR> <PORT>
   {
   weight <INT> RS权重
   notify_up <STRING>|<QUOTED-STRING> RS上线通知脚本
   notify_down <STRING>|<QUOTED-STRING> RS下线通知脚本
   HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHEC K { ... }:定义当前主机的健康状态检测方法
}
复制代码
复制代码
HTTP_GET|SSL_GET:应用层检测
HTTP_GET|SSL_GET {
     url {
           path <URL_PATH>:定义要监控的URL
           status_code <INT>:判断上述检测机制为健康状态的响应码
      }
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>:发出健康状态检测请求时使用的源地址
bind_port <PORT>:发出健康状态检测请求时使用的源端口
}
复制代码
传输层检测 TCP_CHECK
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
}

实现LVS-DR模式

复制代码
virtual_server 172.18.200.248 80 {    #VIP地址
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    #persistence_timeout 120 #会话保持时间
    protocol TCP
    sorry_server 172.18.200.105 80
    real_server 172.18.200.103 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        } }
    real_server 172.18.200.104 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        } } }
复制代码

在后端服务器上

1)准备web服务器并使用脚本绑定VIP至web服务器lo网卡,并配置arp忽略

2)执行脚本,查看VIP地址已配置好

3)测试web访问

#while true;do curl http://172.31.7.188 && sleep 1;done

#yum install -y ipvsadm

#ipvsadm -Ln #查看ipvs规则

real_server http监测

复制代码
real_server 192.168.7.103 80 {
    weight 1
    HTTP_GET {
    url {
           path /index.html
           status_code 200
         }
    }
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 3
    }
复制代码

实现keepalived+lvs高可用思路

#在节点1上

  vim /etc/keepalived/keepalived.conf

    include /etc/keepalived/conf/*.conf #最后一行加上此内容

cp /etc/keepalived/conf/n46.conf /etc/keepalived/conf/n46_1.conf   #增加一台虚拟主机

vim /etc/keepalived/conf/n46_1.conf

  virtual_server 172.31.7.189 80 {   #修改lvs的VIP地址即可

#拷贝节点1的配置目录到节点2上


 

9. VRRP Script

1)配置参数

keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整

vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用。

track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script

复制代码
分两步:(1) 先定义一个脚本;(2) 调用此脚本
vrrp_script <SCRIPT_NAME> {
     script <STRING>|<QUOTED-STRING>
     OPTIONS 
}
track_script {
    SCRIPT_NAME_1
    SCRIPT_NAME_2
}
复制代码
复制代码
vrrp_script <SCRIPT_NAME> { #定义一个检测脚本,在global_defs 之外配置
   script <STRING>|<QUOTED-STRING> # shell命令或脚本路径
   interval <INTEGER> # 间隔时间,单位为秒,默认1秒
   timeout <INTEGER> # 超时时间
   weight <INTEGER:-254..254> # 权重,监测失败后会执行权重相加,权重可以为负数即相加后降低本机权重
   fall <INTEGER> #脚本几次失败转换为失败
   rise <INTEGER> # 脚本连续监测成功后,把服务器从失败标记为成功的次数
   user USERNAME [GROUPNAME] # 执行监测的用户或组
   init_fail # 设置默认标记为失败状态,监测成功之后再转换为成功状态
}
复制代码

2)基于第三方仲裁设备,配置示例:

复制代码
vrrp_script chk_down { #基于第三方仲裁设备
    script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 7 || exit 0"
    interval 1
    weight -80
    fall 3
    rise 5
    timeout 2
}
vrrp_instance VI_1 {   #引用配置在要管理的虚拟路由上
    …
    track_script {
      chk_down
    }
}

# touch /etc/keepalived/down #当存在此仲裁设备时发生故障迁移,

适用场景:在backup服务器探测文件是否存在,当master运行正常的时候没有此文件,当master异常的时候生成此文件,然后将backup服务器的优先级设置高于master,从而将VIP接管到backup服务器。

复制代码
vrrp_script chk_down {
   script “/bin/bash -c ‘[[ -f /etc/keepalived/device/down ]]’ && exit 0 || exit 7“ #成功退出为0
   interval 1
   weight +80
   fall 3
   rise 5
   timeout 2
}

 

3)高可用HAProxy

复制代码
vrrp_script chk_haproxy {
script "/etc/keepalived/chk_haproxy.sh"
    interval 1
    weight -80
    fall 3
    rise 5
    timeout 2
}
track_script {
    chk_haproxy
    }
[root@s1 ~]# yum install psmisc -y
[root@s1 ~]# cat /etc/keepalived/chk_haproxy.sh
#!/bin/bash
/usr/bin/killall -0 haproxy
[root@s1 ~]# chmod a+x /etc/keepalived/chk_haproxy.sh 
复制代码

 

4)高可用Nginx

复制代码
vrrp_script chk_nginx {
    script "/etc/keepalived/chk_nginx.sh"
    interval 1
    weight -80
    fall 3
    rise 5
    timeout 2
    }
track_script {
    chk_haproxy
    }
[root@s1 ~]# yum install psmisc -y
[root@s1 ~]# cat /etc/keepalived/chk_nginx.sh
#!/bin/bash
/usr/bin/killall -0 nginx
[root@s1 ~]# chmod a+x /etc/keepalived/chk_nginx.sh 
复制代码

负载均衡监测脚本思路:

1)可使用curl http://

2)可使用mysql sql 语句探测

3)0 信号,不发送实际信号,只是用来错误检查

killall -0 bc #检查bc是否运行正常

echo $? #是否为0判断上面程序是否正常

10. 思考练习

• keepalived 高可用性IPVS集群,IPVS集群提供php,如phpwind
• Keepalived 双主Nginx或者HAProxy
• vrrp_script 高可用性Nginx
• 1、编译安装keepalived。
• 2、实现keepalived(20+ vip)+nginx 双主高可用。
• 3、实现keepalived(60+ vip)+haproxy 三服务器高可用。
• 4、实现keepalived(100+ vip)+LVS高可用、real server状态监测及规则管理。
复制代码

HAProxy+keepalived

• 1.编译安装HAProxy较新 LTS版本.,选择编译安装keepalived。
• 2.开启HAProxy多进程,进程数与CPU核心数保持一致并实现HAProxy进程绑定。
• 3.因业务较多避免配置文件误操作,需要按每业务一个配置文件并统一保存至/etc/haproxy/conf 目录中。 -f /etc/haproxy/conf 
• 4.实现keepalived include导入配置文件功能,使用LVS-DR模型代理后端Nginxweb服务器。
• 5.基于ACL实现单IP多域名负载功能(适用于企业较少公网IP多域名场景)。
• 6.实现MySQL主从复制,并通过HAProxy对MySQL进行反向代理。
• 7.最终完成HAProxy+Nginx+Tomcat+ Redis,并实现session会话保持统一保存到Redis。
复制代码

 

posted @   日落-之前  阅读(692)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示