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 global192.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 PASSauth_pass 1111}virtual_ipaddress { #对外展现的漂移IP192.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 | lblclb_kind DR #LVS集群模式persistence_timeout 0 #保持连接时长protocol TCP #健康检查用的是TCP还是UDPsorry_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 80bindto 192.168.1.1connect_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.配置keepaliveglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1router_id lvs_master}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 10priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.10.100}}virtual_server 192.168.10.100 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.10.13 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.10.14 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}
