使用keepalived实现双机热备

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
下面来以keepalived结合tomcat来实现一个web服务器的双机热备。
keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
我们在本文中的测试环境如下
两台物理服务器和一个虚拟服务器(vip):
master:redhat 2.6.18-53.el5  192.168.8.4
backup: redhat 2.6.18-53.el5  192.168.8.6
vip: 192.168.8.100
测试环境的网络topology图如下:

节点A 192.168.8.4 (主节点), 节点B 192.168.8.6(备用节点),虚拟IP(对外提供服务的IP 192.168.8.100)
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。
当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。
keepalived的原理可以这样简单理解:
keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点A网卡的MAC地址
图中的其它电脑如客户端和NodeB会更新自己的ARP表,对应192.168.8.100的MAC地址=节点A网卡的MAC地址。
当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
192.168.8.100 这个IP对应的MAC地址为节点B网卡的MAC地址
图中的其它电脑如客户端会更新自己的ARP表,对应192.168.8.100的MAC地址=节点B网卡的MAC地址。

1,在主备机器上安装keepalived,
步骤如下:下载keepalived-1.1.15.tar.gz,然后解压安装
#tar zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure
#make
#make install
2,配置keepalived
配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:

global_defs {router_id NodeA
}
vrrp_instance VI_1 {state MASTER    #设置为主服务器interface eth0  #监测网络接口virtual_router_id 51  #主、备必须一样priority 100   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)advert_int 1   #VRRP Multicast广播周期秒数authentication {auth_type PASS  #VRRP认证方式,主备必须一致auth_pass 1111   #(密码)
}
virtual_ipaddress {192.168.8.100/24  #VRRP HA虚拟地址
}

备用节点的配置如下:

global_defs {router_id NodeB
}
vrrp_instance VI_1 {state BACKUP    #设置为主服务器interface eth0  #监测网络接口virtual_router_id 51  #主、备必须一样priority 90   #(主、备机取不同的优先级,主机值较大,备份机值较小,值越大优先级越高)advert_int 1   #VRRP Multicast广播周期秒数authentication {auth_type PASS  #VRRP认证方式,主备必须一致auth_pass 1111   #(密码)
}
virtual_ipaddress {192.168.8.100/24  #VRRP HA虚拟地址
}

3,启动keepalived:
keepalived -D -f /usr/local/etc/keepalived/keepalived.conf
查看log消息:
tail -f /var/log/messages
启动主节点A后的日志为:会广播ARP消息

[root@srv4 ~]# tail -f /var/log/messages
Sep 20 01:45:29 srv4 Keepalived_vrrp: Configuration is using : 34546 Bytes
Sep 20 01:45:29 srv4 Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(8,9)]
Sep 20 01:45:30 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:45:31 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:45:31 srv4 Keepalived_vrrp: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 Keepalived_healthcheckers: Netlink reflector reports IP 192.168.8.100 added
Sep 20 01:45:31 srv4 avahi-daemon[4029]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:45:36 srv4 Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100

通过ip a 命令可以看到192.168.8.100/24绑定到了eth0上

[root@srv4 bin]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000link/ether 00:0c:29:50:2d:9d brd ff:ff:ff:ff:ff:ffinet 192.168.8.4/24 brd 192.168.8.255 scope global eth0inet 192.168.8.100/24 scope global secondary eth0inet6 fe80::20c:29ff:fe50:2d9d/64 scope link valid_lft forever preferred_lft forever

启动备用节点B后的日志为:

Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: Configuration is using : 34262 Bytes
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering BACKUP STATE
Sep 20 01:47:31 hadoopsrv Keepalived_vrrp: VRRP sockpool: [ifindex(2), proto(112), fd(7,8)]
Sep 20 01:47:31 hadoopsrv Keepalived: Starting VRRP child process, pid=20567

4,在两台机器上安装tomcat,安装步骤省略
安装完成后在节点A的机器上创建一个html文件内容如下

this is the test page
<br>
from server 192.168.8.4

通过下面的url验证能够正常访问
http://192.168.8.4:8080/test/test.html

安装完成后在节点B的机器上创建一个html文件内容如下

this is the test page
<br>
from server 192.168.8.6

通过下面的url验证能够正常访问
http://192.168.8.6:8080/test/test.html
在主节点,节点A正常的时候通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为主节点上的html

this is the test page
<br>
from server 192.168.8.4

将节点A的keepalived停止: killall keepalived
通过下面的url访问
192.168.8.100:8080/test/test.html
返回的内容应该为备用节点上的内容

this is the test page
<br>
from server 192.168.8.6

同时查看节点B的日志:发现节点B转为主节点并且会广播ARP消息

Sep 20 01:55:44 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Transition to MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Entering MASTER STATE
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) setting protocol VIPs.
Sep 20 01:55:45 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100
Sep 20 01:55:45 hadoopsrv avahi-daemon[3769]: Registering new address record for 192.168.8.100 on eth0.
Sep 20 01:55:50 hadoopsrv Keepalived_vrrp: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.8.100

本文的目的主要是演示keepalived实现双机热备的功能和过程。
对于应用本身(tomcat)发生错误,以及"脑裂"等问题是不能解决的。

转载于:https://my.oschina.net/ydsakyclguozi/blog/515049

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《看聊天记录都学不会C语言?太菜了吧》(8)牛郎和织女竟有一个孩子?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

技术贴:触摸屏(TP)技术交流

转载自&#xff1a;易触网科技 電容式TP的動作原理 PS:電容式TP動作原理是利用人體電流感應來進行的&#xff0c;當人的手指觸摸在TP上&#xff0c;与Panle上的ito電路形成一個耦合電容&#xff08;電容效應&#xff09;&#xff0c;於是手指從觸控點上吸走了一個微小的電流&am…

【遥感物候】植被物候与气候(气温和降水)条件的空间相关性分析

植被生长与气候的关系最为密切,通过计算植被各个生长季参数和气温、降水之间的相关系数可以分析生长季参数的变化与气温、降水之间的关系的程度。本文计算30年的植被物候参数和气候数据之间的相关性,最终效果如下: 目录 一、相关性分析原理

HttpContext.TraceIdentifier那严谨的设计

前言Asp.Net Core中有一个不受人重视的属性HttpContext.TraceIdentifier&#xff0c;它在链路追踪中非常有用&#xff0c;下面是官方的定义:在项目中一般会将该字段输出到每一条日志中&#xff0c;也可以将此Id作为通用响应字段返回前端&#xff0c;后续可以根据该属性和日志匹…

Android之实现多张图片点击预览(支持放缩)和滑动

1 需求 多张图片通过recycleView展示&#xff0c;然后点击具体一张图片支持预览(支持放缩)和滑动 2 解决办法 BaseRecyclerViewAdapterHelper com.github.chrisbanes.photoview.PhotoView ViewPage2 组合起来真香 https://github.com/CymChad/BaseRecyclerViewAdapt…

【Envi风暴】Envi5.4经典安装图文教程

ENVI(The Environment for Visualizing Images)是一个完整的遥感图像处理平台,应用汇集中的软件处理技术覆盖了图像数据的输入/输出、图像定标、图像增强、纠正、正射校正、镶嵌、数据融合以及各种变换、信息提取、图像分类、基于知识的决策树分类、与GIS的整合、DEM及地形信…

错误: nknown column 'xxxx' in 'where clause'

nknown column sdsds in where clause 运行环境&#xff1a;jdk1.7.0_17tomcat 7 spring&#xff1a;3.2.0 mybatis&#xff1a;3.2.7 eclipse 错误&#xff1a;nknown column sdsds in where clause 错误原因&#xff1a;数据库查询无用&#xff0c;可能很多写sql语句都会遇到…

查缺补漏系统学习 EF Core 6 - 批量操作

推荐关注「码侠江湖」加星标&#xff0c;时刻不忘江湖事这是 EF Core 系列的第七篇文章&#xff0c;上一篇文章讲述了 EF Core 中的实体数据修改。这篇文章讲一讲 EF Core 如何进行批量操作。在众多的 ORM 框架中&#xff0c;EF Core 的功能并不是最强大的那个&#xff0c;性能…

半小时一篇文过完C语言基础知识点

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本文定位读者为小白读者&#xff0c;将使用最快的方法过完C语言基础知识…

php变量的判空和类型判断

&#xff08;1&#xff09;var_dump(); 判断一个变量是否已经声明并且赋值&#xff0c;并且打印类型和值 <?php $a; var_dump($a);//输出null<?php var_dump($a);//输出null<?php$a 10; var_dump($a);//输出 int 10&#xff08;2&#xff09;isset() 判断一个变量…

【Envi风暴】Envi插件大全:多波段拆分工具的巧妙使用

很多场合下需要做波段合成,比如波段432合成赋予红绿蓝,构造标准假彩色等等。合成后的文件通常包含多个单波段文件,在Envi中使用layer stacking工具将多个单波段数据合成为一个文件,如下所示: 那么问题来了,合成后的数据该怎样拆开为原来的单波段呢?今天我们就来学习一种…

php表格怎么合并单元格格式化,table标签的结构与合并单元格的实现方法

1.示例代码&#xff1a;复制代码 代码如下:#1234一个完整的例子&#xff1a;复制代码 代码如下:#FirstnameLastnamePhoneQQ1qianshou111111111111111111112qianshou111111111111111111113qianshou111111111111111111114qianshou111111111111111111112.合并上下的单元格(rowspan…

《看聊天记录都学不会C语言?太菜了吧》(9)老公饼真的有老公送?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

@Springboot搭建项目controller层接收json格式的对象失败

今天在使用swagger2测试的时候出错 1、requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容&#xff0c;比如说&#xff1a;application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。 2、 通过req…

『技术群里聊些啥』HttpClient 如何判断是同一终结点

前言官方文档对 HttpClientHandler.MaxConnectionsPerServer 属性有如下说明&#xff1a;获取或设置使用 HttpClient 对象发出请求时允许的最大并发连接数&#xff08;每个服务器终结点&#xff09;。请注意&#xff0c;该限制针对每个服务器终结点&#xff0c;例如&#xff0c…

【Envi风暴】Envi 5.3 SP1经典安装手把手图文教程(含补丁文件)

Envi 5.3具有传感器和数据支持、图像处理和显示、用户界面、二次开发等新功能,本文讲解Envi 5.3 SP1完全安装教程。 下载后的软件包目录如下所示: 目录 一、Envi 5.3 SP1安装 二、Envi 5.3 SP1下载地址 一、Envi 5.3 SP1安装 点击IDL_ENVI5.3 SP1win64.exe,开始安装,…

《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

遥感方法研究张掖市1999-2010年土地利用变化

【方法思路】:本文选取张掖地区两期影像(Landsat 1999-07-07,2010-09-07),用监督分类方法获取各期土地利用类型,与已有的土地利用现状矢量图(landuse2000)相叠加,通过对比分析,进而得出张掖市1999-2010年间土地利用变化情况。 一、实验数据 采用Landsat Tm影像,原始…

【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象

在实际更新Mongo对象时发现&#xff0c;原有的更新代码无法更新复杂的数据类型对象。恰好看到张占岭老师有对该方法做相关的改进&#xff0c;因此全抄了下来。 总的核心思想就是运用反射与递归&#xff0c;对对象属性一层一层挖掘下去&#xff0c;循环创建父类及之类的更新表达…

java openxml 操作 word,openxml word转成xml

word2007无法打开Office Open XML 文档由于种种原因&#xff0c;如程序安装错误、注册表被修改&#xff0c;或系统被病毒侵害等。有时候会造成WORD 2007无法打开.DOC文档的问题&#xff0c;常规的处理办法(右键选择“打开方式”)无效。可以试试如下的方法 &#xff1a;1.打开注…