Keepalived
工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
TCP/IP四层模型
具体实现及ARP协议简单了解
在实际应用中,当我们想给目标主机发送消息时,需要首先通过DNS获取到目的主机的IP地址;但在实际网络的链路上传送数据帧时,最终还是必须使用该主机的硬件地址。但是怎么知道对方MAC地址呢?这就是ARP需要做的事,通过IP地址解析到对方的MAC地址。同时在每个主机上都设有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址对应硬件地址的列表,都是通过发送ARP报文解析到的
也就是说是通过更改ip对应的MAC地址 实现动态切换
在虚拟机上简单演示
**Ubuntu 16.04.3 LTS**
1.安装Keepalived
apt-cache pkgnames | grep keepalived
apt-get install keepalived
2.安装ntp服务 保证时间一致性
3.分别 查看网卡 并 绑定虚拟IP
ip a
## 编辑interfaces文件
auto ens33:0
iface ens33:0 inet static
address 192.168.232.100
netmask 255.255.255.0
4.查看虚拟ip 对应的MAC地址
ifconfig
##server1 ens33:0 Link encap:Ethernet HWaddr 00:0c:29:f2:58:16 inet addr:192.168.232.100
##server2 ens33:0 Link encap:Ethernet HWaddr 00:0c:29:8e:11:5e inet addr:192.168.232.100
5.编辑keepalived
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
##Master配置
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 103
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.232.100
}
}
##Slave配置
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 10
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.232.100
}
}
state 可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途
interface 节点固有IP(非VIP)的网卡,用来发VRRP包
virtual_router_id 取值在0-255之间,用来区分多个instance的VRRP组播
priority 用来选举master的,要成为master,那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100)
advert_int 发VRRP包的时间间隔,即多久进行一次master选举(可以认为是健康查检时间间隔)
authentication 认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位)
virtual_ipaddress 虚拟ip
6.启动Keepalived服务 并查看系统日志
tail -f syslog
Master状态
ubuntu Keepalived_vrrp[3892]: VRRP_Instance(VI_1) Transition to MASTER STATE
ubuntu Keepalived_vrrp[3892]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
ubuntu Keepalived_vrrp[3892]: VRRP_Instance(VI_1) Entering MASTER STATE
Slave状态
Keepalived_vrrp[4139]: VRRP_Instance(VI_1) Entering BACKUP STATE
7.在Slave上传使用tcpdump查看arp广播
tcpdump vrrp
IP 192.168.232.103 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 103, authtype simple, intvl 1s, length 20
8.在另外一台Server上 ping 虚拟ip
ping 192.168.232.100
root@ubuntu:/home/guolin# arp
Address HWtype HWaddress Flags Mask Iface
192.168.232.100 ether 00:0c:29:8e:11:5e C ens38
可以看到MAC地址是 00:0c:29:8e:11:5e
9.停止掉Master服务
通过查看日志可以看到 Slave转成Master状态了
ubuntu Keepalived_vrrp[4139]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 28 17:44:36 ubuntu Keepalived_vrrp[4139]: VRRP_Instance(VI_1) Entering MASTER STATE
10.再次在另外一台Server 上ping 虚拟ip
ping 192.168.232.100
PING 192.168.232.100 (192.168.232.100) 56(84) bytes of data.
arp
Address HWtype HWaddress Flags Mask Iface
192.168.232.100 ether 00:0c:29:f2:58:16 C ens38
可以看到MAC地址已经变成了 00:0c:29:f2:58:16