一、keepalived基础知识
vrrp协议
用来实现路由器冗余的协议:
Vrrp协议(VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议)是为了消除在静态缺省路由环境下路由器单点故障引起的网络失效而设计的主备模式的协议,使得发生故障而进行设计设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。Vrrp协议需要具有IP备份,优先路由选择,减少不必要的路由器通信等功能,
Vrrp协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个)。而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话,就是master,或者是通过算法选举产生的,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等,其他设备不具有该IP,状态是BACKUP。除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能,当主级失效时,BACKUP将接管原先MASTER的网络功能。
配置VRRP协议时需要配置每个路由器的虚拟路由ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0-255的整整数,;同一个组中的路由器通过使用优先权值来选举MASTER。,优先权大者为MASTER,优先权也是一个0-255的正整数。
keepalived工作原理
keepalived是以VRRP协议为实现基础的.
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。
core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
check负责健康检查,包括常见的各种检查方式,以及对应的配置解析包括LVS的配置解析,。
vrrp模块是来实现VRRP协议的。
总结:在vrrp协议的基础上实现了服务器主机的负载均衡,VRRP负责调度器之间的高可用。
二、环境
1)配置LVS主从调度器
调度器配置依照上篇文章即可,配置步骤完全一样(配置LVS从调度器与主调度器的配置一样)。
2)配置web节点1-4
参考上几篇文章即可,配置步骤一样(四个节点都要配置)
3)NFS共享
参考上几篇文章即可,配置步骤一样
三、配置LVS+Keepalived高可用群集
1)在主调度器上配置 (注:从调度器和和主调度器的安装方法一样)
//安装支持软件
yum -y install kernel-devel openssl-devel popt-devel
//编译安装keepalived
tar zxf keepalived-1.2.13
cd /keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/localkernels/2.6.32......._64 && make && make install
ls -l /etc/init.d/keepalived //自动生成的脚本文件
chkconfig --add keepalived
chkconfig keepalived on
//此处keepalived安装完毕
2)查看主keepalived的配置文件(从keepalived的配置和主一样,在配置的时候主要有三个地方不一样:优先级99,调度器名称R2,热备状态为BACKUP)
vim /etc/keepalived/keepalived.conf
~~~~~~以下就是keepalived的主配置文件~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
global_defs {
notification_email { 指定keepalived在发生切换时需要发送email到的对象。
root@centos6.benet.com
}
notification_email_from zm15001138723@163.com #指定发件人
smtp_server smtp.163.com #指定smtp服务器地址
smtp_connect_timeout 3 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived的一个标识
}
vrrp_sync_group VG_1{ #监控多个网段的实例
group{
inside_network #实例名
outside_network }
notify_master /path/xx.sh #指定当切换到master时,执行的脚本
netify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
notify_fault "path/xx.shVG_1" #故障时执行的脚本
notify /path/xx.sh #脚本所在目录
smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知}
#VRRP实例定义段
vrrp_instance VI_1 {
state MASTER #指定哪个为MASTER,哪个为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #VRID标记
priority 100 #优先级,高优先级的DR会抢占为master (默认为抢占模式)
advert_int 1 #检查间隔,1秒
authentication { #设置认证
auth_type PASS #认证方式
auth_pass 1111 #认证字符串(使用 openssl rand -hex 6生成随机字符串)注:密码主从要一致哦
}
virtual_ipaddress { #设置VIP
172.16.16.172
}
sorry_server 127.0.0.1 80 #web服务器全部失败,可以指定Sorry web
}
virtual_server 172.16.16.172 80 {
delay_loop 6 #健康检查时间间隔,单位秒
lb_algo rr #负载调度算法,支持的算法:rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS的类型:有NAT|DR|TUN
nat_mask255.255.255.0 #子网掩码
persistence_timeout50 #会话保持时间,单位秒(可以适当延长时间以保持session)
protocol TCP #转发协议类型,有TCP和UDP两种
real_server 172.16.16.177 80 { #定义RS 服务
weight 1#权重
#inhibit_on_failure #当服务器健康检查失效时,将weight设置为0不是直接从ipvs中删除
#notify_up <STRING>|<QUOTED-STRING>#Server启动时执行的脚本
#notify_down <STRING>|<QUOTED-STRING>#Server down时执行的脚本
#后端RS服务器的检查 (HTTP_GET 和SSL_GET):
SSL_GET {
url { #检查url,可以指定多个,status_codeand digest
path /
digest ff20ad #或者status_code 200 ....
}
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
#也可以通过TCP_CHECK判断RealServer的健康状况:
}
}
3)辅助命令
service keepalived start //启动服务
ip addr show dev eth0 //查看vip是否存在
less /var/log/messages //keepalived的日志文件位置,可以看到master和slave的状态的迁移记录