标签:inter 地址 单点 判断 不能 备份 interface 怎么 检查
我自己是先学的网络,在网络里面就有一个协议,我们经常会用到,就是VRRP(虚拟网关冗余协议),后来学了运维之后才知道,keepalived也是通过这个协议实现的高可用。
它的应用范围比较广泛,我们这里是给负载均衡做双机热备,防止单点故障。
环境:
负载均衡1 | 192.168.80.2 |
---|---|
负载均衡2 | 192.168.80.8 |
都要安装
yum -y install keepalived
配置文件
配置文件分为三个部分:
全局配置部分
VRRP协议配置部分
LVS服务管理配置部分
//lb01全局部分
global_defs {
router_id lb01 #保留这一行就可以了,这个是唯一标识符,就写自己的主机名就可以了不能重复
}
//lb02全局部分
global_defs {
router_id lb02
}
//lb01的vrrp部分
vrrp_instance ZH { #实例名字,随便取,这里是ZH,同一个组保持一致。
state MASTER #身份是主
interface eth0 #虚拟IP出现在哪个网卡上
virtual_router_id 51 #家庭身份信息,同一个组保持一致。
priority 150 #更改优先级为150
advert_int 1 #没用
authentication { #认证用的到,很少会用到
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #虚拟出的IP地址
192.168.80.10/24
}
}
//lb02的vrrp部分
vrrp_instance ZH { #实例名字,随便取,这里是ZH,同一个组保持一致。
state BACKUP #身份是备
interface eth0 #虚拟IP出现在哪个网卡上
virtual_router_id 51 #家庭身份信息,同一个组保持一致。
priority 100 #默认优先级100
advert_int 1 #没用
authentication { #认证用的到,很少会用到
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #虚拟出的IP地址
192.168.80.10/24
}
}
ip -a
查看会出来一个虚拟地址,主有,备没有,主死了,备就有了,默认开启抢占。
出现原因:
高可用备服务器收到不到从服务器发送的组播包,备服务器上会自动生成VIP地址。
备收不到组播包的原因:
出现这种问题出现两种原因:物理层面和软件层面
软件层面:防火墙和selinux
物理层面:心跳线断了就无法通信了,就都想成为主了。
逻辑原因:安全策略原因,防火墙策略,交换机ACL策略
如何解决?
如何解决呢?用监控或用脚本,出现脑裂就发邮件通知。
先解决问题,即使都想成为主,只要关一台的keepalie的服务就可以临时解决,然后后面再分析。
脚本如何编写呢?
只要在备上面过滤到VIP,只要过滤到就说明主出现了异常,就是这么简单,用个if判断一下即可。
/bin/bash
if a s eth0 | grep "192.168.80.10" > /dev/null
if [ $? -eq 0 ]
echo "keepalived error! " | mail -s "keepaalied !!!" 746620446@qq.com
fi
再写入到定时任务里面,每三分钟看一次就差不多,实时监控的话就要用到while监控,不过,我觉得是范不上。
假如主nginx挂了怎么办?
假如主上的nginx挂了的话,主上的keepalived也没有存在的必要了,而且如果存在的话还会让备认为主还存活着,用户的请求就无法正常的过渡到备上面,这时候就要求当主上的nginx挂了之后,主要主动放弃keeplived的,通过一个小脚本就可以实现了,脚本的名字不要叫nginx哟!不要忘记放入到定时任务里面,不要忘记加执行权限!
#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $sum -lt 3 ]
then
systemctl stop keepalived
fi
上述脚本是我们自行编写的,比较简单粗暴,nginx出了毛病立马就停止keepalived,但如果nginx又恢复了呢?恢复了之后是无法自动抢占了,因为keepalived进程已经停止了,其实keepalived已经帮我们想好了解决方法,其实不用关闭掉keepalived,当nginx挂了之后,keepalied自动把把优先级调低一点就好了呀!怎么做呢?这个有点难以理解,不过也不是太难,我们先来准备一个脚本。
#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $sum -lt 2 ]
then
exit 1 #nginx挂了之后输出异常1
else
exit 0 #nginx正常时输出正常0
fi
当权重的值是正数的时候,收到脚本的“正常”信号,优先级=权重+当前优先级,假设当前优先是150,权重是10,那么运行正常的时候真正的优先级是160,如果nginx挂了之后,收到脚本的“异常”信号,优先级保持150不变。
上面的脚本理解了之后,还没完呢?我们要将脚本添加到配置文件,我们还要在主的keepalived的配置文件里面添加一些内容。
// 将这一段放在全局配置和vrrp中间
vrrp_script check_web {
script "/server/scripts/check_web.sh" #脚本要有执行权限
interval 2 #二秒检查一次
weight 10
}
//将这段放在VRRP的实例里面
track_script{
check_web #调用脚本,当前是主,默认优先级是150
}
nginx正常时脚本向外输出“0”,优先级是150+10=160,当nginx挂掉时脚本向外输入“1”,而优先级会回到150,那备的优先级用155就好了,不能默认100了。
如果备还想保持备的优先级100不变的话,那么主这边就得把权重换成负数,收到脚本的真信号(nginx)正常,优先级保持不变(150),收到脚本的假信号(nginx异常),就得求差,用权重减优先级(10-150=90),这样也可以。
我们在防火墙上经常做这种双主的,其实就是互为主备。
一般一个干活,另一个就闲着,那能不能平时两个都干,坏一个,另一个也正常干,这就 双主模型,互相为主备。
A负责www,B为www备份
B负责blog,A为blog的备份
只希望用户用VIP,而不希望用用负载均衡的真实地址。修改主的nginx的配置文件,只侦听VIP的80端口,而不侦听IP的80端口,但是只侦听VIP会不生效,可能会报错,如何解决呢?无法绑定VIP,需要修改内核信息。
echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
sysctl -p
systemctl restart nginx
标签:inter 地址 单点 判断 不能 备份 interface 怎么 检查
原文地址:https://www.cnblogs.com/yizhangheka/p/12080729.html