nginx+keepalive高可用搭建方案

Nginx是一款轻量级、高性能的Web服务器,具有可扩展性和可定制性,常用于负载均衡和反向代理。Keepalive是用于保持长连接的工具,提高服务器效率和稳定性。在Keepalived集群中,虚拟IP能在主从服务器间无缝切换,实现高可用性。通过配置Keepalived和Nginx,可以搭建高可用负载均衡服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是nginx有什么作用

nginx是一款使用非常广泛的Web服务器,它可以提供高性能和可扩展性。它是由Google开发的,并且是Apache HTTP Server的替代品。 以下是一些nginx的主要特点:

  1. 轻量级:nginx比Apache轻量级,它不需要那么多的配置文件和模块,从而更容易安装和管理。
  2. 可扩展:nginx可以处理大量的并发请求,它支持负载均衡、代理、缓存和反向代理等功能,从而使网站更具有可扩展性。
  3. 可定制:nginx的配置非常灵活,可以通过简单的配置文件来定制化网站的各种设置,例如缓存策略、日志记录等。
  4. 安全:nginx可以通过设置来防止常见的安全问题,例如缓存攻击和跨站脚本攻击等。
  5. 开源:nginx是开源软件,它的源代码可以在GitHub上免费获取,这使得它更容易进行扩展和修改。

二、什么是keepalive有什么作用

keepalive是一个用于保持长连接的插件,它可以提高服务器的效率和稳定性。它通过心跳包来维护连接,并在连接超时时间内重新连接。 以下是一些keepalive的主要特点:

  1. 连接维护:keepalive会维护长连接,并在连接超时时间内重新连接,以确保服务器端始终处于运行状态。
  2. 提高效率:通过维护长连接,可以减少建立和关闭连接所需的时间,从而提高服务器的效率。
  3. 节省带宽:由于keepalive可以维护长连接,因此减少了建立和关闭连接所需的网络流量,从而节省了带宽。
  4. 稳定性:通过心跳包维护连接,可以确保服务器端始终处于运行状态,从而提高了网站的稳定性和可用性。

三、keepalive实现无缝连接nginx无缝顶替主机的原理

keepalived集群中至少有两台机器
两台:一主一从
三台:一主二从…以此类推
为keepalived集群设置一个唯一的虚拟IP,虚拟IP默认会与master机器绑定在一起
即master机器将会有两个ip地址,一个是自己的源ip,一个是keepalived给的虚拟IP地址

非抢占模式下:
当master机器出现故障时,keepalived第一时间收回虚拟IP地址并分配给slave机器,此时相当于slave机器升级为master机器,此时用户只需要记住keepalived的虚拟IP地址即可
若master机器恢复正常,则不会被分配虚拟IP地址,直到slave机器出现故障后,master才会被分配虚拟IP地址
四、搭建Keepalived+Nginx高可用负载均衡服务器

准备2台Nginx (一主一从),分别安装keepalived

主机名称vipip
nginx1172.21.161.100172.21.161.*
nginx2172.21.161.100172.21.161.*

安装keepalived

  查看网卡

新建检查nginx脚本(两台主机都需要新建)

#!/bin/bash

A=`ps -C nginx --no-header |wc -l`        
    if [ $A -eq 0 ];then                            
        /opt/nginx1.23.1/sbin/nginx                
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            exit 1
        else
            exit 0
        fi
    else
        exit 0
    fi

进行keepalive配置修改

启动keepalived, 得到虚拟IP地址(备机同样操作进行搭建)

 在两台服务器上分别启动:
service keepalived start

分别执行ip addr命令,可以在最先启动的机器上看到虚拟IP

 

 

 

<think>嗯,用户想了解如何使用NginxKeepalived实现高可用,需要详细的步骤。首先,我得回忆一下这两个工具的作用。Nginx作为反向代理和负载均衡器,而Keepalived用于实现VRRP协议,提供高可用性。他们的组合通常用于避免单点故障,确保服务持续可用。 用户可能是在搭建Web服务器集群,希望确保即使一台服务器宕机,服务也不会中断。所以需要配置主备模式的Nginx,通过Keepalived管理虚拟IP。用户可能对网络配置和冗余机制不太熟悉,需要详细步骤说明。 首先,得考虑环境准备。至少需要两台服务器,都安装NginxKeepalived。然后配置Nginx,确保它们能正常处理请求。接着是Keepalived的配置,设置主备节点的优先级和虚拟IP。可能需要解释VRRP的工作原理,比如主节点持有虚拟IP,备用节点监听主节点状态,一旦主节点故障,备用节点接管IP。 然后,需要检查防火墙和SELinux设置,确保VRRP协议通信正常。常见的问题可能包括防火墙阻止了VRRP的通信,导致脑裂现象或者状态切换失败。此外,脚本检测Nginx状态的部分也很重要,如果Nginx意外停止,Keepalived应该能够检测到并触发故障转移。 用户可能需要具体的配置文件示例,比如keepalived.conf的模板,主备节点的不同配置参数。还要注意虚拟IP的选择,不能与现有IP冲突。测试步骤也是关键,比如手动停止Nginx或关闭主节点,观察虚拟IP是否漂移到备用节点,以及服务是否恢复。 可能忽略的细节包括ARP缓存问题,切换后可能需要更新客户端的ARP表,或者配置通知脚本发送警报。此外,日志检查也是故障排除的重要部分,需要指导用户查看/var/log/messages或使用journalctl来跟踪Keepalived的日志。 最后,总结整个流程,确保步骤清晰,避免遗漏关键点,比如安装软件、配置Nginx、设置Keepalived、脚本检测、防火墙调整和测试验证。用户可能需要实际操作中的命令和配置示例,所以提供具体的代码块和配置片段会很有帮助。</think>以下是使用 **Nginx + Keepalived** 实现高可用的详细步骤,通过 **主备模式(Active-Backup)** 确保服务持续可用: --- ### **一、环境准备** 1. **服务器要求**: - 至少 **2台服务器**(例如 `192.168.1.100` 和 `192.168.1.101`)。 - 每台服务器安装 **Nginx** 和 **Keepalived**。 - 规划一个 **虚拟IP(VIP)**,例如 `192.168.1.200`(客户端通过此IP访问服务)。 2. **网络要求**: - 所有服务器需在 **同一局域网** 内。 - 开放 **VRRP协议** 的通信(默认使用 `IP协议号 112` 或 `协议端口 112`)。 --- ### **二、安装与配置 Nginx** #### 1. 在两台服务器上安装 Nginx: ```bash # CentOS/RedHat yum install -y nginx systemctl start nginx systemctl enable nginx # Ubuntu/Debian apt install -y nginx systemctl start nginx systemctl enable nginx ``` #### 2. 配置 Nginx 服务(可选): - 确保 Nginx 监听相同端口(例如 `80`)。 - 可配置反向代理或负载均衡到后端应用服务器。 --- ### **三、安装与配置 Keepalived** #### 1. 在两台服务器上安装 Keepalived: ```bash # CentOS/RedHat yum install -y keepalived # Ubuntu/Debian apt install -y keepalived ``` #### 2. 主服务器配置(示例:192.168.1.100) 创建配置文件 `/etc/keepalived/keepalived.conf`: ```conf global_defs { router_id nginx_master # 唯一标识,备机改为 nginx_backup } vrrp_script chk_nginx { script "/etc/keepalived/check_nginx.sh" # 检测Nginx状态的脚本 interval 2 # 每2秒检测一次 weight 2 # 权重变化值(若检测失败,优先级降低2) } vrrp_instance VI_1 { state MASTER # 主节点为 MASTER,备机为 BACKUP interface eth0 # 网卡名称(通过 ifconfig 确认) virtual_router_id 51 # 虚拟路由ID,主备需一致(范围1-255) priority 100 # 主节点优先级需高于备机(例如备机设为90) advert_int 1 # 主备心跳间隔(秒) authentication { auth_type PASS auth_pass 1111 # 主备密码需一致 } virtual_ipaddress { 192.168.1.200 # 虚拟IP(VIP) } track_script { chk_nginx # 关联Nginx状态检测脚本 } } ``` #### 3. 备用服务器配置(示例:192.168.1.101) 修改 `/etc/keepalived/keepalived.conf`: ```conf global_defs { router_id nginx_backup # 修改标识 } vrrp_instance VI_1 { state BACKUP # 改为 BACKUP priority 90 # 优先级低于主节点 # 其余配置与主节点一致 } ``` #### 4. 创建Nginx状态检测脚本 在两台服务器上创建 `/etc/keepalived/check_nginx.sh`: ```bash #!/bin/bash if ! pgrep -x "nginx" > /dev/null; then systemctl restart nginx if ! pgrep -x "nginx" > /dev/null; then exit 1 # 重启失败,触发Keepalived切换 fi fi exit 0 ``` 赋予脚本执行权限: ```bash chmod +x /etc/keepalived/check_nginx.sh ``` --- ### **四、启动服务与验证** #### 1. 启动 Keepalived: ```bash systemctl start keepalived systemctl enable keepalived ``` #### 2. 验证虚拟IP绑定: 在主服务器执行 `ip addr show eth0`,应看到虚拟IP `192.168.1.200`。 #### 3. 模拟故障测试: - **手动停止主服务器Nginx**: ```bash systemctl stop nginx ``` Keepalived检测到Nginx停止后,会释放虚拟IP,备机接管VIP。 - **关闭主服务器网络**: ```bash ifdown eth0 ``` 备机检测到主节点心跳丢失后,自动接管VIP。 --- ### **五、防火墙与SELinux配置** 1. **允许VRRP协议**: ```bash firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent firewall-cmd --reload ``` 2. **关闭SELinux(可选)**: ```bash setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` --- ### **六、日志与排错** - 查看Keepalived日志: ```bash tail -f /var/log/messages # CentOS/RedHat journalctl -u keepalived -f # Ubuntu/Debian ``` --- ### **总结** 通过以上步骤,Nginx + Keepalived 实现了 **主备高可用**: - 主节点故障时,备节点自动接管虚拟IP。 - Nginx服务异常时,脚本尝试重启,失败后触发VIP切换。 - 客户端始终通过虚拟IP `192.168.1.200` 访问服务,无感知故障切换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值