keepalived总结

一、概述

  • 定义:Keepalived是一个用于实现服务器高可用性和负载均衡的软件,通过VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)实现故障转移。
  • 主要功能
    1. 高可用系统网络服务:能够在两台或多台主机之间实现故障切换转移,确保服务的连续性。
    2. 健康状态检测:对后端服务器进行健康状态检测,确保只有健康的服务器才会接收用户请求。
    3. 管理LVS负载均衡软件:可以读取配置文件,并通过一个更为底层的接口来管理IPVS并生成IPVS规则。

二、工作原理

  • VRRP协议:Keepalived的高可用功能是通过VRRP协议实现的。VRRP协议通过竞选机制将路由任务交给某一台VRRP路由器,当主路由器故障时,备份路由器会接管路由任务,确保网络服务的连续性。
  • 心跳机制:主节点(Master)会定期向备份节点(Backup)发送心跳消息,以告知其自己还在运行。如果备份节点在一段时间内未收到心跳消息,则认为主节点已经故障,并启动故障转移过程。
  • 健康检查:Keepalived通过ICMP、TCP端口状态、HTTP GET等方式对后端服务器进行健康检查,确保服务的可用性。

三、应用场景

  • LVS+Keepalived:在LVS负载均衡集群中,Keepalived可以实现调度器(Director)的高可用,并解决单点故障问题。
  • Nginx、Haproxy等高可用:Keepalived不仅限于LVS,还可以作为Nginx、Haproxy等其他系统网络服务的高可用解决方案。

四、特点

  • 自动完成:Keepalived的所有操作都是自动完成的,不需要人工干涉。
  • 支持多层检测:Keepalived支持网络层(Layer 3)、传输层(Layer 4)和应用层(Layer 7)的健康状态检测。
  • 配置灵活:用户可以通过配置文件灵活设置Keepalived的各项参数,以满足不同的需求。

五、组件与框架

  • 控制组件:负责配置文件的解析和编译。
  • 内存管理:提供访问内存的通用方法。
  • I/O复用:负责安排Keepalived内部的任务请求。
  • 核心组件:包含一系列功能模块,如WatchDog(监控checkers和VRRP进程的状况)、Checkers(真实服务器的健康检查)、VRRP Stack(负载均衡器之间的切换)等。

六、使用注意事项

  • 配置正确性:确保Keepalived的配置文件正确无误,以避免不必要的故障。
  • 监控与日志:定期监控Keepalived的运行状态,并查看日志文件以诊断问题。
  • 备份与恢复:定期备份Keepalived的配置文件和重要数据,以便在出现故障时能够快速恢复。

实验:

环境准备:

        实验工具:虚拟机,四台rhel7

使用脚本如上图修改对应的IP:

realserver1:

vmseet.sh eth0 172.25.254.110 realserver1.timinglee.org

realserver2:

vmset.sh eth0 172.25.254.120 realserver2.timinglee.org

KA1:

vmset.sh 172.25.254.10 ka1.timinglee.org

KA2:

vmset.sh eth0 172.25.254.20 ka2.timinglee.org

查看SELinux是否关闭(Disabled):

getenforce

查看防火墙是否关闭:

systemctl status firewalld

server:

下载httpd:

yum install httpd -y

将IP写入HTML文档

#realserver1:
echo 172.25.254.110 > /var/www/index.html
#realserver2:
echo 172.25.254.120 > /var/www/index.html

启动HTTPD服务

systemctl enable --now httpd

KA:

访问server:

curl 172.25.254.110
curl 172.25.254.120

开始实验:

配置说明:

配置文件: /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
KA1安装keepalived:
yum install keepalived -y

帮助:

man  keepalived.conf

打开文档:

vim /etc/keepalived/keepalived.conf 

全局设定:

配置虚拟路由器(设置VIP):

开启keepalived:

systemctl enable --now keepalived.service 

查看VIP设置是否成功:

ifconfig

若启动失败:

清空日志:

> /var/log/messages

重启:

systemctl restart keepalived.service

查看日志:

cat /var/log/messages

发现问题,并修改,再次重启。

KA2:

进行与KA1相同配置

复制KA1的配置文件到KA2:

scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived/keepalived.conf 

输入KA2的密码,等待传输。

修改文档部分内容:

vim /etc/keepalived/keepalived.conf 

使用抓包命令对KA进行测试:

tcpdump -i eth0 -nn host 224.0.0.18

KA2启动:

systemctl enable --now keepalived.service 

查看IP:

ifconfig

【KA2的优先级=80 < KA1的优先级=100 ,所以KA2没有VIP】

测试KA2:

realserver1远程连接KA1:

ssh -l 172.25.54.10

关闭KA1,模拟故障:

systemctl stop keepalived.service
tcpdump -i eth0 -nn host 224.0.0.18

【KA1故障,断开连接。KA2开始连接】

查看KA2的IP:

ifconfig

【由于KA1故障,VIP从KA1转移到KA2】

查看哪些网络流量被允许或拒绝通过系统:

iptables -nL

【DROP  math-set keepalived dst:意思是172.25.254.100 过来一个丢弃一个,无法ping通】

修改现状方法:

KA:

进入文档:

vim /etc/keepalived/keepalived.conf 

添加内容:

 vrrp_iptables

重启:

systemctl restart keepalived.service 

ping 172.25.254.100

查看哪些网络流量被允许或拒绝通过系统:

【DROP改为ACCEPT,同时也显示出了tcp】

注意:

【这两要不都开,要不注释掉都关】

【不管如何选择,最后记住重启KA的keepalived】

【全部注释后,依旧可以ping通,但是查看iptables,第一组最后一行消失】

keepalived日志分离(独立日志):

KA1:

编写日志级别:

 vim /etc/sysconfig/keepalived 

【日志范围0-7】

重启keepalived:

systemctl restart keepalived.service 

打开采集日志设置文档:

vim /etc/rsyslog.conf

指定采集方法:

local6.*                                                /var/log/keepalived.log

重启rsyslog:

systemctl restart rsyslog.service 

重启keepalived:

systemctl restart keepalived.service

查看生成日志:

cat /var/log/keepalived.log

【全部都是keepalived】

独立子配置文件:

进入keepalived配置文件:

vim /etc/keepalived/keepalived.conf 

注释掉虚拟路由:

添加文件:

include "/etc/keepalived/conf.d/*.conf" 

添加后无法重启keepalived:

查看原因;

journalctl -xe

【告诉我们,找不到添加的文件】

没有就创建一个:

 mkdir -p /etc/keepalived/conf.d

创建并进入子配置文件:

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

添加VIP内容:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    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:

systemctl restart keepalived.service 

查看VIP:

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

如图进行修改添加:

KA1:

KA2:

重启;

systemctl restart keepalived.service 
抢占延迟模式 preempt_delay :
抢占延迟模式,即优先级高的主机恢复后,不会立即抢回 VIP ,而是延迟一段时间(默认 300s )再抢回 VIP
注意:需要各 keepalived 服务器 state BACKUP, 并且不要启用 vrrp_strict
KA1:
KA2:
重启keepalivesd
【注意:
此时VIP在KA1上,
当关闭KA1的keepalived时,过5s。VIP将转移到KA2上。
当关闭KA2的keepalived时,5s后。VIP将转移到KA1上。】

VIP 单播配置:
默认 keepalived 主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
注意:启用 vrrp_strict 时,不能启用单播

进入keepalived文档;

vim /etc/keepalived/keepalived.conf 

添加设置:

KA1:

        unicast_src_ip 172.25.254.10      #本机IP
        unicast_peer {
        172.25.254.20                     #对方IP
        }

KA2:

        unicast_src_ip 172.25.254.20      #本机IP
        unicast_peer {
        172.25.254.10                     #对方IP
        }

重启keepalived:

检测:

KA1:

tcpdump -i eth0 src host 172.25.254.10 and dst 172.25.254.20

【有返回】

KA2:

tcpdump -i eth0 src host 172.25.254.20 and dst 172.25.254.10

【没有返回,因为没有VIP。需要将KA1的keepalived关掉,VIP转移到KA2上,KA2才有返回】

【VIP单播配置是有VIP的IP 向 没有VIP的IP发送 表示有VIP的主机存活】

keepalived通知脚本配置:

邮件通知:

KA下载实验所需软件【用于发邮件】:

yum install mailx -y

从浏览器进入QQ邮箱---->登录并点击账号与安全---->点安全设置---->授权SMTP/IMAP 服务

QQ邮箱文件配置:

vim /etc/mail.rc

最后一行添加设置内容:

#######mail set##########
set from=*******@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=*******@qq.com
set smtp-auth-password=isjatjwmcxtxbefj
set smtp-auth=login
set ssl-verify=ignore

发送邮件:

echo hello world | mail -s test ********@qq.com

KA1成功:

KA2成功:

通知脚本:‘

KA:

vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dst="********@qq.com"
send_message()
{

mail_sub="$HOSTNAME to be $1 vip move"
mail_msg="`date +%F\ %T`: vrrp move $HOSTNAME chage $1"
echo "$mail_msg" | mail -s "$mail_sub" $mail_dst

}

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

添加权限:

chmod +x /etc/keepalived/mail.sh 

打开keepalived

vim /etc/keepalived/keepalived.conf 

写入:

notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值