文章目录
KeepLived技术介绍
Keepalived 是一个开源的高可用性解决方案,主要用于提高网络服务的可靠性。它最初是为了解决 Linux 虚拟服务器(LVS)集群中的单点故障问题而设计的,但现在已经发展成为一个通用的高可用性工具,可以用于各种网络服务。
技术介绍
VRRP介绍
VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)是一种用于提高网络可靠性、稳定性的协议。它通过在多台路由器之间建立备份机制,使得网络中的数据传输更加安全可靠。
在VRRP中,多台路由器组成一个虚拟路由器,它们共享同一个虚拟IP地址。其中一台路由器被选为主路由器(Master),负责处理所有的网络流量。其他路由器作为备份路由器(Backup),随时准备接管主路由器的工作。
当主路由器发生故障或宕机时,备份路由器会立即接管其工作,继续处理网络流量,从而实现了无缝切换,避免了网络中断。这种机制大大提高了网络的可靠性和稳定性。
VRRP还支持负载均衡功能,可以通过配置多条虚拟路由器,将网络流量分散到多台路由器上,从而提高了网络的吞吐量和效率。
总的来说,VRRP是一种非常重要的网络协议,它通过建立备份机制和负载均衡功能,提高了网络的可靠性和稳定性,使得网络中的数据传输更加安全可靠。
工作原理
Keepalived 主要通过以下几个组件来实现其功能:
- VRRP(Virtual Router Redundancy Protocol):虚拟路由器冗余协议,用于在多个路由器之间提供冗余,从而消除单点故障。
- 健康检查:Keepalived 提供了一套健康新机制,用于监控集群中各个服务的状态。
- 故障转移:当主服务器出现故障时,Keepalived 可以自动将服务转移到备用服务器。
Keepalived 的工作原理主要基于 VRRP 协议。以下是其工作原理的简要概述:
- VRRP 组:在一个 Keepalived 集群中,多个服务器组成一个 VRRP 组。每个组有一个虚拟 IP 地址(VIP),并且只有一个服务器(称为 Master)拥有这个 VIP。
- 心跳机制:Keepalived 使用心跳机制来检测 Master 服务器的状态。如果 Master 服务器出现故障,备用服务器(称为 Backup)会接替 Master 的角色。
- 优先级:每个服务器都有一个优先级。优先级最高的服务器成为 Master。如果 Master 服务器故障,优先级次高的服务器将成为新的 Master。
- 虚拟路由器:每个 VRRP 组相当于一个虚拟路由器,具有唯一的 VRID(Virtual Router Identifier)。这个 VRID 用于生成虚拟 MAC 地址(VMAC),格式为 00:00:5E:00:01:VRID。
工作模式
Keepalived 支持多种工作模式,主要包括以下几种:
- Master/Slave 模式:这是最常见的模式,其中一个服务器作为 Master,其他服务器作为 Slave。Master 服务器负责处理所有网络流量,而 Slave 服务器处于待机状态,随时准备接管 Master 的工作。
- Master/Master 模式:在这种模式下,所有服务器都处于活动状态,共同分担网络流量。如果某个服务器出现故障,其他服务器会接管其工作。
- 抢占模式和非抢占模式:
- 抢占模式:如果 Backup 服务器的优先级高于当前 Master 服务器,Backup 服务器会主动接管 Master 的角色。
- 非抢占模式:即使 Backup 服务器的优先级更高,也不会主动接管 Master 的角色,除非 Master 服务器完全失效。
典型应用场景
- 负载均衡:Keepalived 可以与 LVS 结合使用,实现高效的负载均衡。
- 高可用性:通过 VRRP 和健康检查机制,Keepalived 可以确保服务的高可用性。
- 故障恢复:当主服务器出现故障时,Keepalived 可以快速恢复服务,避免服务中断。
总之,Keepalived 是一个强大且灵活的高可用性解决方案,适用于各种网络服务的监控和故障转移。
VRRP 相关术语
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
1.5.2 VRRP 相关技术
通告:心跳,优先级等;周期性
工作方式:抢占式,非抢占式
安全认证:
无认证
简单字符认证:预共享密钥
MD5
工作模式:
主/备:单虚拟路由器
主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
keepalived虚拟路由管理(环境搭建)
准备四台虚拟机:基本模型如下,实际配置IP不完全与图上一致
实际配置:
做好配置之后,开始在ka1和ka2上面安装KeepLived服务,在web服务器上面安装httpd服务。
[root@KA1 ~]# dnf install keepalived -y
[root@KA1 ~]# systemctl start keepalived
[root@KA1 ~]# ps axf | grep keepalived
#输出的结果
2385 pts/0 S+ 0:00 \_ grep --color=auto keepalived
2326 ? Ss 0:00 /usr/sbin/keepalived -D
2327 ? S 0:00 \_ /usr/sbin/keepalived -D
keepalived虚拟路由管理(基本路由配置)
主:
从:
查看:(主)
开启通信功能及独立日志
主:
独立文件的使用与非抢占式实验
注意:
两边都必须是 backup:备用设备
要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP
默认为抢占模式preempt,,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动
主:
我是使用独立文件,在此处
测试:
谁先启,谁先拿到VIP,这里面ka1先启动
从服务器配置:
如果ka1挂掉,ka2就拿到
抢占延迟模式 preempt_delay 实验
主:
从:
如果主服务重启,VIP不会立刻回来,会过10s才从从服务器上切换回来,防止瞬间的网络波动
VIP单播配置
主:
默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量
从:
测试:
主:
从:
邮件通知
3.4.4 邮件配置
安装邮件发送工具
[root@KA2 ~]# dnf install mailx -y
QQ邮箱配置
[root@KA1 ~]# vim /etc/mail.rc
#######mail set##########
set from=594233@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=594233@qq.com
set smtp-auth-password=isjatjwm #邮箱的秘钥(这个是我乱写的,不可以,可以去注册自己的验证)
set smtp-auth=login
set ssl-verify=ignore
发送测试邮件
[root@KA1 ~]# echo test message |mail -s test 594233@qq.com
脚本模式:
3.4.5 实战案例:实现 Keepalived 状态切换的通知脚本
# IP地址记得根据自身主机设定
#在所有 keepalived节点配置如下
[root@KA1 + KA2 ~]# vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='594233887@qq.com'
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
[root@KA1 +KA2 ~]# chmod +x /etc/keepalived/mail.sh
[root@KA1 +K2 ~]#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:0
}
unicast_src_ip 172.25.254.20
unicast_peer {
172.25.254.30
}
notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"
}
#模拟master故障
[root@ka1-centos8 ~]#killall keepalive
#测试:在浏览器中观察邮件即可
双组模式实验
ka2:
ka1:
web服务器:
keepalived+lvs(单主、双主二选一)
我这里做的是单主模式:lvs-DR(单主)
keepalived+haproxy(结合实现HAProxy高可用)
LVS高可用和HAProxy 不可同时存在
两边安装haproxy
主从配置相同的部分
主:
主服务器的VIP成功跑到了备服务器上面了
理论补充:
定义 VRRP script
vrrp_script <SCRIPT_NAME> {
script <STRING>|<QUOTED-STRING> #此脚本返回值为非0时,会触发下面OPTIONS执行
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> #默认为0,如果设置此值为负数,
#当上面脚本返回值为非0时
#会将此值与本节点权重相加可以降低本节点权重,
#即表示fall.
#如果是正数,当脚本返回值为0,
#会将此值与本节点权重相加可以提高本节点权重
#即表示 rise.通常使用负值
fall <INTEGER> #执行脚本连续几次都失败,则转换为失败,建议设为2以上
rise <INTEGER> #执行脚本连续几次都成功,把服务器从失败标记为成功
user USERNAME [GROUPNAME] #执行监测脚本的用户或组
init_fail #设置默认标记为失败状态,监测成功之后再转换为成功状态
}
Keepalived 和 HAProxy 技术介绍
Keepalived 和 HAProxy 是常用的开源负载均衡和高可用解决方案,广泛应用于企业级环境中。
1. Keepalived
技术介绍:
Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议的负载均衡软件,主要用于提高网络服务的高可用性。它通过监控网络接口和虚拟 IP 地址(VIP)来实现故障转移和负载均衡。
工作原理:
- VRRP 协议: Keepalived 使用 VRRP 协议来实现虚拟路由器的冗余。在一个 Keepalived 集群中,多个节点共同维护一个虚拟 IP 地址。当主节点故障时,备用节点接管虚拟 IP,继续提供服务。
- 健康检查: Keepalived 支持多种健康检查方式,包括 TCP、UDP、HTTP 等,用于监控后端服务器的状态。一旦检测到某个服务器故障,Keepalived 会将其从服务列表中移除,直到其恢复正常。
工作模式:
- Master/Slave 模式: 在这种模式下,一个节点作为 Master,其他节点作为 Slave。Master 节点负责处理所有流量,Slave 节点处于待机状态,随时准备接管 Master 的工作。
- Master/Master 模式: 在这种模式下,所有节点都处于活动状态,共同分担负载。如果某个节点故障,其他节点会接管其工作。
2. HAProxy
技术介绍:
HAProxy 是一个高性能的负载均衡器和代理服务器,支持 TCP 和 HTTP 协议。它可以根据预定义的负载均衡算法将流量分发到后端服务器,从而提高系统的可靠性和性能。
工作原理:
- 负载均衡算法: HAProxy 支持多种负载均衡算法,包括轮询、最少连接、源地址散列等。这些算法确保流量在后端服务器之间均匀分布。
- 健康检查: 类似于 Keepalived,HAProxy 也支持健康检查功能,用于监控后端服务器的状态。一旦检测到某个服务器故障,HAProxy 会将其从服务列表中移除,直到其恢复正常。
工作模式:
- Layer 4 负载均衡: 在这种模式下,HAProxy 在网络层进行负载均衡,主要基于 IP 地址和端口号。适用于 TCP 协议的服务。
- Layer 7 负载均衡: 在这种模式下,HAProxy 在应用层进行负载均衡,可以基于 URL、HTTP 头等信息进行更精细的流量分发。适用于 HTTP/HTTPS 协议的服务。
Keepalived 和 HAProxy 的结合使用
Keepalived 和 HAProxy 经常结合使用,形成一个高可用、高性能的负载均衡解决方案。在这种架构中,Keepalived 负责监控和故障转移,确保负载均衡器的高可用性;HAProxy 则负责具体的流量分发,提高系统的性能和可靠性。
典型应用场景:
- Web 应用负载均衡: 将来自用户的 HTTP/HTTPS 请求分发到多个 Web 服务器,提高网站的并发处理能力和可靠性。
- 数据库负载均衡: 将数据库查询分发到多个数据库服务器,提高数据库的读写性能和可靠性。
总结
Keepalived 和 HAProxy 是两种非常强大的开源工具,分别用于高可用性和负载均衡。它们的结合使用可以形成一个强大、灵活且可靠的负载均衡解决方案,适用于各种复杂的企业级应用场景。
keepalived+lvs
概念
Keepalived 和 LVS 是常用的开源负载均衡解决方案,广泛应用于高并发、高可用的网络服务环境中。以下是关于它们的技术介绍、工作原理和工作模式的详细说明:
技术介绍
-
Keepalived:
- 简介: Keepalived 是一个用于监控和管理 Linux 系统中网络服务的软件,最初是为了配合 LVS(Linux Virtual Server)而设计的。
- 功能: 主要用于监控 LVS 集群中各个服务节点的状态,并提供高可用性(HA)功能,如 VRRP(Virtual Router Redundancy Protocol)协议的支持。
- 用途: 除了管理 LVS 外,还可以用于其他服务(如 Nginx、HAProxy、MySQL 等)的高可用性解决方案。
-
LVS:
- 简介: LVS(Linux Virtual Server)是一个基于 Linux 内核的负载均衡解决方案,利用内核中的 IPVS(IP Virtual Server)模块实现四层负载均衡。
- 功能: 提供高性能、高可用性的负载均衡服务,能够将网络请求分发到多个后端服务器。
- 用途: 广泛应用于大型网站和高并发服务场景,如 Web 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务等。
工作原理(思想)
-
Keepalived:
- 监控和管理: Keepalived 通过定期发送 VRRP 协议报文来监控服务节点的状态。一旦检测到某个服务节点出现问题,Keepalived 会将其从服务集群中剔除,并将流量重新分配到其他健康的节点。
- 高可用性: 当主节点(Master)发生故障时,备用节点(Backup)会接管主节点的任务,确保服务不中断。这一过程通常在几秒钟内完成,以保证服务的连续性。
-
LVS:
- 负载均衡算法: LVS 支持多种负载均衡算法,如轮询(Round Robin)、最少连接(Least Connections)、IP 哈希(IP Hash)等,可以根据不同的需求选择合适的算法。
- 四层负载均衡: LVS 主要工作在 TCP/IP 协议的第四层(传输层),通过对 IP 报文的修改和调度,将请求分发到后端服务器。
- 高可用性和高性能: LVS 通过集群的方式提供服务,能够有效提高系统的可用性和性能。
工作模式
-
Keepalived:
- Master/Backup 模式: 在这种模式下,一个节点作为 Master 节点,负责处理所有的 VRRP 报文和其他网络请求。另一个节点作为 Backup 节点,随时准备接管 Master 节点的任务。当 Master 节点发生故障时,Backup 节点会迅速接管,成为新的 Master 节点。
- 故障检测和恢复: Keepalived 通过定期发送心跳报文来检测服务节点的状态。一旦检测到某个节点出现问题,Keepalived 会自动将故障节点从集群中剔除,并将流量重新分配到其他健康的节点。当故障节点恢复正常后,Keepalived 会将其重新加入到集群中。
-
LVS:
- NAT(Network Address Translation)模式: 在这种模式下,LVS 调度器接收到请求后,将请求的目标地址改为后端服务器的地址,并将响应数据包的源地址改为调度器的地址。这样,客户端的所有请求都通过调度器进行转发和响应。
- DR(Direct Routing)模式: 在这种模式下,LVS 调度器接收到请求后,将请求的目标 MAC 地址改为后端服务器的 MAC 地址,然后直接将请求发送到后端服务器。后端服务器直接将响应数据包发送回客户端,不需要经过调度器。这种模式减少了调度器的负载,提高了系统的性能。
- TUN(IP Tunneling)模式: 在这种模式下,LVS 调度器接收到请求后,将请求封装成一个新的 IP 数据包,并发送到后端服务器。后端服务器处理完请求后,将响应数据包解封装,并直接发送回客户端。这种模式适用于跨不同网络的负载均衡。
总结来说,Keepalived 和 LVS 共同构成了一个高效、高可用的负载均衡解决方案。Keepalived 负责监控和管理服务节点的状态,确保服务的高可用性;LVS 则负责具体的负载均衡任务,通过各种算法和模式将请求分发到后端服务器,提高系统的性能和可靠性。