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

高可用技术之keepalived原理简单了解的更多相关文章

  1. 分享MYSQL中的各种高可用技术(源自姜承尧大牛)

    分享MYSQL中的各种高可用技术(源自姜承尧大牛) 图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各 ...

  2. 分享MYSQL中的各种高可用技术

    分享MYSQL中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...

  3. Linux 高可用开源方案 Keepalived VS Heartbeat对比

    1)Keepalived使用更简单:从安装.配置.使用.维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2.1.4后拆分成3个子项目,安装.配置.使用都 ...

  4. 转://Oracle 高可用技术与云基础架构

    众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...

  5. (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨

    原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳 ...

  6. Redis主从复制+Keepalived+VIP漂移实现HA高可用技术之详细教程

    1.大家可以先看我的单台Redis安装教程,链接在此点击Redis在CentOS for LInux上安装详细教程 2.第一台redis配置,是正常配置.作为MASTER主服务器,第二台redis的配 ...

  7. redis主从+keepalived实现高可用技术

    Redis是我们当下比较流行使用的非关系数据库,可支持多样化的数据类型,多线程高并发支持,redis运行在内存拥有更快的读写.因为redis的表现如此出色,如何能保障redis在运行中能够应对宕机故障 ...

  8. MySQL高可用架构之MHA 原理与实践

    MHA简介 关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能.MHA在监控到mas ...

  9. 【独家】终生受用的Redis高可用技术解决方案大全

    最近很多朋友向我咨询关于高可用的方案的优缺点以及如何选择合适的方案线上使用,刚好最近在给宜人贷,光大银行做企业内训的时候也详细讲过,这里我再整理发出来,供大家参考,如有不妥之处,欢迎批评指正,也欢迎推 ...

随机推荐

  1. hdu1811 Rank of Tetris 并查集+拓扑排序

    #include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...

  2. js 合并2个结构

    var conditions = getJsonObj("conditionArea"); var plogId = { ProgId: getProgId() }; $.exte ...

  3. zabbix自定义item(v3.4)

    1 添加user key agent.conf UnsafeUserParameters=1 UserParameter=mysql_if_running,sh /app/zabbix/alertsc ...

  4. PHP常见的输出语句 echo()、print()、print_r()、var_dump()、pinrtf()之间的区别

    echo().print().print_r().var_dump().pinrtf()之间的区别 1.print() :简单输出语句,可以输出字符串,变量.表达式等单项的值!(不能输出数组.对象等复 ...

  5. CentOS 7不重启刷新磁盘列表

    [root@master-09:29:09 33~]#ls /sys/class/scsi_host/host0 host1 host2[root@master-09:29:55 34~]#echo ...

  6. vue中引入字体图标报错,找不到字体文件

    在用vue + webpack进行开发的时候,在引用字体图标遇到字体无法加载的问题: 报以下错误 搞了好久没搞定,最后才找到解决方法(还是没有找到原因) 修改字体图标的css中引入字体文件的路径 以前 ...

  7. Android 基础知识总结

    搞了这么久安卓开发,对基础的知识点总会遗忘,所有有必要总结一下:

  8. android AutoCompleteTextView 实现手机号格式化,附带清空历史的操作

    有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能.同时要具备手机格式化的功能.下拉列表最后一行是有个清除历史的功能.可是点击“清除历史”却把文字要设置进去A ...

  9. Kotlin学习的一些心得

    1.工程manifest中的application节点有冲突时,添加 xmlns:tools="http://schemas.android.com/tools" tools:re ...

  10. COGS 495. 窗口

    ★☆   输入文件:window.in   输出文件:window.out   简单对比时间限制:2 s   内存限制:256 MB [问题描述] 给你一个长度为N的数组,一个长为K的滑动的窗体从最左 ...