Keeppalived 实现Nginx 的高可用集群

一、实验介绍

1、 本实验将通过 Keepalived 来实现 Nginx 的 HA 集群,当集群中的主服务器发生故障后,业务自动切换到备用主机上。
2、实验组网介绍:本实验由三台虚拟机(这里131.19为MASTER 131.20为BACKUP)组成, Nginx1 和 Nginx2 可以和上实验复用,其上运行 Nginx 服务,并通过 Keepalived 虚拟出一台主机供客户端访问。 Nginx1 和 Nginx2 之间通过192.168.131.100 进行心跳监控,并通过浮动 IP 192.168.131.10 对外提供服务,如果其中一台主机出现故障或 Nginx 进程出现故障,业务自动切换到另外一台主机上,具体拓扑如下

二、实验步骤

1、安装keepalived和nginx(在Nginx1和Nginx2上)

复制代码
# 安装keepalived
yum install keepalived -y
# 安装nginx
yum install nginx

2、开启nginx并关闭防火墙、设置标志(两个Nginx都要)

复制代码
echo "web `hostname -I`" > /usr/share/nginx/html/index.html

systemctl start nginx
systemctl stop firewalld

echo "web `hostname -I`" > /usr/share/nginx/html/index.html

该命令的主要功能是将包含主机名和 IP 地址(`hostname -I`" )的特定文本内容写入到 Nginx 服务器的默认网页文件 index.html 中。这样为了方便,当访问该 Nginx 服务器时,就能在浏览器里看到包含主机名和 IP 地址的页面。

3、配置keepalived

复制代码
#对于MSTER-Ningx1

[root@openeuler ~]# cd /etc/keepalived/
[root@openeuler keepalived]# cp keepalived.conf{,.bak}  #拷贝keepalived.onf
[root@openeuler keepalived]# vim keepalived.conf

global_defs {
        routder_id LVS_Master
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.131.100
    }
}
[root@openeuler keepalived]# scp keepalived.conf 192.168.131.20:$PWD #直接将131.19上的keepalived.conf拷贝到131.20上


#BACKUP-Nginx2(131.20)上的配置
[root@openeuler ~]# vim /etc/keepalived/keepalived.conf

global_defs {
        routder_id LVS_Backup
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    virtual_ipaddress {
        192.168.131.100
    }
}

4、启动keepalived(131.19和131.20上)

systemctl start keepalived.service

5、测试在131.10上

正常测试:

当关闭131.19的keepalived--------systemctl stop keepalived.service

三、相关问题

keepalived 的高可用 nginx

q1:没有对nginx 应用做健康检查 ?

期望应用异常时,VIP自动漂移。(可以在日至上看出--tail -f /var/log/messages)

解决方法::编写脚本解决脚本持续监测应用,一旦异常并重后失败,

1、直接在脚本上修改

复制代码
#对于MSTER-Ningx1(131.19)

[root@openeuler ~]# cd /etc/keepalived/
[root@openeuler keepalived]# vim keepalived.conf

global_defs {
        routder_id LVS_Master
}

vrrp_script chk_ngx {
   script "killall -0 nginx"
   interval 1
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

   track_script {
        chk_ngx
   }

    virtual_ipaddress {
        192.168.131.100
    }
}


#BACKUP-Nginx2(131.20)上的配置
[root@openeuler ~]# vim /etc/keepalived/keepalived.conf

global_defs {
        routder_id LVS_Backup
}
vrrp_script chk_ngx {
   script "killall -0 nginx"
   interval 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

   track_script {
        chk_ngx
   }

    virtual_ipaddress {
        192.168.131.100
    }
}

2、重启keepalived

3、在MSATER上killall nginx 出现异常,可以看日志VIP自动飘逸

这时在131.10上测试

相关推荐
It's now14 分钟前
Spring AI 基础开发流程
java·人工智能·后端·spring
cxh_陈14 分钟前
线程的状态,以及和锁有什么关系
java·线程·线程的状态·线程和锁
计算机毕设VX:Fegn089517 分钟前
计算机毕业设计|基于springboot + vue图书商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
R.lin29 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐35 分钟前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎42 分钟前
翻之矩阵中的行
java·算法
火钳游侠1 小时前
java单行注释,多行注释,文档注释
java·开发语言
曼巴UE51 小时前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
wanhengidc1 小时前
云手机的存储空间可以灵活扩展吗?
运维·服务器·科技·智能手机·云计算
code bean1 小时前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存