zoukankan      html  css  js  c++  java
  • 使用keepalived实现双机热备

    通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
    当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
    下面来以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决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
    主节点的配置如下:

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

    备用节点的配置如下:

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

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

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

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

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

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


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

    1. this is the test page  
    2. <br>  
    3. from server 192.168.8.4  

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

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

    1. this is the test page  
    2. <br>  
    3. 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

    1. this is the test page  
    2. <br>  
    3. from server 192.168.8.4  

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

    1. this is the test page  
    2. <br>  
    3. from server 192.168.8.6  

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

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


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

  • 相关阅读:
    SAP OPEN UI5 Step 8: Translatable Texts
    SAP OPEN UI5 Step7 JSON Model
    SAP OPEN UI5 Step6 Modules
    SAP OPEN UI5 Step5 Controllers
    SAP OPEN UI5 Step4 Xml View
    SAP OPEN UI5 Step3 Controls
    SAP OPEN UI5 Step2 Bootstrap
    SAP OPEN UI5 Step1 环境安装和hello world
    2021php最新composer的使用攻略
    Php使用gzdeflate和ZLIB_ENCODING_DEFLATE结果gzinflate报data error
  • 原文地址:https://www.cnblogs.com/crazylqy/p/7742040.html
Copyright © 2011-2022 走看看