虚拟化容器,大数据,DBA,中间件,监控。

Keepalived+Nginx部署方案

02 12月
作者:admin|分类:应用管理

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主动关闭,相对应的访问项目不了

浏览421 评论0
返回
目录
返回
首页
docker+Portainer容器化部署nacos+rouyi_cloud+SkyWalking+sentinel docker compose yaml文件详解