Keepalived
Posted template
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived相关的知识,希望对你有一定的参考价值。
keepalived 高可用通过VRRP通信:
1、VRRP,全称虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
2、VRRP用IP多播的方式(默认多播地址224.0.0.18)实现高可用对之间通信
3、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的
4、工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源,备节点可以有多个,通过优先级竞选
5、VRRP使用了加密协议加密数据,但keepalived官方目前还是推荐使用明文方式配置认证类型和密码
安装:
yum -y install keepalived
配置文件位置:
/etc/keepalived/keepalived.conf
示例配置:
##主节点示例配置: ! Configuration File for keepalived global_defs { notification_email { 123.com ##报警通知邮箱 } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb01 ##ID为lb01,备节点要和主节点不同 } vrrp_instance VI_1 { ##实例名字为VI_1,相同实例的备节点名字要相同 state MASTER ##状态为MASTER,备节点需要为BACKUP interface eth0 ##通信接口为eth0,主备需要相同 virtual_router_id 51 ##实例ID为51 priority 150 ##优先级150,备节点的优先级必须比此数字低 advert_int 1 ##通信检查间隔时间一秒 authentication { auth_type PASS ##PASS认证类型,主备相同 auth_pass 1111 ##密码,主备相同 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 ##虚拟IP为10.0.0.3绑定接口为eth0,别名eth0:1,主备相同 } }
##备节点示例配置: ! Configuration File for keepalived global_defs { notification_email { 123.com } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } }
问题:
##问题:
在主节点使用ip addr | grep 10.0.0.3查看是否有虚拟IP
[[email protected] keepalived]# ip addr | grep 10.0.0.3
inet 10.0.0.3/24 scope global secondary eth0:1
表示配置成功
在备节点使用以上命令没有输出,如果有输出相同内容表示keepalived工作不正常,同一个IP同一时刻只能出现在一台服务器
如果查看备节点有VIP信息,说明高可用裂脑了,裂脑是两台服务器争抢统一资源导致的,如果出现这种情况
1、排查主备服务器通信是否正常、如果不正常是否有iptables防火墙阻挡
2、主备两台服务器的keepalived.conf配置文件是否有错误,例如同一实例的virtual_router_id配置不一致
##双实例双主配置示例第一台:
##双实例主配置文件: ! Configuration File for keepalived global_defs { notification_email { 123.com } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 56 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 dev eth0 label eth0:2 } }
##双实例双主配置示例第二台:
! Configuration File for keepalived global_defs { notification_email { 123.com } smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 56 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 dev eth0 label eth0:2 } }
##解决服务监听的网卡上不存在IP地址的问题:
如果配置使用:listen 10.0.0.3:80 的方式指定IP监听服务,而本地网卡上没有10.0.0.3这个IP,nginx就会报错
解决办法:
在/etc/sysctl.conf中加入如下内核参数配置:
net.ipv4.ip_nonlocal_bind=1 #表示忽略配置中监听的vip是否存在
echo ‘net.ipv4.ip_nonlocal_bind=1‘>>/etc/sysctl.conf
sysctl -p
##解决高可用服务只针对物理服务器的问题
实际情况中,业务停止而keepalived服务还在工作的情况,会导致vip无法找到对应的服务
解决方法:
1、写守护进程脚本,当nginx有问题时就停掉本地的keepalive服务,实现票已到对端继续提供服务
脚本如下:
#!/bin/bash while true do if [ `netstat -tlunp|grep nginx|wc -l` -ne 1 ];then /etc/init.d/keeplived stop fi sleep 5 done
nohup sh chk_nginx.sh &
更改keepalived配置文件
vrrp_script chk_nginx_proxy { /root/scripts/chk_nginx_proxy.sh interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 dev eth0 label eth0:1 } track_script { chk_nginx_proxy } }
解决多组keepalived服务器在同一个局域网的冲突问题:
当在同一个局域网中部署了多组keepalived服务器对时,而又未使用专门的心跳线通信时,可能用户发生IP躲避地址冲突问题
导致接管错乱,不同组的keepalived都会使用224.0.0.18作为多播地址,解决办法是在同组的keepalived服务器的配置
文件中指定独一无二的多播地址,配置如下
global_def { router_id LVS_19 vrrp_mcast_group4 224.0.0.19 }
##监测脑裂的脚本:
#!/bin/bash lb01_vip=10.0.0.12 while true do ping -c 2 -W 3 $lb01_ip &>/dev/null if [ $? -eq 0 -a `ip add|grep "$lb01_vip"|wc -l` -eq 1 ];then echo "ha is split brain waring" else echo "ha is ok" fi sleep 5 done
以上是关于Keepalived的主要内容,如果未能解决你的问题,请参考以下文章