目录
一、环境:
二、文件的配置
1、server1
下载keepalived
创建etc下的keepalived目录,编辑配置文件
开机启动keepalived
安装Nginx
启动keepalived
2、server2
下载keepalived
创建etc下的keepalived目录,编辑配置文件
开机启动keepalived
安装Nginx
启动keepalived
三、测试
访问VIP(对外虚拟ip)http://192.168.229.110
拔掉master(server1)的网线。
四、关于keepalived对nginx状态未知的问题
添加nginx监控脚本
赋予脚本权限
启动监控脚本
重启keepalived
nginx状态测试
一、环境:
初识keepalived,实现web服务器的高可用集群。
准备两台虚拟机
Server1: 192.168.229.11
Server2: 192.168.229.12
关闭防火墙、selinux,配置yum源 等步骤请参考:
关闭防火墙,selinux,配置源
二、文件的配置
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,当前主机的ipvirtual_router_id 55 #虚拟路由编号,主备要一致。同学们注意区分priority 100 #优先级 数值越大优先级越高advert_int 1 #心跳间隔 单位是秒authentication { #秘钥认证(1-8位)auth_type PASSauth_pass 123456}virtual_ipaddress { #VIP 虚拟ip192.168.229.100/24}# track_script { #引用脚本
# chk_nginx
# }}
开机启动keepalived
systemctl enable keepalived.service
安装Nginx
yum -y install nginxsystemctl 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 BACKUPinterface ens33mcast_src_ip 192.168.229.12virtual_router_id 55priority 99advert_int 1authentication {auth_type PASSauth_pass 123456}virtual_ipaddress {192.168.229.100/24}# track_script {
# chk_nginx
# }}
开机启动keepalived
systemctl enable keepalived.service
安装Nginx
yum -y install nginxsystemctl 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 nginxsleep 5counter=$(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的语句,测试时可以将脚本文件位置进行改变。观察脚本的效果即可。