Nginx的HA高可用的搭建

1. 什么是高可用

高可用(High Availability, HA)是一种系统设计策略,旨在确保服务或应用在面对硬件故障、软件缺陷或任何其他异常情况时,仍能持续稳定地运行。它通过实现冗余性、故障转移、负载均衡、数据一致性、监控自动化、预防性维护、灾难恢复计划以及服务级别协议等关键要素,来减少服务中断时间,提升服务的可靠性和稳定性。

2. 高可用的原理 -- keepalived

思考

  1. Nginx如果宕机,导致客户无法访问到项目。--- 搭建Nginx高可用
  2. 如果Nginx主节点宕机,如何才能切换到从节点。 -- 使用keepalived组件

3. 搭建HA高可用

我这边用来两台虚拟机

安装keepalived

yum install -y keepalived

默认安装在/etc/keepalived下

修改keepalived.conf配置文件

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

ip的地址

smtp_ server 192.168.111.188 // 改为自己的ip

smtp_connect_timeout 30

router_id 192.168.111.188 // 改为自己的ip

}

执行脚本

vrrp_script chk_http_port {

script "/usr/local/src/nginx_check.sh"

interval 2 # 每2s执行一次该脚本

weight -20 # keepalive宕机 权重-20 优先级

}

vrrp_instance VI_1 {

state MASTER # 角色

interface ens33 # 网卡名

virtual_router_id 51 # id 保证主从相同

priority 100 # 优先级 主节点大于从节点

advert_int 1

authentication {

auth type PASS

auth pass 1111

}

virtual_ipaddress {

192.168.111.50 # 虚拟ip. 使用逗号隔开

}

track_script {

chk_http_port # 追踪nginx脚本

}

}

从节点

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

ip的地址

smtp_ server 192.168.111.189

smtp_connect_timeout 30

router_id 192.168.111.189

}

执行脚本

vrrp_script chk_http_port {

script "/usr/local/src/nginx_check.sh"

interval 2 # 每2s执行一次该脚本

weight -20 # keepalive宕机 权重-20 优先级

}

vrrp_instance VI_1 {

state BACKUP # 角色

interface ens33 # 网卡名

virtual_router_id 51 # id 保证主从相同

priority 90 # 优先级 主节点大于从节点

advert_int 1

authentication {

auth type PASS

auth pass 1111

}

virtual_ipaddress {

192.168.111.50 # 虚拟ip. 使用逗号隔开

}

track_script {

chk_http_port # 追踪nginx脚本

}

}

nginx_check.sh

#!/bin/bash

检查是否开启nginx---统计nginx进程的个数

A=`ps -C nginx --no-header |wc -l`

if $A -eq 0 ;then

pkill -9 keepalived

fi

注意修改权限

修改权限: chmod 777 nginx_check.sh

启动

nginx
keepalived systemctl start|stop keepalived

4. 演示

现在是用第一台虚拟机进行代理

故意把第一台给宕掉,看看会不会自动切换到第二台

成功!!!

相关推荐
大树881 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz2 小时前
Maven依赖冲突
java·服务器·maven
麦聪聊数据3 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_3 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈3 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
DARLING Zero two♡3 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
程序猿阿伟4 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
曹牧4 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon4 小时前
SQL学习指南——视图
数据库·sql
活宝小娜4 小时前
mysql详细安装教程
数据库·mysql·adb