1. keepalived原理介绍
什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,Keepalived通过请求一个vip来达到请求真是IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用HA功能。那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是keepalived实现的基础,那么首先我们来看看VRRP协议。
注:搞运维的要有足够的耐心,不理解协议就很难透彻的掌握keepalived的了
2. VRRP协议
虚拟路由网关冗余协议,它将多个路由器划分成一组,将一组路由器虚拟成一个路由器,对外只能使用一个漂移IP进行通信;当某一个路由器宕机,那么这个IP就会被另一个优先级较高的路由器抢占;master会向这一组路由器直接通过组播地址来进行通道自己的身份信息和优先级,当有路由器优先级比他高,就会将自己的优先级告知当前master,然后抢占;
3.Keepalived配置文件
一、全局配置
1.全局定义配置
global_defs { #定义全局配置上下文
notification_email { #发给谁
root@localhost
}
notification_email_from keepalived@localhost #发通知的源地址
smtp_server 127.0.0.1 #用哪个smtp服务器
router_id lvs_master #当前主机标识,注意一个vrrp组内标识唯一
}
2.静态路由配置
static_ipaddress
{
192.168.1.1/24 brd + dev eth0 scope global #相当于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
192.168.1.2/24 brd + dev eth1 scope global #就是给eth1配置IP地址
}
static_routes
{
src $SRC_IP to $DST_IP dev $SRC_DEVICE #路由和ip同理,一般这个区域不需要配置
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
二、VRRP配置
1.VRRP同步组配置
vrrp_sync_group VG_1 {
group {
VI_1 #实例名
VI_2 #实例名
}
notify_master /path/to/to_master.sh #表示当切换到master状态时,要执行的脚本
notify_backup /path_to/to_backup.sh #表示当切换到backup状态时,要执行的脚本
notify_fault "/path/fault.sh VG_1"
notify /path/to/notify.sh #切换就执行的脚本
smtp_alert #表示切换时给global defs中定义的邮件地址发送邮件通知
}
2.VRRP实例配置
vrrp_instance VI_1 {
state MASTER #初始化时的状态,最终状态需要竞选优先级来确定
interface ens33 #将共享的虚拟IP配置在哪一个网卡
virtual_router_id 10 #虚拟路由器ID,ID相同则在一个组内
priority 100 #优先级,0-255.0表示不可用,越高越优先
advert_int 1 #检查时间
authentication { #认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #对外展现的漂移IP
192.168.10.100
}
}
三、LVS配置
virtual_server 192.168.10.100 80 { #virtual server IP port|virtual server fwmark int 用什么来调度
delay_loop 6 #service polling的delay时间,即服务轮询的时间间隔
lb_algo rr #调度算法,rr | wrr | sh | dh | lc | wlc | lblc
lb_kind DR #LVS集群模式
persistence_timeout 0 #保持连接时长
protocol TCP #健康检查用的是TCP还是UDP
sorry_server 127.0.0.1 80 #备用机,就是当所有后端realserver节点都不可用时,就用这里设置的,也就是临时把所
real_server 192.168.10.13 80 { #RS地址加端口
weight 1 #权重
notify_up <STRING> | <QUOTED-STRING> #检查服务器正常(UP)后,要执行的脚本
notify_down <STRING> | <QUOTED-STRING> #检查服务器失败(down)后,要执行的脚本
HTTP_GET #健康检查方式
{
url{ #要坚持的URL,可以有多个
path /index.html #路径
digest <STRING> #md5生成的hash码,检测时将网页内容hash,与之比对;
status_code 200 #返回状态码
}
connect_port 80 #监控检查的端口
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 2 #重连间隔
}
}
}
#康检测方式:
TCP_CHECK {
connect_port 80
bindto 192.168.1.1
connect_timeout 4
}
#网页MD5生成方式 curl -s URL | md5sum
4. Keepalive+LVS-DR
1.环境:(Director_master:192.168.10.11),(Director_master:192.168.10.12),(RS1:192.168.10.12),(RS2:192.168.10.13;
2.搭建LVS-DR(只需要配置好两个RS即可,LVS配置会由Keepalive自动生成)
3.配置keepalive
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
router_id lvs_master
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 10
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
}
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.10.13 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.14 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}