高可用集群KEEPALIVED

有了分布式架构+负载均衡,业务可用性越来越强,能承受住很高的流量

但是问题出现了——所有流量都打在 nginx代理上,你的nginx容易出现性能瓶颈

突然有一天,你的 nginx 撑不了那么大的流量,出现了宕机故障,那么用户发起的所有请求都到不了你的后端 web 服务器上

那么该如何解决 nginx 单点问题呢?

你想到了将 nginx 做成分布式+ keepalived 的方式

如果 nginx master 出现宕机,keepalived则会将服务切到 nginx slave上,保证业务不受影响

这样就可以避免 nginx 单机故障问题,以此来实现高可用

keepalived服务简单来说,就是用来防止单点故障的。

所谓的单点故障就是,主服务器挂了之后从服务器充当主服务器,原来的主服务器恢复后,当从服务器来使用,保证服务的高可用性。

环境配置

首先需要四台设备,分别时KA1,KA2 web1和web2

KA1 IP:172.25.254.10

KA2 IP:172.25.254.20

web1IP:172.25.254.110

web2IP:172.25.254.120

在web1和web2中下载httpd服务和写入信息

在web1中

echo 172.25.254.110 > /var/www/html/index.html

在web2中

echo 172.25.254.110 > /var/www/html/index.html

keepalived的虚拟路由管理

首先在KA1和KA2中下载keepalived服务

在KA1中进入配置文件

vim /etc/keepalived/keepalived.conf

notification_email表示keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区

分写多个
notification_email_from表示 发邮件的地址
smtp_server 127.0.0.1 表示 邮件服务器地址
smtp_connect_timeout 30 表示 邮件服务器连接 timeout超时时间
router_id KA1 表示 每个 keepalived 主机唯一标识
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中
第一行MASTER表示该设备为主机,如果是BAKCUP则表示为副机。
virtual_router_id表示每个虚拟路由器惟一标识, 范围: 0-255 ,每个虚拟路由器此值必须唯一
在virtual_ipaddress中配置需要的VIP

在KA2中,参数同上

使用ip a命令查看VIP是否生效(由于KA1为主设备,所以只有KA1中有VIP,KA2中没有VIP)

ip a

在KA1中使用抓包命令来进行测试VIP是否生效

tcpdump -i eth0 -nn host 224.0.0.18
进入KA1关掉keepalived进行测试
systemctl stop keepalived
访问结果从10变为了20
KA2检测到KA1主机宕机,VIP给到KA2
开启KA1中keepalived服务后
systemctl start keepalived
由于KA1设置为MASTER为主设备,所以VIP回到KA1,访问从20变回10

keepalived开启通信功能和独立日志

开启通信功能

TCP可以提供可靠的数据传输服务,IP地址和端口代表一个TCP连接的一个连接端。 要获得TCP服务,须在发送机的一个端口上和接收机的一个端口上建立连接。 而Keepalived在传输层就是利用TCP的端口连接和扫描技术来判断集群节点是否正常的

进入keepalived配置文件,加入vrrp_iptables,两台keep主机都要配置,或者同时注释掉vrrp_strict和vrrp_iptables

(两台keep主机都要做)

vim /etc/keepalived/keepalived.conf

访问VIP,172.25.254.100

生成日志

Keepalived日志记录了服务运行期间的各种事件和状态变更,这些信息对于监控服务健康状况、诊断问题和审计目的至关重要。通过分析日志文件,管理员可以了解服务的启动和关闭消息、配置文件解析结果、VRRP状态变更、故障检测与恢复、系统通知以及内部错误与警告等关键信息。这些日志数据有助于及时发现和解决潜在的问题,确保网络服务的稳定可靠运行。

进入keepalived的日志配置文件

vim /etc/sysconfig/keepalived

在文件底部加入以下参数

-S后的数字范围0-7

进入日志文件,配置日志接收范围和生成文件路径和名字等

vim /etc/rsyslog.conf

重启服务查看日志

cat /var/log/keepalived.log

keepalived独立子配置文件

在复杂的生产环境中,Keepalived的主配置文件可能会包含大量的集群配置信息,这使得配置文件难以管理和维护。为了解决这个问题,可以将不同集群的配置分割到独立的子配置文件中。通过在主配置文件中通过include指令引入这些子配置文件,可以实现模块化管理,使得每个集群的配置更加清晰,便于单独编辑和更新。这种做法提高了配置文件的可读性和可维护性,同时也降低了因配置错误导致的风险

vim /etc/keepalived/keepalived 

使用unclude设置子配置文件路径

创建文件路径及文件

mkdir -p /etc/keepalived/conf.d

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

写入以下配置

独立子配置文件完成

非抢占模式

Keepalived的非抢占模式是指在高可用性集群中,当主节点(Master)出现故障并恢复后,它不会主动夺回虚拟IP地址(VIP),而是继续作为备份节点(Backup)运行。这种模式适用于那些不希望因为主节点的恢复而触发不必要的VIP迁移的场景。在非抢占模式下,只有当备份节点完全失效,主节点的优先级才能决定其是否接管VIP。这样可以减少服务中断的次数,提高系统的稳定性。

在配置非抢占模式时,通常需要确保所有节点的状态都设置为BACKUP,并且至少有一个节点配置了nopreempt参数。此外,所有节点的优先级应当保持一致,或者至少确保主节点的优先级不是最高的,以便在主节点恢复时能够保持在BACKUP状态

在KA1和KA2中同时配置以下参数

在KA1中测试:

KA1优先级更高,但并没有VIP

KA2中,由于配置了非抢占模式,所以KA2中纯在VIP而且不会被KA拿去

当关掉KA2 keepalived服务后,VIP才会回到KA1中

延迟抢占

Keepalived的延迟抢占模式是一种高级配置选项,它允许在主节点(Master)恢复后,设置一个特定的延迟时间,在这个时间内,即使主节点的优先级高于备份节点(Backup),它也不会尝试夺回虚拟IP地址(VIP)。这种模式特别适用于那些需要确保主节点完全稳定并且能够可靠地提供服务之前,不发生VIP切换的场景。通过设置preempt_delay参数,管理员可以控制抢占行为发生的时机,从而减少因过早切换导致的潜在服务中断风险

在KA1和KA2中同时设置preempt_delay

测试,得先让VIP在KA2中,因为KA1本来就为主设备,如果KA1中有VIP就无法抢占,将VIP放在KA2可以更好观测到效果

5s后VIP从KA2回到KA1

组播变单播

在默认的组播模式下,Keepalived会向特定的组播地址发送VRRP广告信息。这种方式虽然适用于多节点环境,但在某些网络环境中可能不适用,例如当网络不支持组播或者出于安全考虑需要限制组播流量时。此外,组播模式可能会在局域网中产生大量无用信息,引起干扰和冲突。

将Keepalived的组播模式改为单播模式可以解决这些问题。在单播模式下,Keepalived不再向组播地址发送广告信息,而是直接向预设的单播地址发送,通常是主备节点的私有IP地址。这样可以减少网络流量,提高效率,并避免潜在的冲突。同时,单播模式不需要关闭vrrp_strict选项,这是组播模式下的一个额外要求,以确保VRRP协议的正确执行.

在配置单播模式时,需要在Keepalived的配置文件中指定unicast_src_ip(单播的源地址)和unicast_peer(单播的目标地址)。这样配置后,Keepalived会在主备节点之间建立单播通信,确保VRRP广告信息的传递,从而维护高可用性集群的正常运行。

进入keepalived配置文件

vim /etc/keepalived/keepalived.conf

在unicast_src_ip 为发送方的IP地址

unicast_peer 为接收方IP地址

此配置需在KA1和KA2上都配置

用抓包进行查看

tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20
当KA1开启keepalived服务时,KA2无法抓包访问
关掉KA1keepalived服务后KA2则可以抓包访问
tcpdump -i eth0 -nn src host 172.25.254.20 and dst 172.25.254.10
KA1无法抓包访问,VRRP变为ICMP

keepalived通知脚本(邮件通知)

邮件通知脚本在Keepalived中的作用是在特定事件发生时,如主备角色转换或故障发生,自动向系统管理员发送通知邮件。这样,管理员可以及时得知服务状态的变化,并采取相应的维护措施。邮件通知脚本通常包含以下几个关键部分:

  1. 脚本定义:脚本以shell脚本的形式编写,定义了在不同状态下需要执行的操作。
  2. 邮件发送函数:脚本中定义了一个函数,用于构建邮件的主题和正文,并使用邮件命令(如mail)发送邮件。
  3. 状态判断逻辑:脚本通过传递不同的参数来判断当前的状态(如master、backup或fault),并根据这些状态执行相应的邮件发送操作。
  4. 执行权限:脚本需要具有执行权限,以便Keepalived能够在检测到状态变化时运行脚本。

在Keepalived的配置文件中,可以通过notify_masternotify_backupnotify_fault指令来指定在不同状态变化时执行的邮件通知脚本及其参数.

首先需要在windows中开启邮件服务(我用的qq邮箱)

登录qq邮箱后点击右上角账号与安全

点击安全设置

发送短信

可获得安全码

在KA1和KA2中下载mailx邮件服务

yum install mailx -y

进入mail配置文件

vim /etc/keepalived/mail.sh

在文件最后加入以下内容,from和user后为自己的真实邮件地址,在passwd后粘贴在qq邮箱中获得的安全码

创建邮箱脚本(内容如下)

vim /etc/keepalived/mail.sh

vim /etc/keepalived/keepalived.conf

调用配置脚本

以上配置:vim /etc/keepalived/mail.sh , vim /etc/keepalived/mail.sh ,vim /etc/keepalived/keepalived.conf

在KA2中同样需要配置,配置内容和KA1一样

配置完成,开始测试

重启KA1keepalive服务

KA1会在qq邮箱中发送以下消息

停止KA1的keepalived服务,KA2会发送邮件

启动KA1的keepalived服务后KA1又会发送邮箱

keepalived双主架构

Keepalived双主架构的原理

Keepalived是一个用于实现高可用性的开源软件,它通常与虚拟化路由器冗余协议(VRRP)一起使用,以确保网络服务的连续性和可靠性。在双主架构中,两台服务器都运行Keepalived守护进程,并通过VRRP协议相互通信,以维护一个共享的虚拟IP地址。这两台服务器可以同时在线提供服务,但在任何时候只有一台服务器持有虚拟IP地址,并对外提供服务。

双主架构的作用

双主架构的主要作用是消除单点故障,提高系统的可用性和可靠性。在这种配置中,两台服务器都可以承担主服务器的角色,即使一台服务器出现故障,另一台服务器也能立即接管虚拟IP地址,继续提供服务,从而确保服务的连续性。此外,双主架构还可以平衡负载,提高整体性能,因为两台服务器可以共同处理传入的流量。

在实际应用中,双主架构可以用于多种场景,例如构建高可用的Web服务器、数据库服务器或其他关键网络服务。通过这种方式,组织可以减少因服务器故障导致的服务中断风险,保障业务的稳定运行。

进入配置文件

vim /etc/keepalived/keepalived.conf

KA1:

KA2:

这样两台主机都有VIP

KA1:

KA2:

同样的,一台keepalived设备停机,VIP会给到另一个

KA1停掉后,KA2有两个VIP,分别为100和200

keepalived+LVSDR模式

Keepalived结合LVS(Linux Virtual Server)的DR(Direct Routing)模式是一种常用于构建高可用负载均衡集群的解决方案。在这种模式下,Keepalived负责管理虚拟IP(VIP)和监控LVS负载均衡器的状态,确保在主负载均衡器出现故障时能够无缝切换到备用负载均衡器。

Keepalived+LVS DR模式的主要作用是提供一个稳定、高效且高可用的负载均衡解决方案。它适用于需要处理大量并发连接和提供连续服务的场景,如Web服务器集群、数据库服务器集群等。通过使用Keepalived,可以确保在任何单一组件失败的情况下,系统仍然能够继续提供服务,从而提高了整体的可靠性和业务连续性

在relserver1和2中

配置arp和VIP

进入keepalived配置文件

vim /etc/keepalived/keepalived.conf

KA1:

KA2:

用ipvsadm -Ln查看策略是否生效

KA1:

KA2:

使用windows访问测试:

由于设置的轮询都为1,所以各自访问一个

停止KA1后,仍能访问

该结果还是可以呈现出客户想访问的结果

keepalived+haproxy

当Keepalived和Haproxy结合使用时,它们共同提供了一个高可用性的负载均衡解决方案。Keepalived管理VRRP组的虚拟IP,确保即使主Haproxy节点失败,服务也能通过备用节点继续提供。同时,Haproxy负责实际的流量分发和后端服务器健康检查。这种配置允许即使在主节点出现故障的情况下,客户端的请求也能无缝地重定向到备用节点,从而最小化服务中断的影响

在KA1和KA2中下载haproxy

进入配置文件写入主机VIP

vim /etc/haproxy/hapory.cfg

在两个ka1和ka2两个节点启用内核参数

刷新

在ka1和ka2中编写检测脚本

在ka1和ka2中配置keepalived添加shell脚本

vim /etc/keepalived/keepalived.conf

KA1vip为100

KA2VIP为200

测试:

关闭KA1haproxy服务,100VIP进入KA2

KA1无VIP

KA2有两个VIP,分别为100和200

访问同样生效

开启KA1haproxy服务后,100VIP回到KA1

KA2无100VIP

实验完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值