keepalived+nginx不抢占模式

关闭防火墙selinux
1,在主机A上安装keepalived,备份配置文件

[root@ c7-41 ~] yum -y install keepalived
[root@ c7-41 ~] cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.ba #备份文件

2,修改配置文件

[rooot@ c7-41 ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id 10.0.0.41       #运行keepalived的机器的一个标识,这里设置的是本机ip
   script_user root
   enable_script_security
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_port.sh 80" #这里通过脚本监测
    interval 2              #脚本执行间隔,每2s检测一次
    weight -30 				#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 
}
vrrp_instance VI_1 { 		#keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
    state BACKUP 			#指定keepalived的角色
    interface ens33 		#指定监测网络的接口
    virtual_router_id 51 	#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,双机必须是一致的
    priority 100  			#定义优先级,数字越大,优先级越高
    mcast_src_ip 10.0.0.41 	# 发送多播数据包时的源IP地址
    nopreempt 				#不抢占
    advert_int 1 			#指定负载均衡器之间同步检查的时间间隔,单位是秒
    authentication { 		#设置验证类型和密码。双机必须一样
        auth_type PASS  	#设置vrrp验证类型,主要有PASS和AH两种
        auth_pass 1111 		#设置vrrp验证密码,双机必须一样
    }
    track_script { 			#执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
        chk_nginx  			#引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    }
    virtual_ipaddress { 	#VRRP HA 虚拟地址
        10.0.0.200
    }
}   

3,编写nginx检测脚本

[root@ c7-41 ~] vim /etc/keepalived/check_port.sh
#!/bin/bash
CHK_PORT=$1
if [ -n "$CHK_PORT" ];then
        PORT_PROCESS=`ss -lntp|grep $CHK_PORT|wc -l`
        if [ $PORT_PROCESS -eq 0 ];then
                echo "Port $CHK_PORT Is Not Used,End."
                systemctl stop keepalived.service
        fi
else
        echo "Check Port Cant Be Empty!"
fi
[root@ c7-41 ~] chmod +x /etc/keepalived/check_port.sh #添加权限

4,修改keepalived启动脚本,并启动keepalived

[root@ c7-41 ~] sed -i 's/KillMode/#&/' /usr/lib/systemd/system/keepalived.service
[root@ c7-41 ~] systemctl daemon-reload
[root@ c7-41 ~] systemctl enable keepalived.service #添加开机自启
[root@ c7-41 ~] systemctl start keepalived.service #启动

在主机A上安装nginx并启动

[root@ c7-41 ~] yum -y install epel-release #如果安装不了nginx,请先安装epel
[root@ c7-41 ~] yum -y install nginx
[root@ c7-41 ~] systemctl start nginx.service

5,在主机B上安装keepalived,备份配置文件

[root@ c7-42 ~] yum -y install keepalived
[root@ c7-42 ~] cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份文件

6,修改配置文件

[rooot@ c7-42 ~] vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id 10.0.0.42 		#运行keepalived的机器的一个标识,这里设置的是本机ip
   script_user root
   enable_script_security
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_port.sh 80" #这里通过脚本监测
    interval 2 				#脚本执行间隔,每2s检测一次
    weight -30 				#脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 
}
vrrp_instance VI_1 { 		#keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
    state BACKUP 			#指定keepalived的角色
    interface ens33 		#指定监测网络的接口
    virtual_router_id 51 	#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,双机必须是一致的
    priority 90  			#定义优先级,数字越大,优先级越高
    mcast_src_ip 10.0.0.42 	# 发送多播数据包时的源IP地址
    nopreempt 				#不抢占
    advert_int 1 			#指定负载均衡器之间同步检查的时间间隔,单位是秒
    authentication { 		#设置验证类型和密码。双机必须一样
        auth_type PASS  	#设置vrrp验证类型,主要有PASS和AH两种
        auth_pass 1111 		#设置vrrp验证密码,双机必须一样
    }
    track_script { 			#执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
        chk_nginx  			#引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    }
    virtual_ipaddress { 	#VRRP HA 虚拟地址
        10.0.0.200
    }
}   

7,编写nginx检测脚本

[root@ c7-41 ~] vim /etc/keepalived/check_port.sh
#!/bin/bash
CHK_PORT=$1
if [ -n "$CHK_PORT" ];then
        PORT_PROCESS=`ss -lntp|grep $CHK_PORT|wc -l`
        if [ $PORT_PROCESS -eq 0 ];then
                echo "Port $CHK_PORT Is Not Used,End."
                systemctl stop keepalived.service
        fi
else
        echo "Check Port Cant Be Empty!"
fi
[root@ c7-41 ~] chmod +x /etc/keepalived/check_port.sh #添加权限

8,修改keepalived启动脚本,并启动keepalived

[root@ c7-41 ~] sed -i 's/KillMode/#&/' /usr/lib/systemd/system/keepalived.service
[root@ c7-41 ~] systemctl daemon-reload
[root@ c7-41 ~] systemctl enable keepalived.service #添加开机自启
[root@ c7-41 ~] systemctl start keepalived.service #启动

在主机B上安装nginx并启动

[root@ c7-42 ~] yum -y install epel-release #如果安装不了nginx,请先安装epel
[root@ c7-42 ~] yum -y install nginx
[root@ c7-42 ~] systemctl start nginx.service

9,测试高可用
在这里插入图片描述
如果听掉主机A的keepalived或者nginx,vip就会漂移到主机B上
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值