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. 演示

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

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

成功!!!

相关推荐
半摆烂日常27 分钟前
自建WMS和买成品:三年成本对比
大数据·服务器·数据库·python·深度学习·低代码·numpy
风123456789~34 分钟前
【架构专栏】第6章 数据库设计基础知识 1/4
数据库·架构
Nturmoils37 分钟前
异构数据同步不只追延迟:用 KFS 守住不停机迁移的每一笔账
数据库
星星落进兜里42 分钟前
Redis 内存缓存,面试补充
数据库·redis·面试
宋军涛1 小时前
Windows 操作系统【任务计划程序】简单使用
服务器·windows
蒸蒸yyyyzwd1 小时前
cpp 选手秋招学习笔记 day27
服务器·c++·面试·八股
棣廷1 小时前
初识MySQL——DQL数据查询语言详解
数据库·mysql
大模型码小白1 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
天涯柳絮2 小时前
SQL注入
数据库·sql·网络安全
青瓦梦滋2 小时前
NAT技术
linux·服务器·网络·网络协议·tcp/ip