keepalived实现主从、主主架构
一、HA Cluster实现方案:
1、vrrp协议的实现
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。通常,一个网络内的所有主机都设置一条缺省路由,这样,主机发出的目的地址不在本网段的报文将被通过缺省路由发往路由器RouterA,从而实现了主机与外部网络的通信。当路由器RouterA 坏掉时,本网段内所有以RouterA 为缺省路由下一跳的主机将断掉与外部的通信产生单点故障。VRRP 就是为解决上述问题而提出的,它为具有多播组播或广播能力的局域网(如:以太网)设计。
2、实现软件有keepalived、ais(完备HA集群方案)、RHCS(cman)、heartbeat和corosync。
二、工作原理
VRRP的工作过程如下:
-
路由器开启VRRP功能后,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为主用路由器,优先级低的成为备用路由器。主用路由器定期发送VRRP通告报文,通知备份组内的其他路由器自己工作正常;备用路由器则启动定时器等待通告报文的到来。
-
VRRP在不同的主用抢占方式下,主用角色的替换方式不同:
在抢占方式下,当主用路由器收到VRRP通告报文后,会将自己的优先级与通告报文中的优先级进行比较。如果大于通告报文中的优先级,则成为主用路由器;否则将保持备用状态。
在非抢占方式下,只要主用路由器没有出现故障,备份组中的路由器始终保持主用或备用状态,备份组中的路由器即使随后被配置了更高的优先级也不会成为主用路由器。
-
如果备用路由器的定时器超时后仍未收到主用路由器发送来的VRRP通告报文,则认为主用路由器已经无法正常工作,此时备用路由器会认为自己是主用路由器,并对外发送VRRP通告报文。备份组内的路由器根据优先级选举出主用路由器,承担报文的转发功能。
在实际组网中一般会进行VRRP负载分担方式的设置。负载分担方式是指多台路由器同时承担业务,避免设备闲置,因此需要建立两个或更多的备份组实现负载分担。
VRRP负载分担方式具有以下特点:
-
每个备份组都包括一个主用路由器和若干个备用路由器。
-
各备份组的主用路由器可以不相同。
-
同一台路由器可以加入多个备份组,在不同备份组中有不同的优先级,使得该路由器可以在一个备份组中作为主用路由器,在其他的备份组中作为备用路由器。
-
VRRP在提高可靠性的同时,简化了主机的配置。在具有多播或广播能力的局域网中,借助VRRP能在某台路由器出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息。
-
一个VRRP路由器有唯一的标识:VRID,范围为0—255。该路由器对外表现为唯一的虚拟MAC地址,地址的格式为00-00-5E-00-01-***。主控路由器负责对ARP请求用该MAC地址做应答。这样,无论如何切换,保证给终端设备的是唯一一致的IP和MAC地址,减少了切换对终端设备的影响。
-
VRRP控制报文只有一种:VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内。这保证了VRID在不同网络中可以重复使用。为了减少网络带宽消耗只有主控路由器才可以周期性的发送VRRP通告报文。备份路由器在连续三个通告间隔内收不到VRRP或收到优先级为0的通告后启动新的一轮VRRP选举。
-
在VRRP路由器组中,按优先级选举主控路由器,VRRP协议中优先级范围是0—255。若VRRP路由器的IP地址和虚拟路由器的接口IP地址相同,则该VRRP路由器被称为该IP地址的所有者;IP地址所有者自动具有最高优先级:255。优先级0一般用在IP地址所有者主动放弃主控者角色时使用。可配置的优先级范围为1—254。优先级的配置原则可以依据链路的速度和成本、路由器性能和可靠性以及其它管理策略设定。主控路由器的选举中,高优先级的虚拟路由器获胜,因此,如果在VRRP组中有IP地址所有者,则它总是作为主控路由的角色出现。对于相同优先级的候选路由器,按照IP地址大小顺序选举。VRRP还提供了优先级抢占策略,如果配置了该策略,高优先级的备份路由器便会剥夺当前低优先级的主控路由器而成为新的主控路由器。
-
为了保证VRRP协议的安全性,提供了两种安全认证措施:明文认证和IP头认证。明文认证方式要求:在加入一个VRRP路由器组时,必须同时提供相同的VRID和明文密码。适合于避免在局域网内的配置错误,但不能防止通过网络监听方式获得密码。IP头认证的方式提供了更高的安全性,能够防止报文重放和修改等攻击。
三、keepalived软件
1、术语:
虚拟路由器:Virtual Router
虚拟路由器标识:VRID(0-255)
物理路由器:
master:主设备
backup:备用设备
priority:优先级
VIP:Virtual IP
VMAC:Virutal MAC (00-00-5e-00-01-VRID)
GraciousARP
安全工作:认证、无认证、简单字符认证和MD5
工作模式有:
主/备:单虚拟路径器;
主/主:主/备(虚拟路径器1),备/主(虚拟路径器2)
2、Keepalived功能:
- vrrp协议的软件实现,原生设计的目的为了高可用ipvs服务:
- 基于vrrp协议完成地址流动;
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义);
- 为ipvs集群的各RS做健康状态检测;
- 基于脚本调用接口通过执行脚本完成脚本中定义的功能,进而影响集群事务;
3、组件:
- 核心组件:vrrp stack、ipvs wrapper、checkers
- 控制组件:配置文件分析器、IO复用器、内存管理组件
4、HA Cluster的配置前提:
(1) 各节点时间必须同步,使用ntp, chrony等工具同步。
(2) 确保iptables及selinux不会成为阻碍;
(3) 各节点之间可通过主机名互相通信(对KA并非必须);
建议使用/etc/hosts文件实现;
(4) 确保各节点的用于集群服务的接口支持MULTICAST通信;
(5)使用D类多播地址:224-239;
四、keepalived安装配置:
- 从CentOS 6.4以后,就收录到base仓库提供;
1、程序环境:
-
主配置文件:/etc/keepalived/keepalived.conf
-
主程序文件:/usr/sbin/keepalived
Unit File:keepalived.service
Unit File的环境配置文件:/etc/sysconfig/keepalived -
配置文件组件部分:
环境搭建TOP HIERACHY顶级配置段
GLOBAL CONFIGURATION
Global definitions全局定义
Static routes/addresses静态路由
VRRPD CONFIGURATION
VRRP synchronization group(s):vrrp同步组;
VRRP instance(s):实例,每个vrrp instance即一个vrrp路由器;
LVS CONFIGURATION
Virtual server group(s)
Virtual server(s):ipvs集群的vs和rs;
2、 基本安装配置
[root@keepalive130 ~] yum -y install net-tools tcpdump #安装抓包工具和网络工具
[root@keepalive130 ~] vim /etc/hosts#设置解析
172.16.15.130 keepalive130#主节点
172.16.15.131 keepalive131#备节点
[root@keepalive130 ~] ping keepalive130#测试
[root@keepalive130 ~] ip link set multicast on dev eth0#开启多播
image.png
五、keepalived实现主从架构
1、主节点配置
[root@keepalive130 ~] yum -y install keepalived#安装
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#邮件通知地址 ,这里是本机收件地址
root@localhost
}
notification_email_from keepalived@localhost #发件地址
smtp_server 127.0.0.1 #邮件服务地址,端口是25
smtp_connect_timeout 30 #连接邮件服务器超时时间30秒
router_id keepalive130 #可以使用主机名
vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}
vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
state MASTER #当前状态,主的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
priority 100 #优先级,高于其他主机
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a1b2c3d4 #密码为8位,不能用默认的密码
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
}
}
[root@keepalive130 ~]# systemctl start keepalived #启动keepalived
[root@keepalive130 ~]# systemctl status keepalived #查询启动信息
......
Jul 27 14:12:55 keepalive130 Keepalived_vrrp[4242]: VRRP_Instance(VI_1) Entering MASTER STATE #主要状态
......
2、备用节点设置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#邮件通知地址 ,这里是本机收件地址
root@localhost
}
notification_email_from keepalived@localhost #发件地址
smtp_server 127.0.0.1 #邮件服务地址,端口是25
smtp_connect_timeout 30 #连接邮件服务器超时时间30秒
router_id keepalive131 #可以使用主机名
vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}
vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
state BACKUP #当前状态,从的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
priority 96 #优先级,低于master主机
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a1b2c3d4 #密码为8位,不能用默认的密码
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
}
}
[root@keepalive131 ~]# systemctl start keepalived #启动keepalived
[root@keepalive131 ~]# systemctl status keepalived #查询启动信息
......
Jul 27 14:13:53 keepalive131 Keepalived_vrrp[4497]: VRRP_Instance(VI_1) Entering BACKUP STATE #备用状态
......
3、测试:
基于抢占模式工作:
-
当启用备用节点时候,发现没有主节点,也没有更高的优先级,备用节点转变成主节点。
-
当主节点上线时候,备用节点发现主节点存在,优先级低于主节点,备用节点退出主节点角色,转为备用,并删除VIP虚拟地址。
image.png -
主节点上线启用:
image.png -
抓包测试:
在备用节点上:
[root@keepalive131 ~]# tcpdump -i eth0 -nn host 224.1.101.33 #对多播地址抓包
image.png
六、keepalived实现主主架构
1、主节点配置
[root@keepalive130 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#邮件通知地址 ,这里是本机收件地址
root@localhost
}
notification_email_from keepalived@localhost #发件地址
smtp_server 127.0.0.1 #邮件服务地址,端口是25
smtp_connect_timeout 30 #连接邮件服务器超时时间30秒
router_id keepalive130 #可以使用主机名
vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}
vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
state MASTER #当前状态,主的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
priority 100 #优先级,高于其他主机
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a1b2c3d4 #密码为8位,不能用默认的密码
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0
}
}
vrrp_instance VI_2{ #定义一个虚拟路由器,第二个
state BACKUP #当前状态,从的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 34#这个虚拟ip,与其他主机要保持一至
priority 96 #优先级,低于master主机
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a6b7c8d9 #密码为8位,不能用默认的密码,这里修改一下
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0
}
}
[root@keepalive130 ~]# systemctl start keepalived #启动keepalived
2、备用节点设置
[root@keepalive131 ~]# vim /etc/keepalived/keepalived.conf #编辑配置文件
! Configuration File for keepalived
global_defs {#全局配置
notification_email {#邮件通知地址 ,这里是本机收件地址
root@localhost
}
notification_email_from keepalived@localhost #发件地址
smtp_server 127.0.0.1 #邮件服务地址,端口是25
smtp_connect_timeout 30 #连接邮件服务器超时时间30秒
router_id keepalive131 #可以使用主机名
vrrp_mcast_group4 224.1.101.33 #设置多播地址,其他主机也一样
}
vrrp_instance VI_1 { #定义一个虚拟路由器,第一个
state BACKUP #当前状态,从的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 33#这个虚拟ip,与其他主机要保持一至
priority 96 #优先级,低于master主机
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a1b2c3d4 #密码为8位,不能用默认的密码
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0 label eth0:0#别名为eth0:0
}
}
vrrp_instance VI_2{ #定义一个虚拟路由器,第二个
state MASTER #当前状态,主的
interface eth0 #当前的vrp应用,绑定到那个网卡设备上
virtual_router_id 34#这个虚拟ip,与其他主机要保持一至
priority 100 #优先级,高于备用节点
advert_int 1
authentication {
auth_type PASS #密码认证
auth_pass a6b7c8d9 #密码为8位,不能用默认的密码,这里修改一下
}
virtual_ipaddress {#虚拟ip地址
172.16.15.99/16 dev eth0
}
}
[root@keepalive131 ~]# systemctl start keepalived #启动keepalived
测试:
主备都启用:
image.png
主节点关闭:
[root@keepalive130 ~]# systemctl stop keepalived
image.png