我们现在是使用一台nginx,映射到了后台的集群,一共有三台后台服务器,解决了如果后台服务器挂了,还可以访问后台应用。
但是,如果我的Nginx挂了,那你再部署10台,100台后台集群都没有用。因为根本不会有请求会到达tomcat中,让他们处理
这个keepalived就是来解决这个场景的情况的。
我这个默认你已经安装了 Nginx(按照我的步骤来的),不然最后的画面浏览器验证的方式是没用的。而且可能会有依赖的错误(比如 openssl)
首先去官网下载软件,我使用的是 2.0.18的版本
我们可以把它压缩包使用 filezilla 放到 linux 机器的 /usr/software文件夹下。(如果不知道filezilla 是什么或者不知道怎么用,可以看我这篇文章 filezilla )。
使用 tar -zxvf keepalived-2.0.18.tar.gz 将其解压缩。
-
进入 压缩后的文件夹
cd keepalived-2.0.18/,然后输入./configure --prefix=/opt/keepalived --sysconf=/etc- 其中
prefix参数是配置你安装的目录。(我是所有安装的软件都放在/opt/{软件名}下面,你可以根据自己的情况更改) - 正常情况下都会报一个警告
*** WARNING - this build will not support IPVS .... - 我们先安装下这个环境
yum -y install libnl libnl-devel,之后在执行最上面的./configure --prefix=/opt/keepalived --sysconf=/etc - 如果你还报 openssl 什么的错误,那是缺少相应的依赖包,google一下相应的问题就行了(正常情况下是没有的,因为我们安装Nginx的时候已经安装过这个依赖了)
- 其中
-
然后执行安装命令:
make && make install -
然后进入到
/opt/keepalived目录下,这个时候,应该有这三个 文件夹(红线划掉的不是这个步骤的)
-
我们进入
/etc/keepalived,我们的配置文件就放在这个目录下面 -
使用
vim keepalived.conf。或者使用filezilla在外部进行编辑都行 -
正常情况下,这个文件有很多配置,我们不需要那么多,仅仅只用这些
! Configuration File for keepalived global_defs { # 路由id:当前安装keepalive 节点主机的标示符,全局唯一 router_id keep_3 } # 计算机节点 vrrp_instance VI_1 { # 表示的状态,当前Nginx的主节点,MASTER/BACKUP state MASTER # 当前实例绑定的网卡 interface eth0 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重 ,谁的优先级高,MASTER挂掉之后,就能成为主节点 priority 100 # 主备之间同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.211.55.55 } }
我们看上面的配置, 其中
router_id后面的你可以更改。-
interface后面的etho网卡,要根据自己的环境进行设置。使用
ip addr查看自己的 网卡名 -
virtual_router_id这个主备之间一定要设置成一致 -
priority主的一定要比备用的高,不然之后会有问题,主的复活了,可是还是发往备用机。自己可以试验 -
virtual_ipaddress这个是你查看用的虚拟ip(vip)。一定要外部也能访问通。(我之前配置 10.211.5.161访问不通)
- 进入到你的安装目录
cd /opt/keepalived/sbin, - 运行
./keepalived
-
将这个 keepalived 加入Linux 的服务组,
systemctl start keepalived.servicesystemctl stop keepalived.service -
-
可以通过
ps -ef | grep keepalived查看是否启动关闭是否正常
配置备用机和配置主机步骤类似,只需要注意几个点即可
! Configuration File for keepalived
global_defs {
# 路由id:当前安装keepalive 节点主机的标示符,全局唯一
router_id keep_10
}
# 计算机节点
vrrp_instance VI_1 {
# 表示的状态,当前Nginx的主节点,MASTER/BACKUP
state BACKIP
# 当前实例绑定的网卡
interface eth0
# 保证主备节点一致
virtual_router_id 51
# 优先级/权重 ,谁的优先级高,MASTER挂掉之后,就能成为主节点
priority 80
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.211.55.55
}
}
router_id这个无所谓只需要唯一就行,相当于主机名state参数,改成BACKUP- 优先级权重降低(只需要比主机的低就行)
- 其他要和主机保持一致
我们注意ip addr里面的网卡。首先先将 keepalived关闭
然后再开启keepalived,再查看 ip
我们之前配置的 虚拟ip(vip)已经和 本机ip绑定了。说明之前的应该都正常了
输入 vip,地址.比如我的 10.211.55.55。浏览器是否是 nginx的画面
我们将主机的 keepalived停止或者将其关机。
然后他就会自动切换到备用机
上述已经讲了如何配置主备机,但是如果我们的服务仅仅是主机的Nginx挂了,但是其他服务正常会怎么样?
你仍然能访问到主机,vip绑定的也仍然是主机的ip,但其实我们的服务已经不能正常工作了
这个时候我们要么重启Nginx,要么关闭主机的keepalived,让他分发到备用机上
我们在keepalived.conf的同级下新建一个脚本check_nginx_alive_or_not.sh;
cd /etc/keepalivedvim ckeck_ngin_alive_or_not.sh- 添加权限
chmod +x ckeck_ngin_alive_or_not.sh
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断 Nginx是否宕机,如果宕机,尝试重启
if [ $A -eq 0 ];then
/opt/nginxNew/sbin/nginx #这个是你Nginx的启动目录
# 等待一小会儿再次检查Nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
- 先关闭 Nginx
/opt/nginxNew/sbin/nginx -s stop - 然后启动脚本
/etc/keepalived/ckeck_ngin_alive_or_not.sh - 之前的Nginx页面是否还正常
-
编辑
vim /etc/keepalived/keepalived.conf(根据自己的情况更改参数)! Configuration File for keepalived global_defs { # 路由id:当前安装keepalive 节点主机的标示符,全局唯一 router_id keep_3 } vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive_or_not.sh" interval 2 # 每隔两秒运行一次 weight 10 # 如果脚本运行成功,则升级权重+10 } # 计算机节点 vrrp_instance VI_1 { # 表示的状态,当前Nginx的主节点,MASTER/BACKUP state MASTER # 当前实例绑定的网卡 interface eth0 # 保证主备节点一致 virtual_router_id 51 # 优先级/权重 ,谁的优先级高,MASTER挂掉之后,就能成为主节点 priority 100 # 主备之巅同步检查的时间间隔,默认1s advert_int 1 # 认证授权的密码,防止非法节点的进入 authentication { auth_type PASS auth_pass 1111 } # 启动脚本 track_script { check_nginx_alive } virtual_ipaddress { 10.211.55.55 } }
-
重启 keepalived服务.
systemctl restart keepalived -
关闭Nginx服务后,再次查看 Nginx页面,是否正常
- keepalived 启动之后,没有绑定 ip。
- 可能配置出现问题。请认真核查配置,查看我的配置步骤
- 配置之后没有重新启动
- vip绑定,但无法访问到Nginx画面()
- 没有启动 Nginx
- ip 不互通,请使用 ping命令查看能否返回数据。我之前就是这个原因。(然后我修改了第三段ip就能访问了 之前是10.211.5.161)
- 是否设置了防火墙。直接访问 Nginx试试看









