一、项目背景
1nginx+keepalived原理
1.1 Nginx
Nginx 是一个高性能的开源反向代理服务器,也可以用作负载均衡器、HTTP缓存以及作为Web服务器。它的主要优点包括:
- 高性能:Nginx 能够处理大量并发连接和高流量。
- 低资源消耗:相比传统的Web服务器,Nginx 的内存消耗较低。
- 可扩展性:支持插件和模块,可以扩展其功能。
- 灵活性:支持多种协议(HTTP、HTTPS、SMTP、POP3等)和配置选项。
在高可用架构中,Nginx 常用作前端的负载均衡器,将流量分发到多个后端服务器上。
1.2 Keepalived
Keepalived 是一个用于实现高可用性的工具,主要功能是通过虚拟IP(VIP)实现故障转移和负载均衡。它的关键特点包括:
- 虚拟IP管理:Keepalived 可以维护一个虚拟IP地址,客户端访问这个IP时,请求会被转发到实际的服务器上。
- 健康检查:Keepalived 可以定期检查后端服务器的健康状态,如服务器是否存活、服务是否可用等。
- 故障转移:如果某个服务器或服务发生故障,Keepalived 可以自动切换到备用服务器,以确保服务的可用性。
- 优先级管理:可以设置服务器的优先级,以决定哪个服务器成为主服务器处理请求。
二、nginx+keepalived原理
2.1 keepalived主要作用
这儿主要介绍keepalived工作与原理:
- 虚拟IP(VIP)管理:- Keepalived 在多台服务器(节点)上运行,并通过协作来管理一个虚拟IP地址(VIP)。- 这个VIP被配置为服务的前端地址,客户端访问这个VIP时,请求会被转发到实际的服务器上。
- 故障检测和切换:- 如果在健康检查中发现某个节点或者其服务不可用,Keepalived 将其标记为故障状态。- 故障节点的 VIP 将自动迁移到备用节点上,确保服务的可用性。- 迁移过程通常包括通知网络设备,以确保流量被正确地重定向到新的活跃节点。
- 优先级和权重管理:- Keepalived 允许管理员设置节点的优先级和权重,以便在决定主节点时进行权衡。- 主节点通常是处理流量的首选节点,备用节点则用于故障转移时接管服务。
2.2 nginx+keepalived原理图
高可用Web服务:通过使用 Keepalived 管理虚拟IP,实现Nginx负载均衡器的高可用性。如果主 Nginx 节点发生故障,Keepalived 可以将虚拟IP迁移到备用节点,确保服务的连续性。
- 1、keepalived是一个程序,它的作用是相互判断两台服务器上面的keepalived是否宕机,相互发送数据包;两台服务器上的keepalive是靠相互通讯来判断的,如果一台服务器上keepalived挂掉了,keepalived就会把虚拟的ip就会转移到备用的nginx服务器上,实现服务转移
- 2、需要在两台服务器上分别安装keepalived程序,并修改配置文件(详细参考项目步骤)
- 3、客户端就只能访问虚拟的ip才能访问到nginx服务器了,因为有两台nginx代理,但是作为一个站点就只能访问keepalived虚拟出来的这个ip 192.168.128.200
- 缺点:
- 当代理服务nginx坏了 但是keepalive没有挂这时候就可能存在服务无法访问了 (见附加详解)
三、环境准备
2台nginx服务 1台或者多台业务服务器
本项目采用的是两台nginx服务 2台业务服务器
四、keepalived配置编辑
1、两台nginx代理服务器安装keepalived:
[root@localhost ~]# yum install keepalived -y
2、keepalived默认配置文件路径:
**[root@localhost conf]# vim /etc/keepalived/keepalived.conf **
3、修改配置文件(将原来的配置文件全删除)
3.1 修改主节点keepalvied的配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.128.200
}
}
其他配置可以不用修改,默认就好
3.2 修改从节点keepalvied的配置
! Configuration File for keepalived
global_defs {
router_id 222
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.128.200
}
}
其他配置可以不用修改,默认就好
4、启动keepalive服务,查看虚拟地址是否存在·
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# systemctl status keepalived
可以看到现在多了一个ip地址,就是keppalive虚拟出来的地址(我这儿虚拟IP地址在从节点上)
五、项目测试
1、测试服务器宕机了,keepalived虚拟IP地址是否会自动转移ip,使用windows cmd窗口ping命令测试
ping 192.168.128.200 -t
2、ping虚拟IP地址,ping通后将虚拟ip地址的那台服务器(从节点)直接关机,观察还能继续ping通不
3、测试发现当关闭从节点服务器ping直接中断了,但是稍后又可以ping通了,说明虚拟ip地址转移成功了
4、这时的虚拟ip地址已经转移到主节点上面去了
5、最后使用虚拟ip地址访问web项目是可以正常访问到的
5.1本章小节
以上是整个keepalived部署的所有步骤。但是还存在以下下缺点:
keepalive只能相互检查对方的进程是否还存活,所以对nginx没有任何一点监控作用,当nginx宕机后,keepalived进程还存活着就会导致web项目无法访问,所以后续需要编写一个shell脚本来完成对nginx进程的判断
六、shell判断nginx运行状态
脚本实现:
当判断nginx进程挂掉时,脚本会强制干掉keepalive的进程,这样nginx挂掉后keepalive也会挂掉,最后虚拟ip地址转移到另外一台nginx服务器上
将以上脚本放到nginx上就可以检查nginx的存活状态了
注意 执行脚本的时候加上 &符号,让脚本后台运行
#!/bin/bash
while true; do
# 检查Nginx进程是否存在
if ! pgrep nginx > /dev/null; then
systemctl stop keepalived
fi
sleep 5 # 等待5秒后再次检查
done
版权归原作者 素笺淡墨 & 所有, 如有侵权,请联系我们删除。