TypechoJoeTheme

王子博客

用户名
密码
用户名
邮箱

利用nginx+keepalived实现高可用

王子博主
2022-10-11
/
0 评论
/
117 阅读
/
1152 个字
/
百度已收录
10/11
本文最后更新于2023年07月20日,已超过219天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

最近在离线环境下做 nginx+keepalived 实现高可用的负载均衡,离线环境下安装真的是十分费劲。以下就以国产麒麟为例安装 keepalived-2.2.7 + nginx1.23.1。

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

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

  1. 方案规划
    注:VIP 为虚拟 IP ,不被占用前提下可自定义。
VIP服务器 IP主机名nginx 端口默认主从
192.168.5.200192.168.5.249ethan380MASTER
192.168.5.200192.168.5.103localhost.localdomain80BACKUP
  1. 外网用户方案
    3.1 安装 Nginx

两个服务器上安装配置 Nginx 。具体步骤请参见:Linux系统安装配置Nginx

3.2 安装 Keepalived
两个服务器上安装 Keepalived 。

执行命令:

yum -y install keepalived
3.3 设置 keepalived 服务开机启动
两个服务器都需要执行下面语句。语句如下所示:

chkconfig keepalived on
4.png

3.4 修改 Keepalived 的配置文件
路径为/etc/keepalived/keepalived.conf

3.4.1 MASTER 节点配置文件

! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
 router_id ethan3 ## 标识本节点的字条串,通常为 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 eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。
 virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
 mcast_src_ip 192.168.5.249 ## 本机 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.5.200 ## 虚拟 ip,可以定义多个
 }
}

3.4.2 BACKUP 节点配置文件

! Configuration File for keepalived
global_defs {
 router_id localhost.localdomain
}
vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh"
 interval 2
 weight -20
}
vrrp_instance VI_1 {
 state BACKUP
 interface ens192
 virtual_router_id 33
 mcast_src_ip 192.168.5.103
 priority 90
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  192.168.5.200
 }
}

需要注意的配置说明:

1)router_id ethan3 ## 标识本节点的字条串,通常为 hostname 。

在服务器中使用语句hostname可得出。如下图所示:

1641974851329444.png

2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径,无需修改,参考本文 3.5 节。

3)state MASTER/BACKUP ##说明主备。

4)interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。

使用ip a可得出。如下图所示:

注:主节点配置文件中该值为主节点网卡号;备节点配置文件中该值为备节点网卡号。

1641974942332551.png

5)mcast_src_ip 192.168.5.249 ## 本机 IP 地址。

6)priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高。

7)virtual_ipaddress ##虚拟 ip,即VIP,可自定义,可定义多个。

3.5 编写 Nginx 状态启动脚本
两个服务器上都需要编写下面文件,根据实际情况修改 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

3.6 启动 Keepalived
两个服务器都执行下面语句:

systemctl start keepalived
3.7 效果查看
注:节点上有虚拟 IP 时,可通过虚拟 IP 访问相应的 nginx 及下面相应的文件。

1)使用ip addr语句,可以看到虚拟 IP 192.168.5.200 绑定在了 MASTER 服务器上面。如下图所示:

1641973992565967.png

而 BACKUP 节点上没有虚拟 IP 。如下图所示:

1641974146900091.png

2)使用systemctl stop keepalived停掉主节点的 keepalived 服务,备节点上有虚拟 IP 。如下图所示:

1641974581124305.png

  1. 内网用户方案
    4.1 步骤说明

内网用户无法在线安装 Keepalived ,与外网用户方案不同点在于 3.2 节,其他步骤相同。

4.2 离线安装 Keepalived
两个服务器都需要做下面步骤。

4.2.1 安装步骤
1)下载安装包。访问网址:https://www.keepalived.org/download.html 并下载 Keepalived 的安装包。

2)解压安装。

将安装包上传到服务器某个文件夹下(文档示例为:/wendy),进入安装包所在文件夹后,进行下面操作:

cd /wendy
tar -zxvf keepalived-2.0.18.tar.gz # 解压
cd /wendy/keepalived-2.0.18 # 路径根据实际情况修改
./configure --prefix=/usr/local/keepalived # 编译
make && make install # 安装
4.2.2 将 Keepalived 安装成 Linux 系统服务
1)复制keepalived.conf文件到/etc/keepalived/下。

mkdir /etc/keepalived
cp /wendy/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

朗读
赞(0)
版权属于:

王子博客

本文链接:

http://serv.blackboard.com.cn/index.php/archives/259/(转载时请注明本文出处及文章链接)

评论 (0)