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. Spring自动扫描注解类的冲突问题

    原文地址:http://www.blogjava.net/crazycy/archive/2014/07/12/415738.html Spring MVC项目中通常会有二个配置文件,spring-s ...

  2. 跟我一起玩Win32开发(2):完整的开发流程

    上一篇中我给各位说了一般人认为C++中较为难的东西——指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一本C++书上 ...

  3. LightOj 1076 - Get the Containers (折半枚举好题)

    题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1076 题目描述: 给出n个数,要求分成m段,问这m段中最大的总和,最小是多少 ...

  4. python正则表达式提取中文

    import urllib.requestimport reurl='https://songsearch.kugou.com/song_search_v2?callback=jQuery112407 ...

  5. htm 中 <b>和<strong>的区别

    显示上两者没有任何区别,都是粗体<b>:为了加粗而加粗,推荐使用 css font-weight 属性来创建粗体文字.<strong>:为了强调而加粗,表示十分重要.在网页中使 ...

  6. qt read excel

    void exceladapter::readfile(QString filename, QString sheetname, int colNo){ QSqlDatabase db = QSqlD ...

  7. 类成员的指针必须NULL化,否则是乱七八糟的东西

    class BiTree { public: BiTree(); virtual ~BiTree(); virtual void insertNode(Node * newNode); virtual ...

  8. Kotlin学习的一些笔记

    Introduction 写在前面 关于本书 这本书适合你吗? 关于作者 介绍 什么是Kotlin? 我们通过Kotlin得到什么 准备工作 Android Studio 安装Kotlin插件 创建一 ...

  9. Oracle | Java日期处理

    public class Test{         public static void main (String args []){                               j ...

  10. linux环境iptables配置

    Linux iptables常用规则 设置一个自己用的表, 允许ping 允许ssh 允许 web 允许mysql 允许 ftp 允许dns查询 其他的拒绝.脚本如下 # Firewall confi ...