目录
访问VIP(对外虚拟ip)http://192.168.229.110
一、环境:
初识keepalived,实现web服务器的高可用集群。
准备两台虚拟机
Server1: 192.168.229.11
Server2: 192.168.229.12
关闭防火墙、selinux,配置yum源 等步骤请参考:
二、文件的配置
1、server1
下载keepalived
yum -y install keepalived
创建etc下的keepalived目录,编辑配置文件
vim /etc/keepalived/keepalived.conf
配置文件示例:
! Configuration File for keepalived
global_defs {
router_id 1 #设备在组中的标识,设置不一样即可
}
#vrrp_script chk_nginx { #健康检查
# script "/etc/keepalived/ck_ng.sh" #检查脚本
# interval 2 #检查频率.秒
# weight -5 #priority减5
# fall 3 #失败三次
# }
#高可用集群的组员设置
vrrp_instance VI_1 { #VI_1。实例名两台路由器相同。同学们要注意区分。
state MASTER #主或者从状态
interface ens33 #监控网卡
mcast_src_ip 192.168.229.11 #心跳源IP,当前主机的ip
virtual_router_id 55 #虚拟路由编号,主备要一致。同学们注意区分
priority 100 #优先级 数值越大优先级越高
advert_int 1 #心跳间隔 单位是秒
authentication { #秘钥认证(1-8位)
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { #VIP 虚拟ip
192.168.229.100/24
}
# track_script { #引用脚本
# chk_nginx
# }
}
开机启动keepalived
systemctl enable keepalived.service
安装Nginx
yum -y install nginx
systemctl enable nginx.service #开机自启动
systemctl start nginx.service #开启
修改一下nginx默认页面内容,方便更直观的感受高可用性,内容可以web111111为例
vim /usr/share/nginx/html/index.html
启动keepalived
systemctl start keepalived.service
使用 ip a 命令查看
2、server2
下载keepalived
yum -y install keepalived
创建etc下的keepalived目录,编辑配置文件
vim /etc/keepalived/keepalived.conf
配置文件示例:
BACKUP服务器的配置需要几处修改
state MASTER改为 state BACKUP
mcast_src_ip 192.168.229.11改为backup服务器实际的IP mcast_src_ip 192.168.229.12
priority 100改为priority 99
! Configuration File for keepalived
global_defs {
router_id 2
}
#vrrp_script chk_nginx {
# script "/etc/keepalived/ck_ng.sh"
# interval 2
# weight -5
# fall 3
# }
vrrp_instance VI_1 {
state BACKUP
interface ens33
mcast_src_ip 192.168.229.12
virtual_router_id 55
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.229.100/24
}
# track_script {
# chk_nginx
# }
}
开机启动keepalived
systemctl enable keepalived.service
安装Nginx
yum -y install nginx
systemctl enable nginx.service #开机自启动
systemctl start nginx.service #开启
修改一下nginx默认页面内容,方便更直观的感受高可用性,内容可以web22222为例
vim /usr/share/nginx/html/index.html
启动keepalived
systemctl start keepalived.service
使用 ip a 命令查看
在此对比可发现,在server1主服务器中可以看到192.168.229.100这个对外虚拟ip,而在server2从服务器中看不到192.168.229.100这个对外虚拟ip,这是因为
1.server1
拥有虚拟 IP,因为它是主服务器。
2.server2
不拥有虚拟 IP,因为它是备用状态。
这种设计保证了服务的连续性和高可用性。
三、测试
访问VIP(对外虚拟ip)http://192.168.229.110
拔掉master(server1)的网线。
访问VIP(对外虚拟ip)http://192.168.229.110,观察网页已经切换
再查看一下server2的ip,发现对外虚拟ip已切换
四、关于keepalived对nginx状态未知的问题
关闭master的nginx服务 。systemctl stop nginx 继续访问VIP,就会出现错误,不能够切换到从服务器上,原因是keepalived监控的是接口IP状态。无法监控nginx服务状态,因此需要编辑一个脚本监控nginx的状态。
添加nginx监控脚本
server1和server2一样都添加nginx脚本
vim /etc/keepalived/ck_ng.sh
脚本内容示例:
#!/bin/bash
#检查nginx进程是否存在
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#尝试启动一次nginx,停止5秒后再次检测
systemctl start nginx
sleep 5
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
#如果启动没成功,就杀掉keepalive触发主备切换
systemctl stop keepalived
fi
fi
赋予脚本权限
chmod +x /etc/keepalived/ck_ng.sh
启动监控脚本
清除掉配置文件中的注释
vim /etc/keepalived/keepalived.conf
重启keepalived
systemctl restart keepalived.service
nginx状态测试
因为脚本中有拉起nginx的语句,测试时可以将脚本文件位置进行改变。观察脚本的效果即可。