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

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

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

成功!!!

相关推荐
weixin_568996062 分钟前
Golang怎么用K8s Job执行一次性任务_Golang如何用Job资源运行批处理和迁移任务【操作】
jvm·数据库·python
2401_8877245012 分钟前
如何通过JDBC写入BLOB文件_setBinaryStream上传图片与大文件至数据库
jvm·数据库·python
2301_8166602115 分钟前
如何重命名数据表_Operations面板表名修改方法
jvm·数据库·python
weixin_5860614623 分钟前
Navicat导入Excel表格报错怎么跳过_忽略错误记录高级选项
jvm·数据库·python
念何架构之路32 分钟前
图解常见网络I/O复用模型
服务器·网络·php
2301_7735536235 分钟前
golang如何理解编译指示pragma_golang编译指示pragma策略
jvm·数据库·python
qq_3422958236 分钟前
c++字符串运算_连接、比较、输入输出等运算符重载应用
jvm·数据库·python
m0_7467523037 分钟前
如何生成ADDM报告_@addmrpt.sql自动数据库诊断监控工具
jvm·数据库·python
2301_8148098643 分钟前
如何快速查询SQL中的重复记录:GROUP BY与COUNT统计
jvm·数据库·python
m0_6845019843 分钟前
如何配置DG的备库延迟应用_DELAY参数实现在备库防范主库人为误操作逻辑错误
jvm·数据库·python