0


nginx+keepalived高可用


一、项目背景

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工作与原理:

  1. 虚拟IP(VIP)管理:- Keepalived 在多台服务器(节点)上运行,并通过协作来管理一个虚拟IP地址(VIP)。- 这个VIP被配置为服务的前端地址,客户端访问这个VIP时,请求会被转发到实际的服务器上。
  2. 故障检测和切换:- 如果在健康检查中发现某个节点或者其服务不可用,Keepalived 将其标记为故障状态。- 故障节点的 VIP 将自动迁移到备用节点上,确保服务的可用性。- 迁移过程通常包括通知网络设备,以确保流量被正确地重定向到新的活跃节点。
  3. 优先级和权重管理:- 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

标签: nginx 服务器 linux

本文转载自: https://blog.csdn.net/qq_61314298/article/details/139986117
版权归原作者 素笺淡墨 & 所有, 如有侵权,请联系我们删除。

“nginx+keepalived高可用”的评论:

还没有评论