zl程序教程

您现在的位置是:首页 >  后端

当前栏目

企业级Nginx+keepalived 主备架构笔记参考

架构笔记企业级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上
    在这里插入图片描述
    在这里插入图片描述