从零掌握keepalived合集

keepalived简介

keepalived基于VRRP协议的软件实现,原生设计目的为了高可用 ipvs服务

ipvs,IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载均衡功能的一种技术。

keepalived的功能:

  • 基于vrrp协议完成地址流动

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

  • 为ipvs集群的各RS(后端的Real Server)做健康状态检测

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

keepalived部署

image-20240812172714051

以上述拓扑为例进行部署和后续知识点执行

角色ipvip
KA1192.168.84.10192.168.84.100
KA2192.168.84.20192.168.84.100
RS1192.168.84.110-
RS2192.168.84.120-
1、关闭防火墙、selinux
2、RS1和RS2配置web服务方便后续成果展示
3、KA1和KA2配置keepalived
1、下载keepalived
yum install -y keepalived
2、启动
systemctl enable keepalived --now
systemctl start keepalived

keepalived基础设置

主配置文件修改

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

! Configuration File for keepalived
global_defs {
   notification_email {
       XXXXXXXXXX@qq.com #keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个
   }
   notification_email_from keepalived@KA1.abc.org #发邮件的地址
   smtp_server 127.0.0.1 #邮件服务器地址
   smtp_connect_timeout 30 #邮件服务器连接timeout
   router_id KA1.XXXX.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地址范围: 
  
}


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

vrrp_instance VI_1 {
   state MASTER
   interface eth0
   virtual_router_id 100 
   priority 100 
   
   virtual_ipaddress { 
       172.25.254.100/24 dev eth0 label eth0:1
   }
}             
KA2设置
! Configuration File for keepalived
global_defs { 
 #vrrp_strict 
 vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:   
}

vrrp_instance VI_1 {
   state BACKUP
   interface eth0
   virtual_router_id 100 
   priority 60		#降低优先级 
   
   virtual_ipaddress { 
       172.25.254.100/24 dev eth0 label eth0:1
   }
}  

测试:

[root@la1 ~]#  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
18:18:10.661295 IP 192.168.84.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20
18:18:11.662912 IP 192.168.84.10 > 224.0.0.18: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

独立子配置文件实现

注:实现独立子配置文件,需将上述vrrp_instance VI_1 内容注释或删除
命令格式:
	include /path/file
具体操作:
1、主配置文件
include /etc/keepalived/conf.d/*.conf

2、设立子配置文件目录和内容
[root@la1 ~]# mkdir -p /etc/keepalived/conf.d
[root@la1 ~]# touch /etc/keepalived/conf.d/192.168.84.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 {
        192.168.84.100/24 dev eth0 label eth0:1
    }
}

3、重启服务测试
[root@la1 ~]# systemctl restart keepalived.service

实现日志分离

1、keepalived配置文件中设置日志类型
[root@la1 ~]# vim /etc/sysconfig/keepalived 
KEEPALIVED_OPTIONS="-D -S 6"

2、日志配置文件中添加
[root@la1 ~]# vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalived.log

3、重启服务
[root@la1 ~]# systemctl restart keepalived.service 
[root@la1 ~]# systemctl restart rsyslog.service 


[root@la1 ~]# ls -l /var/log/keepalived.log 
-rw------- 1 root root 3906 8月  12 18:28 /var/log/keepalived.log

企业应用实例

抢占式与非抢占式

系统默认为抢占式
抢占式:例如LA1为主,但LA1突然down掉,此时LA2作为备份代替主,当LA1好了之后,VIP又回到LA1上
非抢占式:同上述,LA1活了之后,IPV还在LA2上,LA1变相的成为了LA2的备份
nopreempt #非抢占模式
注:若为非抢占模式则LA1、LA2都需为BACKUP

preempt_delay #     #指定抢占延迟时间为#s,默认延迟300s

抢占式

将LA1关掉
[root@la1 ~]# systemctl stop keepalived.service 

image-20240812183704196

image-20240812183902715

打开LA1
[root@la1 ~]# systemctl start keepalived.service 

image-20240812184028145

非抢占式

LA1配置文件
vrrp_instance VI_1 {
    state BACKUP	#更改模式
    nopreempt		#非抢占模式

LA2配置文件
vrrp_instance VI_1 {
    state BACKUP
    nopreempt

image-20240812184615623

VIP单波配置

#在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络
unicast_src_ip <IPADDR>  #指定发送单播的源IP
unicast_peer {
   <IPADDR>     #指定接收单播的对方目标主机IP
   ......
}
LA1、LA2操作相同,只需调换源IP和备份机IP地址位置

image-20240812185042104

image-20240812185705885

消息通知脚本配置

1、节点配置脚本
[root@la1 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='自身qq号'
mail_send()
{
   mail_subj="$HOSTNAME to be $1 vip 转移"
   mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
   echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
   master)
   mail_send master
   ;;
   backup)
   mail_send backup
   ;;
   fault)
   mail_send fault
   ;;
   *)
   exit 1
   ;;
esac

2、给脚本执行权限
chmod +x /etc/keepalived/mail.sh

3、配置主文件(脚本调用)
   notify_master "/etc/keepalived/mail.sh master"
   notify_backup "/etc/keepalived/mail.sh backup"
   notify_fault "/etc/keepalived/mail.sh fault"

3、邮件配置
[root@la2 ~]# dnf install mailx -y
[root@la1 ~]# vim /etc/mail.rc
set from=XXXXXXXX@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=XXXXXXX@qq.com
set smtp-auth-password=QQ的smtp授权码
set smtp-auth=login
set ssl-verify=ignore

实现IPVS高可用

keepalived+lvs实现

原理:
Keepalived 主要用于监控服务器的状态,并通过虚拟 IP 地址(VIP)实现故障转移。LVS 负责进行负载均衡。当主 LVS 服务器出现故障时,Keepalived 会检测到并将 VIP 切换到备用的 LVS 服务器上,从而实现高可用性。

步骤:
1. 安装和配置 LVS :
    - 安装 LVS 相关软件包。
    - 配置 LVS 的负载均衡策略,例如选择 NAT、DR 或 TUN 模式,并设置后端服务器列表。
2. 安装 Keepalived :
    - 在主、备 LVS 服务器上安装 Keepalived 软件包。
3. 配置 Keepalived :
    - 配置主、备服务器的优先级,通常主服务器的优先级高于备用服务器。
    - 定义虚拟 IP 地址(VIP),这是客户端实际访问的 IP 地址。
    - 设置健康检查机制,例如通过 Ping 或者检测特定端口来确定 LVS 服务是否正常。
4. 启动服务 :
    - 启动 LVS 和 Keepalived 服务。

通过这样的组合配置,可以有效地提高 LVS 负载均衡服务的可用性和可靠性,保障业务的连续性。 
KA1配置keepalived
[root@ka1 ~]# vim /etc/keepalived/conf.d/192.168.84.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 {
	192.168.84.100/24 dev eth0 label eth0:1
    }
}


virtual_server 192.168.84.100 80 {
    delay_loop 6
    lb_algo wrr		#加权轮询模式
    lb_kind DR		#DR模式(直连)
    persistence_timeout 0
    protocol TCP

    real_server 192.168.84.110 80 {
        weight 1
        HTTP_GET {		#指定服务协议为HTTP
            url {
              path /
	          status_code 200		#判断健康状态
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.84.120 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            } 
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   

}
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 {
	192.168.84.100/24 dev eth0 label eth0:1
    }
}



virtual_server 192.168.84.100 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

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

}

image-20240813193956515

keepalived可以动态检测后端真实服务器的状态,当主服务器不可用时会将VIP转到备用服务器上

keepalives+haproxy实现

1、安装haproxy

2、开启内核参数(使得IP不在本主机也能监听)
[root@ka1 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_nonlocal_bind = 1
[root@ka1 ~]# sysctl --system

3、编辑haproxy配置文件

listen webserver
   bind 192.168.84.200:80
   mode http
   balance roundrobin
   server web1 192.168.84.110:80 check inter 3 fall 2 rise 4
   server web2 192.168.84.120:80 check inter 3 fall 2 rise 4

4、编写检测haproxy状态shell脚本
#!/bin/bash
[ ! -f killall -0 haproxy ]

5、编辑keepalived配置文件

vrrp_script check_haproxy {
   script "/etc/keepalived/scripts/haproxy.sh"  #脚本位置
   interval 1
   weight -30
   fall 2
   rise 2
   timeout 2
}

vrrp_instance web {
   track_script {
       check_haproxy
   }
}

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值