企业级Nginx+keepalived 主备架构笔记参考
2023-09-14 09:15:28 时间
Nginx 反向代理服务器(负载均衡)一般位于整个互联网网站架构的入口,一台 Nginx 存在单点故障,如果宕机,会影响整个网站的访问,可以加入 Nginx 备份服务器,两者之间形成高可用,一般架构如下:
架构说明
- 两台反向代理服务器均编译安装最新版本的 nginx 和 keepalived以及用于检测心跳的脚本
- 192.168.137.14作为master,192.168.137.15作为backup
- 环境均为centos7.9最小化安装,能够连通外网,并配置阿里云的yum源
编译安装 nginx
# 下载最新的源码包
wget http://nginx.org/download/nginx-1.22.0.tar.gz
# 解压
tar -xf nginx-1.22.0.tar.gz
# 安装依赖
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
# 进入源码目录
cd nginx-1.22.0
# 编译(按实际情况进行参数调整即可)
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
# 安装
make && make install
# 启动nginx(按实际编译配置后的文件目录找到启动文件)
/usr/sbin/nginx
# 防火墙开放80端口(企业安全考虑,服务器自带的防火墙需要开启)
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 分别对反向代理服务器修改配置文件,让两者默认的访问有所区别
# 这里只是简单区分了一下反向代理服务器,真实企业环境下,作为反向代理服务器,还需要配置各种,来实现反向代理到后端服务器,视实际企业情况而定
编译安装 keepalived
# 下载最新安装包(--no-check-certificate 可以不安全的方式连接下载,因为颁发的证书已经过期)
wget --no-check-certificate https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
# 解压
tar -xf keepalived-2.2.7.tar.gz
# 进入目录
cd keepalived-2.2.7
# 安装依赖
yum install -y libnl3-devel.x86_64
# 编译
./configure
# 安装
make && make install
# 编译后的主要目录
/usr/local/etc/keepalived
/usr/local/sbin/keepalived
配置keepalived
# 进入配置文件
cd /usr/local/etc/keepalived
# 新增并编辑keepalived.conf
vi keepalived.conf
########master内容如下
! Configuration File for keepalived
global_defs {
router_id TEST_HA
}
vrrp_script chk_80 {
script "/usr/local/etc/keepalived/chk_status.sh"
interval 5
weight -3
}
vrrp_instance VI_1 {
interface ens32 #ens32修改为节点通信的网卡
state MASTER #主节点配置为MASTER,其他节点配置为BACKUP
priority 101 #主节点配置为101,另外两台节点配置为100和99 98...
virtual_router_id 71
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
ens32 #修改为节点通信的网卡
}
virtual_ipaddress {
192.168.137.99/32 #修改为VIP地址,32位掩码不变
}
track_script {
chk_80
}
}
####### backup内容如下
! Configuration File for keepalived
global_defs {
router_id TEST_HA
}
vrrp_script chk_80 {
script "/usr/local/etc/keepalived/chk_status.sh"
interval 5
weight -3
}
vrrp_instance VI_1 {
interface ens32 #ens32修改为节点通信的网卡
state BACKUP #主节点配置为MASTER,其他节点配置为BACKUP
priority 100 #主节点配置为101,另外节点配置为100/99/98...
virtual_router_id 71
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
ens32 #修改为节点通信的网卡
}
virtual_ipaddress {
192.168.137.99/32 #修改为VIP地址,32位掩码不变
}
track_script {
chk_80
}
}
# 配置健康检查脚本(vi /usr/local/etc/keepalived/chk_status.sh) 这里演示80端口,企业实际情况可按需修改
#!/bin/bash
curl -s -L -k -i http://localhost|grep "200 OK" > /dev/null
if [ $? -eq 0 ]; then
exit 0
else
exit 1
fi
# 脚本执行权限
chmod +x /usr/local/etc/keepalived/chk_status.sh
# 防火墙开放VRRP协议(企业安全考虑,服务器自带的防火墙需要开启)
firewall-cmd --permanent --add-protocol=vrrp
firewall-cmd --reload
# 启动服务
/usr/local/sbin/keepalived
访问验证
- 通过浏览器访问VIP地址:192.168.137.99,正常得到的结果应该是192.168.137.14服务器的页面返回
- 测试高可用特性,手动关闭反向代理服务器1的nginx进程,再看返回信息:由反向代理服务器2接手了master,日志也显示丢掉了有故障nginx的服务器
- 再开启反向代理服务器1的nginx服务,观察:master重新回到反向代理服务器1上
相关文章
- 下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
- 微服务架构实践 - 你只懂docker与spring boot就够了吗?
- 微服务架构的分布式事务解决方案
- 【从0开始学架构笔记】55放学别走4:架构师成长之路
- CQRS架构学习笔记
- 机器学习笔记 - 基于最简单的编码器/解码器架构SegNet进行语义分割
- 【云原生 | Kubernetes 系列】Kubernetes架构
- [FAQ] PHP+Nginx 架构网站 502 和 504 问题
- 联想高级架构师分享:架构之道-规划、简化和演化
- Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案
- Atitit.收银系统模块架构attilax 总结
- SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构
- DL之MobileNetV2:MobileNetV2算法的架构详解(包括ReLu的意义)
- AI之FL:联邦学习(Federated Learning,分布式机器学习技术)的简介(背景/思想/特点/优势/未来展望/发展史)、系统及其架构、场景应用之详细攻略
- 眼见为实,华为鲲鹏架构服务器生态大揭秘
- AIOps产品与架构浅析
- 云享专家倪升武:微服务架构盛行的时代,你需要了解点 Spring Boot
- 【人工智能 AI 写书】第二章 架构分析 -《卓越架构师修炼之道》
- 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )
- cycleGAN的整体架构+损失函数理解
- Docker学习笔记01:docker简介与架构
- 【硬件架构的艺术】学习笔记(3)处理多个时钟
- 【硬件架构的艺术】学习笔记(2)同步和复位