nginx通过keepalived实现高可用(主备方式)

简介: nginx通过keepalived实现高可用(主备方式)

keepalived可用于多种软件的高可用实现,用来解决单点故障问题,同时在主、备服务器部署相同nginx,通过一个虚拟IP地址(即VIP)对外提供服务,当主服务器的nginx出现故障时,虚拟IP就会自动漂移到备服务器上,整个漂移过程是自动实现的,无需人工干预,从而保障了服务的高可用性。

本文以主备方式,抢占模式(如果使用非抢占模式,仅需将文中两台主机keepalived配置都改为state BACKUP)。

注意:请同步时间,保持时间一致性,自行关闭或配置防火墙和selinux规则

环境准备:

至少两台服务器,3个IP地址,本文操作系统环境为CentOS7.9,keepalived版本1.3.5,nginx版本1.20.2

10.10.10.11 MASTER服务器IP
10.10.10.12 BACKUP服务器IP
10.10.10.10 VIP虚拟IP

访问流程图如下:

1、安装nginx

在两台服务器上同时安装好nginx,我这里通过wlnmp一键包进行安装

rpm -ivh https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wnginx -y

2、修改默认index文件

为了访问区分演示,修改index.html文件,其中MASTER服务器index.html修改为10.10.10.11,BACKUP服务器index.html修改为10.10.10.12

vi /usr/local/nginx/html/index.html

3、安装keepalived

分别在两台服务器上安装keepalived,为了方便演示,我直接通过yum进行安装了

yum install keepalived -y

4、创建nginx脚本文件

在两台主机上分别创建nginx脚本文件

vi /etc/keepalived/nginx_check.sh

!/bin/bash

x=ps -C nginx --no-heading | wc -l
if [ $x -eq 0 ];then

    /etc/init.d/nginx start
    sleep 2
    x=`ps -C nginx --no-heading | wc -l`
    if [ $x -eq 0 ];then
        systemctl stop keepalived
    fi

fi

赋予执行权限

chmod +x /etc/keepalived/nginx_check.sh

注:该脚本判断nginx启动是否正常,如果nginx的进程数为0,表示nginx服务异常,则启动nginx(我这里的nginx启动命令是 /etc/init.d/nginx start),睡眠延迟2秒,防止资源抢占,然后再次判断nginx是否正常,如果还不正常,则停止keepalived,停止后进行IP漂移。

5、MASTER服务器配置

MASTER服务器keepalived配置文件如下

vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {

router_id 10.10.10.11
#表示运行keepalived服务器的唯一标识,可以是任意值,我这里是把本地IP当作标识10.10.10.11

}

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh" #定时检测nginx状态脚本
interval 2 #2秒检测一次
timeout 10 #脚本超时时间
weight -20 #权重

}

vrrp_instance VI_1 {

state MASTER
interface ens192 #本地网卡名称
virtual_router_id 51 #虚拟路由ID号,必须保持一致
priority 100 #节点优先级0~254,MASTER要高于BACKUP
advert_int 1 #组播信息发送的时间间隔,默认1秒,节点之间设置需保持一致
nopreempt #state配置项都为BACKUP时生效
authentication {
    auth_type PASS
    auth_pass 1111
} #账户校验信息,节点之间必须保持一致
virtual_ipaddress {
    10.10.10.10
} #VIP(虚拟IP),节点之间必须保持一致
track_script {
    chk_nginx
} #检测脚本配置

}

6、BACKUP服务器配置

BACKUP服务器keepalived配置文件如下

vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {

router_id 10.10.10.12
#表示运行keepalived服务器的唯一标识,可以是任意值,我这里是把本地IP当作标识10.10.10.12

}

vrrp_script chk_nginx {

script "/etc/keepalived/nginx_check.sh" #定时检测nginx状态脚本
interval 2 #2秒检测一次
timeout 10 #脚本超时时间
weight -20 #权重

}

vrrp_instance VI_1 {

state BACKUP
interface ens192 #本地网卡名称
virtual_router_id 51 #虚拟路由ID号,必须保持一致
priority 99 #节点优先级0~254,BACKUP要低于MASTER
advert_int 1 #组播信息发送的时间间隔,默认1秒,节点之间设置需保持一致
nopreempt #state配置项都为BACKUP时生效
authentication {
    auth_type PASS
    auth_pass 1111
} #账户校验信息,节点之间必须保持一致
virtual_ipaddress {
    10.10.10.10
} #VIP(虚拟IP),节点之间必须保持一致
track_script {
    chk_nginx
} #检测脚本配置

}

7、启动keepalived

两台主机分别启动keepalived,并配置开机自启

systemctl start keepalived
systemctl enable keepalived

8、验证环节开始

8-1、网络验证

拔掉MASTER网线后,访问VIP地址10.10.10.10,此时可看到显示内容变成10.10.10.12即BACKUP主机,IP漂移成功。
重新插回MASTER的网线后,访问VIP地址10.10.10.10,此时看到显示内容变成10.10.10.11,即MASTER主机,当MASTER恢复后,IP自动漂移回来了。

8-2、服务宕机验证

停止MASTER上的nginx服务,访问VIP地址10.10.10.10,此时看到访问显示地址依旧是10.10.10.11即MASTER主机。
当MASTER上的nginx服务停止后,keepalived通过nginx脚本重新启动了nginx服务,VIP没有触发漂移操作。

8-3、服务器重启验证

直接poweroff关闭MASTER机器,主机关闭后,访问VIP地址10.10.10.10,此时看到访问显示地址是10.10.10.12即BACKUP主机,IP漂移成功。

启动关闭的MASTER机器,启动成功后,访问VIP地址10.10.10.10,此时可看到访问显示地址是10.10.10.11即MASTER主机,IP自动漂移回来了。

目录
相关文章
|
6月前
|
运维 应用服务中间件 Linux
keepalived详解(三)——keepalived与Nginx配合实战
keepalived详解(三)——keepalived与Nginx配合实战
191 1
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
103 0
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
70 1
|
4月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
122 1
|
6月前
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用
|
6月前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
78 2
|
6月前
|
Kubernetes 搜索推荐 应用服务中间件
通过keepalived+nginx实现 k8s apiserver节点高可用
通过keepalived+nginx实现 k8s apiserver节点高可用
343 17
|
6月前
|
负载均衡 网络协议 应用服务中间件
【亮剑】在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。
【4月更文挑战第30天】本文介绍了在Linux中构建高可用性和高性能网络服务的负载均衡工具HAProxy、Nginx和Keepalived。HAProxy是一个高性能的开源TCP和HTTP负载均衡器,适合处理大量并发连接;Nginx是一个多功能Web服务器和反向代理,支持HTTP、HTTPS和TCP负载均衡,同时提供缓存和SSL功能;Keepalived用于监控和故障切换,通过VRRP实现IP热备份,保证服务连续性。文中详细阐述了如何配置这三个工具实现负载均衡,包括安装、配置文件修改和启动服务,为构建可靠的负载均衡系统提供了指导。
153 0
|
12天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解