在上一篇,我们说到如何使用Nginx配置四层负载均衡。配置不难,容易上手。今天我们来学学怎么搭建
Keepalived+Nginx
实现高可用架构。注意,这里只讲如何搭建,keepalived知识不会过多讲述。环境准备如下:
1. 环境准备
①. 虚拟机两台(centerOS 7)。ip依次为:192.168.25.201
、192.168.25.202
②. keepalived版本:keepalived-2.0.0
③. Nginx版本:nginx-1.16.0
下面开始进入正题~
0x01 Keepalived+Nginx架构图
- 我们来说说上图出现的一些术语
- VIP:虚拟ip。是通过keepalived配置虚拟出来的一个ip。也可以叫做浮动ip。
- keepalived:是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换的软件。
- Keepalived的作用
- 检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,并且可配置发送邮件给相关运维人员,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
- Keepalived的作用
- Nginx:一个高性能的HTTP和反向代理web服务器
- 架构说明:
- 用户通过访问我们虚拟出来的ip地址,请求到我们服务器。然后keepalived会转发该请求到对应的Nginx上。然后Nginx通过upstream配置上游服务器,轮询到每台真实服务器上面。
- 如果主keepalived出现问题,keepalived会自动切换备keepalived,从而达到高可用的目的。
0x02 如何搭建
-
在两台机上安装一些依赖库。
yum install -y libnl*
yum install -y libnfnetlink-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh
-
下载keepalived的安装包
wget https://www.keepalived.org/software/keepalived-2.0.0.tar.gz
- 如果出现
-bash: wget: 未找到命令
.则执行下:yum install -y wget
- 如果出现
-
解压keepalived的安装包
tar -zxf keepalived-2.0.0.tar.gz
-
进入
keepalived-2.0.0
目录,执行./configure
。 -
等命令执行完后,再执行
make && make install
.- 如果提示
-bash: make: 未找到命令
.则执行下yum install -y make
- 如果提示
-
执行完后,输入
whereis keepalived
查找下keealived的安装目录。
-
到此,keepalived已经安装完毕。
-
接下来,我们配置下keepalived。配置文件在
/usr/local/etc/keepalived/keepalived.conf
。主备的配置我都贴出来。- master
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19!Configuration File for keepalived
global_defs {
router_id Nginx_01 #指定节点名
}
vrrp_instance VI_1 {
state MASTER #指定状态。取值有MASTER BACKUP
interface ens33 #绑定VIP的网卡名。可以使用ip a查询
virtual_router_id 51 #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
priority 100 #节点优先级,值范围0~254,MASTER要比BACKUP高
advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
authentication { #配置授权认证信息,主备要一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #配置要虚拟的ip。
192.168.25.100/24 #24是指定子网掩码
}
}
track_script {
chk_nginx # nginx存活状态检测脚本
}keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。 ##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0, ##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。 vrrp_script chk_nginx { script "/usr/local/etc/keepalived/check_nginx.sh" interval 2 #每2秒检测一次nginx的运行状态 weight -20 #失败一次,将自己的优先级-20 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- backup
```shell
! Configuration File for keepalived
global_defs {
router_id Nginx_02 #指定节点名
}
vrrp_instance VI_1 {
state BACKUP #指定状态。备机状态为BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.100/24
}
}
track_script {
chk_nginx
}
vrrp_script chk_nginx {
script "/usr/local/etc/keepalived/check_nginx.sh"
interval 2
weight -20
} - master
-
check_nginx.sh
脚本如下:1
2
3
4
5
6
7
8
9!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
/opt/nginx/sbin/nginx #尝试重新启动nginx
sleep 2 #睡眠2秒
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
fi
fi- 注意修改权限为755
-
在两台机上安装Nginx(这里我就不多说,详见前面几篇)
-
配置Nginx
- 我这里就不启动tomcat了。直接以Nginx自带的静态页面做演示。我在主keepalived机上修改Nginx的静态页面标题为
Welcome to Master Nginx
,修改备keepalived机上的Nginx静态页面为Welcome to Backup Nginx
。直接访问效果如下:- 主
- 备
- 主
- 如果访问不了,则需要关闭下防火墙:
systemctl stop firewalld.service
- 我这里就不启动tomcat了。直接以Nginx自带的静态页面做演示。我在主keepalived机上修改Nginx的静态页面标题为
-
启动keepalived
- 因为我这里没有把keepalived配置为服务,所以我们需要直接使用如下命令启动。我这里的keepalived执行文件路径为
/usr/local/sbin/keepalived
,配置文件路径为:/usr/local/etc/keepalived/keepalived.conf
.所以最终的命令为:cd /usr/local/
sbin/keepalived -f /usr/local/etc/keepalived/keepalived.conf
-f
表示指定keepalived配置文件路径。
- 因为我这里没有把keepalived配置为服务,所以我们需要直接使用如下命令启动。我这里的keepalived执行文件路径为
-
启动keepalived后,我们在主keepalived上执行
ip a
,查看下是否有虚拟ip。结果如下:- 主
- 备
- 我们可以发现,在备机上没有虚拟ip
192.168.25.100
.那么如果我们把主上面的keepalived停掉会怎样呢?答案是虚拟ip会漂移到备机上。效果如下:
- 我们可以发现,在备机上没有虚拟ip
- 主挂了,备机
ip a
的效果。
- 主
-
启动nginx
0x03 效果
- 到此,我们keepalived+Nginx已经搭建好了,我们访问下虚拟ip
192.168.25.100
看看。效果如下:
- 我们把主keepalived(ip尾数为201)的keepalived kill掉。看是否可以继续访问。
- 发现会直接漂移到备机上。这说明我们已经搭建成功了。也达到了预期的效果
0x04 总结
- 通过这篇,我们动手搭建了keepalived+Nginx高可用架构,虽然过程磕磕碰碰,但最终预期效果还是达到了。所以,坚持才是胜利~~
- 参考文章: