Nginx — 高可用部署(Keepalived+Nginx)
Keepalived+Nginx高可用简介
Nginx 高可用部署通常借助 Keepalived 实现,Keepalived 能通过 VRRP(虚拟路由冗余协议)让多个 Nginx 服务器组成一个热备集群,当主服务器故障时自动切换到备用服务器,保障服务不间断。
一、环境准备
角色 | IP地址 |
主服务器(Master) | 192.168.179.130 |
备用服务器(Backup) | 192.168.179.131 |
虚拟 IP(VIP) | 192.168.179.135 |
Keepalived版本 | 1.4.5 |
二、安装Keepalived服务
1、在节点Master上安装Keepalived
#步骤一:安装编译需要的软件包
[root@master ~]# yum install -y pcre-devel openssl-devel popt-devel #安装依赖包
#步骤二:安装keepalived服务
tar -zxvf keepalived-1.4.5.tar.gz
cd keepalived-1.4.5/ && ./configure --prefix=/opt/sumscope/keepalived --sysconf=/etc
make && make install
cp /opt/sumscope/keepalived-1.4.5/keepalived/etc/init.d/keepalived /etc/init.d/
chkconfig --add keepalived
chkconfig keepalived on
cp /opt/sumscope/keepalived-1.4.5/keepalived/keepalived /usr/sbin/
#步骤三:配置keepalived配置文件
########################################################配置文件###############################################
[root@master ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id keep1; #keep1是本节点的标识,一般为hostname
script_user root #使用root执行
enable_script_security
}
vrrp_script check_mysql {
script "/etc/keepalived/check_nginx.sh"
#检测Nginx状态的脚本路径
interval 2 #检测间隔时间
weight -20 #如果如果上述条件成立权重-20
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state MASTER #主节点为MASTER,从节点为BACKUP
interface ens33 #本机网卡名称
virtual_router_id 100 #虚拟路由的ID号,两个节点设置的参数必须一样,相同的VRID为一组,它将决定多播的地址。
mcast_src_ip 192.168.179.130 #本机的IP地址
priority 100 #节点的优先级(0~254之间),MASTER比BACKUP高
nopreempt #优先级设置,异常恢复后再次抢占的问题。
advert_int 1 #组播信息发送间隔,两个的参数必须一样,默认为1s。
authentication {
auth_type PASS
auth_pass p #按照实际生产的需求来(一般为root密码)
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.179.135 #虚拟IP地址,两台主机的必须一致。
}
}
########################################################配置文件###############################################
#步骤四:配置keepalived检测脚本内容
########################################################Nginx检测脚本内容###############################################
[root@master ~]# vim /etc/keepalived/check_nginx.sh #检测Nginx服务断开就杀掉keepalived进程,使VIP漂移
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep ":443 "|wc -l)
if [ "${counter}" -eq 0 ]; then
service nginx stop
fi
########################################################Nginx检测脚本内容###############################################
#步骤五:对检测脚本添加执行权限、启动keepalived服务
[root@master ~]# chmod +x /etc/keepalived/check_nginx.sh
[root@master ~]# /etc/init.d/keepalived start
2、在节点Backup上安装Keepalived
安装方法与Master上的安装方法一致,但是配置文件需要修改
#步骤一:配置keepalived配置文件
########################################################配置文件###############################################
[root@slave ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id keep2;
script_user root
enable_script_security
}
vrrp_script check_mysql {
script "/etc/keepalived/check_nginx.sh" #检测脚本所在的位置
interval 2
weight -20
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP #修改状态名称
interface ens33 #修改网卡名称
virtual_router_id 100
mcast_src_ip 192.168.179.131 #自己的IP地址
priority 80 #作为备节点权重要比主节点小
advert_int 1
authentication {
auth_type PASS
auth_pass p
}
track_script {
check_mysql
}
virtual_ipaddress {
192.168.179.135 #虚拟IP地址
}
}
########################################################配置文件###############################################
#步骤二:配置keepalived检测脚本内容用于检测Nginx的状态
########################################################Nginx检测脚本内容###############################################
[root@master ~]# vim /etc/keepalived/check_nginx.sh #检测Nginx服务断开就杀掉keepalived进程,使VIP漂移
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep ":443 "|wc -l)
if [ "${counter}" -eq 0 ]; then
service nginx stop
fi
########################################################Nginx检测脚本内容###############################################
#步骤三:对检测脚本添加执行权限、启动keepalived服务
[root@master ~]# chmod +x /etc/keepalived/check_nginx.sh
[root@master ~]# /etc/init.d/keepalived start
注意:因为keepalived中配置Nginx状态检测脚本,keepalived在启动时会执行检测脚本,所以等Nginx服务启动成功后再启动keepalived服务,否则服务将无法启动keepalived。
3、启动keepalived服务验证VIP是挂起
三、安装Nginx
详见上篇文章:Nginx — Nginx安装-CSDN博客
四:测试
1、配置nginx访问不同的主机返回不同的结果
配置如下:配置https访问
当虚拟IP在MASTER主机上时访问nginx的8888端口返回:MASTER
当虚拟IP在BACKUP主机上时访问nginx的8888端口返回:BACKUP
2、浏览器上进行访问测试
浏览器输入: https://192.168.72.135:8888/
2.1、正常情况下访问虚拟IP返回的结果
2.2、模拟主节点故障
2.2.1、在主节点和备节点上观察VIP漂移的情况
2.2.2、浏览器访问看是否实现了故障自动迁移
访问VIP已经成功访问到备节点的资源!!