Keepalived 简介、原理及服务部署

一、Keepalived的介绍:
keepalived是以 VRRP(Virtual Router Redundancy Protocol)协议为实现基础的,即虚拟路由冗余协议。
虚拟路由冗余协议可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面,有一个master和多个backup;
master上面有一个对外提供服务的vip,该路由器所在局域网内其他机器的默认路由为该vip;
master会发组播,当backup收不到vrrp包时,就认为master宕掉了;
这时,就需要根据VRRP的优先级,来选举一个backup当master。
这样的话就可以保证路由器的高可用了。

二、Keepalived的原理:
keepalived也是模块化设计,不同模块复杂不同的功能,下面是keepalived的组件:
core check vrrp libipfwc libipvs-2.4 libipvs-2.6

core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到

# 注:
keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已
Image
keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程

由图可知,两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事;
healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等;
如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态

三、Keepalived的部署:
1.安装相关依赖包:
yum -y install openssl* popt popt-devel

2.keepalive的安装,安装目录为/usr/local/keepalived
# 默认软件已上传 并且 解压,进入keepalived目录
./configure –prefix=/usr/local/keepalived
make && make install

# Keepalived 安装完成后,会在安装目录/usr/local/keepalived 生成 bin,etc,man,sbin 这4 个目录。其中etc为配置文件所在的目录。

3.配置 keepalived 环境变量
# 给root用户增加环境变量,在export PATH行之前加入一行:
vi ~/.bash_profile
PATH=$PATH:/usr/local/keepalived/sbin
保存退出,执行下面命令,使参数生效
. ~/.bash_profile

4.整理相关文件和命令,方便使用service 启动
cp -a /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp -a /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp -a /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# 让chkconfig管理新添加的服务
chkconfig –add keepalived
# 添加启动级别
chkconfig keepalived on
# 查看启动设置
chkconfig –list keepalived

5.keepalived配置文件的修改如下:配置文件目录在( /etc/keepalived/keepalived.conf ),没有就自己建一个
配置文件参考: linux — linux 配置文件详解 — keepalived 配置文件详解
vim /etc/keepalived/keepalived.conf
# master 参考配置文件
global_defs {
notification_email
{
13501960667@139.com # 收件邮箱
}
notification_email_from mysql_lab@localhost # 发件邮箱
smtp_server localhost # 发件服务器
smtp_connect_timeout 30 # 超时时间
router_id HAOWU_55
}
vrrp_sync_group VG1 {
group
{
VI_1
}
}
vrrp_instance VI_1 {
state MASTER
# state BACKUP
# nopreempt
interface eth0
virtual_router_id 96
priority 110
advert_int 1
authentication
{
auth_type PASS
auth_pass Pa$$w0rd
}
virtual_ipaddress
{
172.16.10.251
}
}

注:
# 红色部分 是在我们实际配置中,需要修改的地方;
# 紫红色部分 是我们在HA操作中,可以参考的设置下:
具体理解如下:
主/从的state 都设置为: BACKUP ,同是将 priority( 110>100 ) 大的机器设置为 nopreempt 可以避免切换后,vip抢占问题;
nopreempt 只能工作于 state 为BACKUP 的状态下;

# 如果利用keepalived调用脚本,则脚本里不能含有weight ,否则,会无法调用脚本。