目录
3.在nginx01和ngixn02 两台主机上安装nginx
4. 在nginx-01和nginx-02安装keepalived
nginx01,ngixn02服务器启动keepalived服务
1.概述
ngixn作为负载均衡器,在架构中,可以利用nginx的反向代理和负载均衡实现后端应用的负载均衡和高可用性,同时我们还需考虑Nginx的单点故障。真正做到架构高可用性。
主要考虑以下几点:
1.ngixn 服务意外现象挂掉
2.服务器宕机导致nginx 不可用
可以采取 keepalived+nginx 实现ngixn的故障转移,同时做好监控报警,排查隐患
keepalived 的 HA(高可用)分为抢占模式和非抢占模式,
抢占模式:当master从故障中恢复后,会将 VIP 从 BACKUP节点中抢占过来,非抢占模式即 master 恢复后不强站BACKUP升级为MASTER后的VIP
2.环境拓扑
两台ngixn,一主一备: 192.168.30. 和 192.168.30.
主机名 | VIP | Ngixn端口 | IP | 备注 |
ngixn01 | 192.168.30.200 | 80 | 192.168.30.10 | 主nginx,反向代理 |
nginx02 | 192.168.30.200 | 80 | 192.168.30.11 | 备ngixn,反向代理 |
分别在两台服务器安装nginx和keepalived
3.在nginx01和ngixn02 两台主机上安装nginx
两天ngixn安装步骤一致
1.rpm 安装nginx
yum -y install wget 安装wget
设置epel 源:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装nginx:
yum -y install nginx
启动nginx服务
systemctl start nginx
设置开机自启:
systemctl enable nginx
4. 在nginx-01和nginx-02安装keepalived
1.解决依赖:
yum -y install gcc openssl-devel pcre-devel libnl-devel
2.安装 keppalived
上传软件包解压:
tar zxf keepalived-2.0.18.tar.gz
cd keepalived-2.0.18/
./configure --prefix=/usr/local/keepalived 指定安装路径
编译和编译安装:
make && make install
keepalived 配置文件 etc/keepalived/keepalived.conf
ngixn02上同样用次方法安装
3.修改keepalived配置文件:
修改nginx01的配置文件
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id nginx01
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #使用脚本的路径
interval 2 #每2秒检测一次nginx的运行状态
weight -20 #失败一次,将自己的优先级-20
}
vrrp_instance nginx {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
!nopreempt #不抢占模式,如果使用抢占模式,只需将其注释即可
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.30.200
}
}
track_script {
chk_nginx #nginx 存活状态检测脚本
}
}
重新启动keepalived:
systemctl restart keepalived
4.配置nginx02主机上的keepalived配置文件
将ngixn01的配置文件cp 过来做修改即可:
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir /etc/keepalived/
scp /etc/keepalived/keepalived.conf root@192.168.30.11:/etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf 修改配置文件
修改以下部分:
router_id nginx-02 #修改唯一Id 标识
state BACKUP #修改状态
priority 90 #修改优先级
5.创建ngixn服务检测脚本
分别在nginx-01和nginx-02服务器的/etc/keepalived
目录下创建nginx_check.sh
脚本,并为其添加执行权限,keppalved定时检测nginx 状态 ,nginx停止运行,会尝试重新nginx,启动失败则将
keepalived进程杀死,将vip票便宜到备用机器上
vim /etc/keepalived/ngixn_check.sh
#!/bin/bash
num=$(ps -C nginx --no-header | wc -l)
if [ $num -eq 0 ];then
systemctl start nginx #尝试重新启动nginx
sleep 1 #睡眠1秒
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];then
killall keepalived #若nginx启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
fi
fi
说明:
-C <指令名称> 选项用来指定程序的名称
--no-header 选项去掉头部
killall命令由软件包 psmisc 提供, 确保两台主机都安装 psmisc
给予执行权限:
chmod +x /etc/keepalived/ngixn_check.sh
nginx01,ngixn02服务器启动keepalived服务
systemctl enable keepalived
systemctl start keepalived
查看vip绑定情况:
主nginx:
备nginx:
测试故障转移
抢占模式
修改nginx配置文件删除某个分号让ngixn无法通过脚本自启,测试脚本
vim /etc/nginx/nginx.conf
重启nginx:
systemctl restart nginx
查看keepalived状态是否自动杀掉:
systemctl status keepalived
killall 自动杀死了keepalived
查看nginx02是否漂移:
VIP漂移成功
在修复nginx,启动nginx,启动keepalived
查看修复好的nginx VIP是否抢占回来
非抢占模式:
和抢占模式的配置相比,只改了两个地方:
1.在vrrp_instance块下,两个节点各增加了nopreempt指令,表示不争抢vip
2. 两个节点的state都为BACKUP
非抢占模式下,两个keepalived节点都启动后,默认都是BACKUP状态,会根据优先级来选举一个MASTER出来,两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip
修改keepalived配置文件配置非抢占模式:
修改nginx01 keepalived 配置文件:
vim /etc/keepalived/keepalived.conf
state BACKUP #修改状态
nopreempt #添加设置不抢占模式
修改nginx02 配置文件
添加:nopreempt
重启主备的keepalived 服务
[root@nginx01 ~]# systemctl restart keepalived
root@nginx02 ~]# systemctl restart keepalived
重复抢占模式的测试来确认是否为抢占模式:
查看vip 是否漂移到nginx02上:
修复nginx01验证非抢占:
修复好重启nginx 、keppalived服务
查看VIP是否是非抢占模式:
可以看到VIP没有切换到原主nginx01,非抢占设置成功。