keepalived高可用服务总结分享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived高可用服务总结分享相关的知识,希望对你有一定的参考价值。

一、keepalived介绍

keepalived软件起初是为LVS软件设计的,用来监控LVS集群中各个集群的节点状态,后来又加入了vrrp高可用功能,因此keepalived不但可以管理LVS集群节点,还可做其他服务(nginxmysql、Haproxy等)的高可用解决方案

二、keepalived高可用工作原理

keepalived高可用服务之间的故障转移通过虚拟路由冗余协议vrrp来实现的,在keepalived正常工作的时候,主节点会不断的向备节点发送组播包,(224.0.0.18)告诉backup节点自己还活着,叫他不要篡权夺位,当主节点发生故障时候(backup接收不到组播包)这是备节点就会代替主节点,完成主节点的一切工作,这个过程也叫vip地址的漂移

三、keepalived的使用

(一)、安装keepalived

yum -y install keepalived
rpm -ql keepalived
/etc/keepalived
/etc/keepalived/keepalived.conf #keepalived服务主配置文件
/etc/rc.d/init.d/keepalived #服务启动脚本
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/libexec/keepalived
/usr/sbin/keepalived

(二)、keepalived配置说明

cat /etc/keepalived/keepalived.conf

1-13行表示全局配置

global_defs { #全局配置
notification_email { #定义报警邮件地址br/>[email protected]
[email protected]
br/>[email protected]
}
notification_email_from [email protected] #定义发送邮件的地址
smtp_server 192.168.200.1 #邮箱服务器
smtp_connect_timeout 30 #定义超时时间
router_id LVS_DEVEL #定义路由标识信息,相同局域网唯一
}

15-30行表示虚拟ip配置 vrrp

vrrp_instance VI_1 { #定义实例
state MASTER #状态参数 master/backup 只是说明
interface eth0 #虚IP地址放置的网卡位置
virtual_router_id 51 #同一家族要一直,同一个集群id一致
priority 100 # 优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔
authentication { # ↓
auth_type PASS #↓
auth_pass 1111 #认证
} #↑
virtual_ipaddress { #↓
192.168.200.16 设备之间使用的虚拟ip地址
192.168.200.17
192.168.200.18
}
}

(三)、配置实例

说明:配置lb01和lb02两台机器的keepalived服务,让lb01为主lb02为备,vip为10.0.0.3
lb01配置

cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb01
}

vrrp_instance gorup01 {
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
}
}
/etc/init.d/keepalived reload

lb02配置

cat /etc/keepalived/keepalived.conf
global_defs {
router_id lb02
}

vrrp_instance group01 {
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
}
}
/etc/init.d/keepalived reload

(四)、keepalived脑裂

脑裂是大部分高可用服务的通病,脑裂指的是在keepalived高可用集群中,出现了两个相同虚拟IP地址信息,这种情况就称为脑裂
出现脑裂的原因:

  1. 心跳线出现问题
    网卡配置有问题
    交换设备有问题
    线缆连接有问题

2 . 有防火墙软件阻止问题

3.virtual_router_id配置数值不正确
总之:只要备服务器收不到组播包,就会成为主,而主资源没有释放,就会出现脑裂

防止脑裂解决思路

通过上边的说明我们可以知道如果备服务器出现了vip地址就说明这个keepalived服务坏掉了,当然这坏掉也有两种情况,一是主节服务器真的挂掉了,备服务器正常接替主服务器工作,二就是出现了脑裂的情况,这时候我们就可以写一个监控备服务器上有没有这个vip地址,如果有就给我个提示,或者发送邮件,作为运维人员收到这个信息后就应该看看是什么原因造成了备服务器上有这个vip地址了!
在备服务器上编写脚本
vim /server/scripts/ checkup.sh

#!/bin/bash
check_info=$(ip a|grep -c 10.0.0.3)
if [ $check_info -ne 0 ]
then
echo "keepalived server error!!!"
fi

写完脚本后可以加入到定时任务里边一分钟执行一次

(五)、nginx反向代理服务停止keepalived服务也停止

有时候像类似nginx+keepalived这样的环境中,如果nginx服务已经停止,那么keeepalived服务也就没有了存在价值,反倒影响用户体验,比如主服务上的nginx停止了,keepalived并没有停止,用户在请求数据的时候还是会走主服务器上,这时候用户的请求就会出错
编写两个服务的关联脚本
vim /server/scripts/web_info.sh

#!/bin/bash
web_info=$(ps -ef|grep [n]ginx|wc -l)
if [ $web_info -lt 2 ]
then
/etc/init.d/keepalived stop
fi

放到keepalived服务的配置文件中执行

! Configuration File for keepalived

global_defs {
router_id lb01
}

vrrp_script check { #定义脚本
script "“/server/scripts/check_web.sh" --- 表示将一个脚本信息赋值给变量check_web
interval 2 --- 执行监控脚本的间隔时间
weight 2 ---利用权重值和优先级进行运算,从而降低主服务优先级使之变为备服务器(建议先忽略)
}

中间忽略

virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
track_script { #调用脚本
check
}

(六)、实现高可用双主(互为主备)

有时候我们可能不止一个集群,如果都让把所有的请求都交给一个主服务器,那他的压力就太了,而备服务器却没有事儿干,这样显然是不合理的,这时候就可以让不同的高可用服务器成为不同集群的主服务器,这样既分担了单个服务器的压力,有提高了用户的体验;
lb01配置

vrrp_instance gorup01 {
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 gorup02 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev eth0 label eth0:1
}
}

lb02配置

vrrp_instance gorup01 {
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 gorup02 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev eth0 label eth0:1
}
}



以上是关于keepalived高可用服务总结分享的主要内容,如果未能解决你的问题,请参考以下文章

18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepal

keepalived是什么及作用?

keepalived 高可用集群介绍

18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepal

18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepal

实战 | Nginx+keepalived 实现高可用集群