【图灵干货】java教程keepalived实现双机热备

发布时间:2021-12-05 15:09:36

  keepalived简介。

  Keepalived是下一种可供Linux使用的轻量级解决方案。高可用性(HighAvalilability,HA)实际上有两个含义:广义上,即整个系统中具有较高的可用性,狭义上为主机冗余和接管,该工具和HeartBeatRoseHA实现相似的功能,都能实现服务或网络的高可用性,但有区别,HeartBeat是一款为HA软件提供基本功能的专业、功能完备的高可用软件。例如:检测心跳、资源接管、检测集群中的服务、集群节点共享IP地址的拥有者等。HeartBeat很强大,但与HeartBeat相比,部署和使用相对麻烦。Keepalived的高可用性主要通过虚拟路由冗余实现,尽管它不具有HeartBeat的功能,但对Keepalived的部署和使用十分简单,仅需一份配置就可完成。

  什么是Keepalived?

  Keepalived最初被设计用于LVS,用于监测集群系统中不同服务节点的状态,按照TCP/IP参考模型的第三层、第四层、第五层交换机系统检测各服务节点的状态;若服务器节点发生异常,或工作失败,Keepalived就会检测到,而出现故障的服务器节点则从集群系统中删除,所有这些工作都是自动完成,无需人工干预,只有修复失败的服务节点,才能进行人工工作。

  之后,Keepalived又加入了VRRP,VritrualRouterRedundancyProtocol,VirtualTouch冗余协议旨在解决在静态路由中出现的单点故障问题,可通过VRRP实现网络稳定的连续运行,所以Keepalvied一方面可以进行服务器状态检测和故障隔离,另一方面,HAcluster还具有HAcluster功能,下面将介绍VRRP协议的实现过程。

  VRRP协议及其工作原理。

  在真实的网络环境下。各主机间的通信均通过配置静态路由或(默认网关)来实现,在主机之间的路由器发生故障时,通信将不能正常通信,在这种通信模式中,路由器就成为一个单点瓶颈,为解决这一问题,引入了VRRP协议。

  VRRP协议是一种主备模式,通过VRRP实现网络故障时,能够透明地进行设备切换,而不影响各主机间的数据通信,同时也不影响VRRP协议的传输。

  VRRP能够把两个或更多的物理路由器设备虚拟为一个虚拟路由,该虚拟路由器通过外部虚拟IP(一种或多种)提供服务,同时在虚拟路由器内的十多个物理路由器协同工作,在一个相同的时间里,只有一个物理路由器对外提供服务,这个物理路由设备就变成了主要路由器(Master角色),一般而言,Master是由选举算法生成的,具有外部服务的虚拟IP,提供多种网络功能,例如:ARP请求,ICMP数据转发等等,并且其他物理路由器没有外部虚拟IP,也没有外部网络IP,只是从MASTER接收VRRP状态通知,而这些路由器一般都称为“BACKUP角色”,处于BACKUP角色的备份路由器在主路由器发生故障时会重新选择,生成新的主路由器进入MASTER角色,继续提供外部服务,整个转换过程对用户完全透明。

  每一个虚拟路由器都有一个惟一的标识号,叫做VRID,其中一个VRID和一组IP地址组成一个虚拟路由器。VRRP协议中,所有消息均以IP组播方式进行,而在虚拟路由器中,则只有Master角色的路由器发送了VRRP包,在BACKUP角色下的路由器仅接收主角色所发送的消息信息,用于监视主运行状态,如一一一样不会发生BACKUP抢占,除非其具有较高的优先级,而且,如果MASTER不能使用,BACKUP也无法接收Master发送的信息,因此确定了Master的故障,然后,多个BAKCUP将进行选举,最重要的BACKUP被称为新MASTER,这种选举角色转换非常迅速,这样就确保了服务的持续可用。

  Keepalvied的工作原理

  上面我们介绍了Keepalived通过VRRP实现高可用性的工作原理,而Keepalived作为一个高性能集群软件,它还能实现对集群中服务器运行状态的监控以及故障隔离,下面我们介绍一下Keepalived对服务器运行状态和故障隔离的工作原理。

  Keepalived工作在TCP/IP 参考模型的 三层、四层、五层,也就是分别为:网络层,传输层和应用层,根据TCP、IP参数模型隔层所能实现的功能,Keepalived运行机制如下:

  在网络层:我们知道运行这4个重要的协议,互联网络IP协议,互联网络可控制报文协议ICMP、地址转换协议ARP、反向地址转换协议RARP,在网络层Keepalived在网络层采用最常见的工作方式是通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

  在传输层:提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP,传输控制协议TCP可以提供可靠的数据输出服务、IP地址和端口,代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接,而Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

  在应用层:可以运行FTP,TELNET,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

  Keepalvied的安装

  我们在本文中的测试环境如下:

  两台物理服务器和一个虚拟服务器(vip):

  master: centos7 192.168.8.4

  backup: centos7 192.168.8.6

  vip:192.168.8.100

  测试环境的网络topology图如下:

1.jpg

  节点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 :说明:目前在CentOS7上安装需要1.3.2以上版本,否则会出现一个操作系统内核错误,不好搞定,建议使用root用户安装

  2. 解压keepalived :tar -xvf keepalived-1.3.4.tar.gz

  3. ./configure

  4. make

  5. make install

  6. whereis keepalived

  7. mkdir /etc/keepalived

  8. cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/

  9. cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ (目前这个文件在keepalived解压后,存在keepalived文件夹,etc文件夹,init.d中,具体看安装的版本)

  10. cp /usr/local/etc/sysconfig/keepalived /etc/sys

  11. cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/

  12. cp /usr/local/sbin/keepalived /usr/sbin/

  13. chkconfig --add keepalived 添加操作系统启动

  14. chkconfig --list keepalived

  15. service keepalived start/stop/restart 启动关闭keepalived服务

  Keepalvied的防火墙配置

  防火墙规则(主从机都要配置,双向打开vrrp服务,建议关闭防火墙先测试keepalived配置是否正确,这里是firewall防火墙的配置,iptables的话查下):

  16. firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

  17. firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --out-interface eth0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT

  18. firewall-cmd --reload

  Keepalvied配置

  分别配置主机从机的keepalived.conf文件,配置完成后重启keepalived服务,双机热备功能服务器配置完成。

  1. 主机的配置

2.jpg

  2. 从机的配置

3.jpg

上一篇 Hibernate淘汰了?只是你不会用而已!
下一篇 【图灵干货】经典算法之冒泡排序

文章素材均来源于网络,如有侵权,请联系管理员删除。

标签: Java教程Java基础Java编程技巧面试题Java面试题