历史版本1 :Keepalived+Nginx部署方案 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 前言编辑

Nginx 可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的 Web 服务器,能够水平扩容,从而处理更多的用户请求,但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合 Web 服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。

而 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 Web 前端服务的高可用。

2. 方案规划编辑

VIPIP主机名nginx端口默认主从系统版本
192.168.1.77192.168.1.100pp180MASTERCentOS 7.3.1611
192.168.1.77192.168.1.65pp280BACKUPCentOS 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 指定安装的目录,编译过程一般都不太顺利,会报各种各样的错误,基本上都是缺少编译环境问题。

image2019-8-4_20-12-9.png

可以看到缺少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主动关闭,相对应的访问项目不了