Keepalived+Nginx部署方案
1. 前言
Nginx 可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的 Web 服务器,能够水平扩容,从而处理更多的用户请求,但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合 Web 服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。
而 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 Web 前端服务的高可用。
2. 方案规划
VIP | IP | 主机名 | nginx端口 | 默认主从 | 系统版本 |
---|---|---|---|---|---|
192.168.1.77 | 192.168.1.100 | pp1 | 80 | MASTER | CentOS 7.3.1611 |
192.168.1.77 | 192.168.1.65 | pp2 | 80 | BACKUP | CentOS 7.3.1611 |
3. 安装 Nginx
大家可以参考:Linux 系统安装配置 Nginx
来给需要的服务器都安装并配置好 Nginx
4. 安装 Keepalived
4.1 在线安装 Keepalived
执行命令:
yum -y install keepalived
4.2 离线安装 Keepalived
4.2.1 下载安装包
访问网址:https://www.keepalived.org/download.html 并下载 Keepalived 的安装包。
4.2.2 解压安装
tar -zxvf keepalived-2.0.18.tar.gz # 解压
cd keepalived-2.0.18/
./configure --prefix=/usr/local/keepalived # 编译
make && make install # 安装
4.2.3 安装过程可能出现的问题
prefix 指定安装的目录,编译过程一般都不太顺利,会报各种各样的错误,基本上都是缺少编译环境问题。
可以看到缺少openssl,按照 Linux 系统安装配置 Nginx 中的方法安装 openssl 即可。
4.3 将 Keepalived 安装成 Linux 系统服务
因为没有使用 Keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作复制默认配置文件到默认路径。
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置 keepalived 服务开机启动
chkconfig keepalived on
4.4 修改 Keepalived 的配置文件
路径为/etc/keepalived/keepalived.conf
4.4.1 MASTER 节点配置文件
! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
router_id pp1 ## 标识本节点的字条串,通常为 hostname
}
## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 ens33
virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 192.168.1.100 ## 本机 IP 地址
priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
} #
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
192.168.1.77 ## 虚拟 ip,可以定义多个
}
}
4.4.2 BACKUP 节点配置文件
! Configuration File for keepalived
global_defs {
router_id pp2
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 33
mcast_src_ip 192.168.1.65
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.1.77
}
}
需要注意的配置说明:
1)router_id pp1 ## 标识本节点的字条串,通常为 hostname
2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
3)state MASTER/BACKUP ##说明主备
4)interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 ens33
5)mcast_src_ip 192.168.1.100 ## 本机 IP 地址
6)priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
7)virtual_ipaddress ##虚拟 ip,即VIP,可以定义多个
5. 编写nginx状态启动脚本
编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 Keepalived.conf 中配置)脚本要求。
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
赋予文件权限:chmod +x /etc/keepalived/nginx_check.sh
6.启动 Keepalived
systemctl start keepalived
7. 测试
1)同时启动两台服务器,测试keepalive master主服务器是否拥有VIP虚拟IP
预期结果:
a.主master服务器拥有VIP
b.能够通过VIP访问相应的nginx及下面相应的文件
2)关闭keepalive master 主服务器的nginx ,查询是否会通过脚本关闭keepalive并释放VIP
预期结果:
a.nginx关闭,keepalive根据脚本自动关闭,通过相对于端口也无法访问
3)启动 keepalive master 主服务器,查询VIP的拥有情况
预期结果:
a.master 主服务器抢占VIP,因为权重的配置比BACKUP的大
4)同时关闭两台服务器的nginx,测试访问情况
预期结果:
a.相应的端口关闭,keepalive主动关闭,相对应的访问项目不了
目录 返回
首页