生产环境nginx集群高可用方案
原创
©著作权归作者所有:来自51CTO博客作者MonkeyKing_sun的原创作品,请联系作者获取转载授权,否则将追究法律责任
搭建架构图
![在这里插入图片描述 生产环境nginx集群高可用方案_nginx](https://s2.51cto.com/images/blog/202210/26095515_635893835af7d19990.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
第一步:安装nginx
1、下载openssl主要用于ssl模块加密,支持htps
wget https://www.openssl.org/source/openssl-1.0.2s.tar.gz
2、下载 pcre来实现地址重定向,地址重写功能和localtion指令以及正则表达式的支持
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
3、下载zlib gzip压缩模块
wget https://zlib.net/zlib-1.2.11.tar.gz
4、下载nginx
wget http://nginx.org/download/nginx-1.17.1.tar.gz
5、使用tar解压多有的文件
ls *.tar.gz | xargs -n1 tar xzvf
6、编译安装
./configure \
--with-openssl=../openssl-1.0.2s \
--with-pcre=../pcre-8.43 \
--with-zlib=../zlib-1.2.11 \
--with-pcre-jit --user=admin \
--prefix=/home/admin/nginx \
--with-http_ssl_module \
--with-http_v2_module
7、编译
8、安装
9、设置权限
10、启动nginx
如果出现以下错误
nginx: [emerg] getpwnam("admin") failed
检查用户组是否存在admin
创建用户组admin和创建用户
/usr/sbin/groupadd -f admin
/usr/sbin/useradd -g admin admin
修改admin的密码,需要输入两次密码:Drxm_24mysql
11、查看nginx是否启动成功
第二步:安装keepalived
1、下载keepalived
wget http://keepalived.org/software/keepalived-2.0.18.tar.gz
2、解压文件
tar -zxvf keepalived-2.0.18.tar.gz -C /usr/local
3、进入keepalived的目录并进行编译
cd /usr/local/keepalived-2.0.18/
./configure --prefix=/usr/local/keepalived/
如果出现这个错误
!!! OpenSSL is not properly installed on your system. !!!
执行此命令,然后在编译
yum -y install openssl-devel
4、进行安装
5、进入keepalived的配置文件,修改配置文件
global_defs {
notification_email {
#mr@mruse.cn # 指定keepalived在发生切换时需要发送email到的对象,一行一个
#sysadmin@firewall.loc
}
notification_email_from xxx@163.com # 指定发件人
smtp_server smtp@163.com # smtp 服务器地址
smtp_connect_timeout 30 # smtp 服务器连接超时时间
router_id LVS_1 # 必填,标识本节点的字符串,通常为hostname,但不一定非得是hostname,故障发生时,邮件通知会用到
}
vrrp_script chk_nginx { #详细看下面
script "/etc/keepalived/tomcat_check.sh" #检测服务shell
interval 2 #每个多长时间探测一次
weight -20 #每个多长时间探测一次
}
_instance VI_1 { # 实例名称
state MASTER # 必填,可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER
interface ens33 # 必填, 节点固有IP(非VIP)的网卡,用来发VRRP包做心跳检测
mcast_src_ip 172.16.1.139 #本机的ip,需要修改
virtual_router_id 101 # 必填,虚拟路由ID,取值在0-255之间,用来区分多个instance的VRRP组播,同一网段内ID不能重复;主备必须为一样;
priority 100 # 必填,用来选举master的,要成为master那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)
advert_int 1 # 必填,检查间隔默认为1秒,即1秒进行一次master选举(可以认为是健康查检时间间隔)
authentication { # 必填,认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)
auth_type PASS # 默认是PASS认证
auth_pass 1111 # PASS认证密码
}
virtual_ipaddress {
172.16.1.100 # 必填,虚拟VIP地址,允许多个
}
track_script { # 检测shell
chk_nginx
}
}
6、修改备用机器的keepalived的机器
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_2
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 146
mcast_src_ip 172.16.1.79
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script{
chk_nginx
}
virtual_ipaddress {
172.16.1.100
}
}
7、编辑chk_nginx脚本
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/home/admin/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
8、设置keepalived服务为开机自启动的服务
systemctl enable keepalived.service
9、启动keepalived服务
10、测试虚拟IP
![在这里插入图片描述 生产环境nginx集群高可用方案_nginx_02](https://s2.51cto.com/images/blog/202210/26095515_635893837f6d367580.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
11、使用vip访问,查看是否可以。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ORHkttj-1599736357339)(C:\Users\user\AppData\Roaming\Typora\typora-user-images\image-20200910191052847.png)] 生产环境nginx集群高可用方案_nginx_03](https://s2.51cto.com/images/blog/202210/26095515_63589383af38699779.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
当访问不通时,说明此方案失败。
注意此方案的前提条件是:服务器必须支持VIP(虚拟IP)