Keepalived 搭建 Nginx 集群(主从模式)
一、准备两台虚拟机分别安装 nginx 和 keepalived
192.168.141.129
192.168.141.130
1、安装 nginx
https://www.cnblogs.com/xiaomaomao/p/14075164.html
2、安装 keepalived
1 | yum install keepalived –y |
安装完成之后,默认在 etc 里面生成 keepalived 目录,该目录下存在配置文件 keepalived.conf
二、修改 keepalived.conf 配置文件
主服务器和从服务器只有两个地方不一样,两个不一样的配置都在 vrrp_instance VI_1 中
state: 主服务器的值是 MASTER ,副本服务器的值是 BACKUP
priority: 主服务器的值比副本服务器的值大即可(例如:主服务器设置为 100,副本服务器设置为 80)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | global_defs { notification_email { # keepalived 服务器宕机异常出现的时候,发送通知邮件,可以配置多个邮箱地址 1412556053 @qq .com # 收件人邮箱 1 # ***@**.com # 收件人邮箱 2 } notification_email_from 1412556053 @qq .com # 邮箱发件人 smtp_server stmp.qq.com # 邮箱服务器地址 smtp_connect_timeout 30 # 超时时间 router_id LVS_DEVEL # 路由 id vrrp_skip_check_adv_addr # 默认不跳过检查 # vrrp_strict # 这个东西要注释掉,这个东西要注释掉,这个东西要注释掉... vrrp_gna_interval 0 # 单位秒,在一个网卡上每组消息之间的延迟时间,默认为 0 script_user root enable_script_security } vrrp_script chk_haproxy{ script "/etc/keepalived/chk_nginx.sh" # keepalived 监测 nginx 的监本路径和名称 interval 2 weight 2 } # vrrp 实例,我们集群设置,多机配置,除了 state 和 priority 不一样之外,其它的配置都是一样的 # 主实例 state 为 MASTER , priority 的值高于副本实例的值 # 副本实例 state 为 BACKUP , priority 的值低于主实例的值 vrrp_instance VI_1 { state BACKUP # 服务器状态,MASTER 代表主服务器, BACKUP 是备份服务器 interface ens33 # 通信端口,通过 ifconfig 命令可以看到,根据自己的机器配置 virtual_router_id 51 # 虚拟路由 ID ,主实例和副本实例保持一致 priority 80 # 权重比,主服务器的 priority 比副本服务器大即可 advert_int 1 # 心跳间隔,单位秒, keepalived 多机器集群通过心跳检测,如果发送心跳没反应,就立刻接管 authentication { # 服务器之间的通信密码 auth_type PASS auth_pass 1111 } track_script { # keepalived 的监测脚本,与 vrrp_script 定义的名称一致 chk_haproxy } virtual_ipaddress { # 自定义虚拟 ip ,可以配置多个,每行一个 192.168 . 141.132 } } |
三、编写 keepalived 监测 nginx 的脚本
我们在 keepalived.conf 中 vrrp_script chk_haproxy 配置的监测脚本路径和名称如下: /etc/keepalived/chk_nginx.sh
所以我们需要在 /etc/keepalived 目录下新建一个 chk_nginx.sh 的脚本文件,文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/bin/bash # nginx 挂掉之后, keepalived 重新启动 nginx ,若不能启动 则关闭当前 keepalived status=`ps -ef|grep -w nginx|grep -v grep|wc -l` echo ${status} if [ ${status} -eq 0 ]; then systemctl start nginx.service sleep 2 status2=`ps -ef|grep -w nginx|grep -v grep|wc -l` echo ${status2} if [ ${status2} -eq 0 ]; then systemctl stop keepalived.service fi fi |
然后运行 chmod +x chk_nginx.sh 命令为脚本文件添加可执行权限
1 | chmod +x chk_nginx.sh |
四、启动 nginx 和 keepalived
分别启动两台服务器上的 nginx 和 keepalived
1 2 3 4 5 6 7 8 9 10 11 | // 启动 nginx ./nginx // 启动 keepalived systemctl start keepalived.service // 查看 nginx 是否成功启动 ps -ef | grep nginx // 查看 keepalived 是否成功启动 ps -ef | grep keepalived |
五、测试
配置信息如下
主服务器: 192.168.14.129
从服务器: 192.168.14.130
虚拟 IP: 192.168.14.132
1、浏览器访问 192.168.14.132
2、关闭主机 192.168.141.129 上的 nginx 和 keepalived ,再次访问虚拟 IP ,发现可以正常访问,并且访问的是从机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?