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

最新文章

  1. YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧
  2. base64编解码实现
  3. js控制只允许输入数字
  4. (8) 深入理解Java Class文件格式(七)
  5. Python类属性详解
  6. UVaLive 6698 Sightseeing Bus Drivers (水题,贪心)
  7. 四种方案解决ScrollView嵌套ListView问题
  8. Currency Exchange(判断是否有正环)
  9. warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
  10. 一个简易内存池(C++)
  11. scp的简单记忆方法
  12. (MonoGame从入门到放弃-2) 初识MonoGame
  13. SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决
  14. Microsoft Graph: Developer Blog
  15. Redis主从同步原理-PSYNC【转】
  16. 【leetcode】20-ValidParentheses
  17. 删除Myeclipse中废弃的workspace记录
  18. 将 HttpPostedFile 转换成 Image 或者 Bitmap
  19. Oracle12c Release1安装图解(详解)
  20. c# byte[] 保存图片

热门文章

  1. EOS:dfuse stream 保证不会错过一个心跳
  2. 屏蔽QQ黄钻官方团队送礼物的方法
  3. Hexo瞎折腾系列(7) - Coding Pages申请SSL/TLS证书错误
  4. 贪心+拓扑排序 AOJ 2456 Usoperanto
  5. Android APK加壳技术方案
  6. Apex 使用和学习
  7. FACVSPOW - Factorial vs Power 数学方法 + 二分
  8. 迭代器———更锋利的C#代码小记(3)
  9. Thrift入门及Java实例演示【转】
  10. 数据源引用 java:/comp/env