故障转移云方案第2部分

2020年12月29日17:22:57 发表评论 37 次浏览

In第1部分, 我们讨论了使用Keepalived使用最少的资源来创建负载平衡和故障转移云的方案。在此博客文章中, 我想讨论一个更复杂的设置, 该设置在使用NAT和LVS时会更多利用Keepalived的功能。

为了实现所需的设置, 我们将在两个不同的可用区域中创建两个网关服务器(用于双重冗余)。作为操作系统, 我们将使用Debian 7, 但你也可以使用其他Linux发行版。

基本概念

在更复杂的安全设置中, 通常(并建议)在不将实际服务器暴露于公共互联网的情况下操作实际服务器, 并通过通用网关(例如DMZ)进行发布。网关将启用NAT-ing, 以允许访问专用网络上的系统, 并使用DNAT操作所需的服务。可以使用不同的iptables规则来实现不同的网关安全配置。

在以下示例中, 我创建了一个简单的设置(非冗余), 以强调与本文详细介绍的HA设置之间的主要体系结构差异。假设我们在私有网络上的各个虚拟机上托管了以下不同的服务, 如下所示:

  • 具有IP 10.14.58.11的Web服务器
  • 带有IP 10.14.58.17的电子邮件服务器
  • IP 10.14.58.14的中央管理服务器(SSH)
  • 网关的公共IP地址是162.254.27.24.26。
  • 网关的内部IP为10.14.58.15。

在此配置中, 网关的内部IP(设置为默认网关)在专用网络上的服务器的网络接口上注册。我们使用以下iptables规则重定向必要的网络请求:

故障转移云方案第2部分1

iptables -t nat -A POSTROUTING -o eth0 -j伪装

iptables -t nat -A路由-i eth0 -p tcp -dport 80 -j DNAT -to 10.14.58.11:80

iptables -t nat -A路由-i eth0 -p tcp -dport 25 -j DNAT-至10.14.58.17:25

iptables -t nat -A路由-i eth0 -p tcp -dport 22 -j DNAT-至10.14.58.14:22

HA设置

为了确保上述设置具有高可用性, 虚拟机必须与不同的可用区关联-因此, 每个可用区中需要一个网关, 一台Web服务器和一台SMTP服务器。在这种情况下, 如果一台服务器在两个区域中的任何一个发生故障, 则另一台服务器必须准备就绪以弥补松弛。 Management Server并非为高可用性而设计, 而是用作管理工具。它不是所提供服务的组成部分。或者, 你可以使用数据中心设计器中可用的远程控制台, 该控制台允许在任何时间点访问所有服务器(与它们的状态无关)。如果Management Server发生故障, 则可以快速重建或从快照重新设置它。

故障转移云方案第2部分2

上图似乎比你预期的要复杂一些, 但是请不要担心-我将逐步指导你完成该过程。如果要以高可用性进行操作, 则必须绝对确定由相应服务提供的数据对于所有服务器都是同步的。

注意:此博客文章中不包括已部署服务的数据同步配置。

HA设置-DCD配置

描述上图的DCD设置在我们的数据中心设计器中配置如下:

故障转移云方案第2部分3

在此设置中要记住两个重要方面:

  • 对于高可用性组件(在我们的示例中为Webserver 1和Webserver2), 需要在设置设置之前分配可用性区域;否则, 请参见图3。 (区域1或区域2)。也可以随时更改它们。
故障转移云方案第2部分4
故障转移云方案第2部分5
  • 将需要一个额外的保留IP地址来寻址两个网关系统之一的公共网络接口。所需的开放服务将通过此IP发布。
故障转移云方案第2部分6

在下一步中, 创建用于公共LAN的虚拟IP地址的IP故障转移组。

在DCD中, 选择公共LAN并转到

检查器> IP故障转移

.

故障转移云方案第2部分7

点击创建故障转移组打开对话框, 你可以在其中设置DCD中的IP故障转移。

故障转移云方案第2部分8

来自IP下拉菜单, 选择要为其创建故障转移的虚拟IP。选择所有可能使用此IP地址的NIC。至于我们的示例设置, 其中包括公共LAN上可用的所有NIC。通过激活以下选项来定义故障转移设置的主节点主相应NIC的单选按钮。如果一切都已设置, 请单击创建故障转移组并配置你的更改以创建故障转移组。

具有Keepalived的HA设置

高可用性功能的核心组件是Keepalived。

什么是Keepalived?根据他们的网站:" Keepalived是用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础架构提供负载均衡和高可用性的简单而强大的工具。Keepalived实现了一组检查程序以动态并根据其健康状况自适应地维护和管理负载平衡的服务器池;此外, Keepalived还实现了一组连接到VRRP有限状态机的挂钩, 从而提供了低级和高速协议交互。基础设施。"

使用Keepalived, 你可以:

  • 使用VRRP设置一个或多个冗余路由器(网关)。
  • 根据在相应的后端上路由的广泛参数配置一个或多个池, 以进行目标负载分配。

网关配置

在此步骤中, 我们将使用Keepalived和VRRP设置网关。除非另有说明, 否则以下两个网关系统(VRRP主站和VRRP从站)的所有以下配置都非常相似, 并且与上一篇博客文章中创建的配置相同。

  • 系统更新和数据包安装

首先更新系统, 并安装必要的附加软件组件。在此步骤中将安装Keepalived。 lpvsadm的额外安装为进一步的负载平衡设置做准备。

  • 带有apt-get更新和apt-get升级的系统更新
  • 安装Keepalived:apt-get install keepalived
  • 安装ipvsadm:apt-get安装ipvsadm

系统配置调整

  • 建议为你的系统提供唯一的主机名(例如, vrrp-master和vrrp-slave)
  • IP转发必须打开。需要在此文件/etc/sysctl.conf中调整以下信息:#
    取消注释下一行以启用IPv4网络的数据包转发
    .ipv4.ip_forward = 1检查

    使用sysctl -p更改配置。
  • 需要实施基于iptables的NAT规则, 该规则将在每次系统启动时启动。为此, 我们创建以下文件:/etc/iptables.rules:
*nat
:PREROUTING ACCEPT [50:2000]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:120]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

可以使用你首选的编辑器进行处理。或者, 你可以使用以下方法激活规则:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

最后, 我们使用iptables-save> /etc/iptables.rules保存iptables的配置。为了确保此规则在每次启动时启动, 我们添加:

#!/bin/bash/sbin/iptables-restore < /etc/iptables.rules to /etc/network/if-pre-up.d/iptables
  • Keepalived VRRP配置

此配置的目标是创建一个VRRP路由组。该路由组包括两个VRRP实例。虚拟公用IP地址(162.254.27.26)的一个实例, 虚拟专用网关IP地址(10.14.58.254)的一个实例。

故障转移云方案第2部分9

此文件中进行了以下所有配置:/etc/keepalived/keepalived.conf。

以下代码以注释的形式提供了你需要备份系统的窗口。全局Keepalived配置必须在每个唯一主机(lvs_id)中至少包含一个条目:

!
! Global Config for keepalived
!
global_defs {
   # uncomment the next line for the Master System
   lvs_id LVS_MASTER
   # uncomment the next line for the Backup System
   # lvs_id LVS_BACKUP
}

为了使用虚拟的公共IP和虚拟的私有网关IP实现所需的配置, 我们配置了VRRP-Group VGROUP1。

  • 第一个VRRP实例VI_PUBLIC_1被分配给eth0处的虚拟开放IP。
  • 第二个VRRP实例VI_GATEWAY_1被分配给位于eth1的虚拟专用网关IP。

必须将以下代码添加到Keepalived配置中:

!
! VRRP Config for keepalived
!
! define a vrrp group
vrrp_sync_group VGROUP1 {
   group {
     VI_PUBLIC_1
     VI_GATEWAY_1
   }
} 
! vrrp instance for the public interface
vrrp_instance VI_PUBLIC_1 {
   ! uncomment the next line for the Master System
   state MASTER
   ! uncomment the next line for the Backup System
   ! state BACKUP
   interface eth0
   lvs_sync_daemon_inteface eth0
   virtual_router_id 51
   ! uncomment the next line for the Master System
   priority 100
   ! uncomment the next line for the Backup System
   ! priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass MySuperSecretPassword
   }
   virtual_ipaddress {
       162.254.27.26
   }
}
! vrrp instance for the internal gateway interface
vrrp_instance VI_GATEWAY_1 {
   ! uncomment the next line for the Master System
   state MASTER
   ! uncomment the next line for the Backup System
   ! state BACKUP
   interface eth1
   lvs_sync_daemon_inteface eth1
   virtual_router_id 52
   ! uncomment the next line for the Master System
   priority 100
   ! uncomment the next line for the Backup System
   ! priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass MySuperSecretPassword
   }
   virtual_ipaddress {
       10.14.58.254
   }
}

至此, VRRP网关配置结束。

可以使用/etc/init.d/keepalived start在两个系统上启动Keepalived。然后, 主系统将被从系统自动替换。可以通过停止主系统来仔细检查, 以查看发生了什么。状态通知位于/ var / log / syslog的Debian系统中(有关更多详细信息, 请检查我的上一篇文章)这里)。

可以使用ip addr list检查IP配置状态。现在, 两个虚拟IP地址在主系统上的特定网络接口上均处于活动状态。

root@vrrp-master:~# ip addr list
1: lo: <LOOPBACK, UP, LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 64000 qdisc pfifo_fast state UP qlen 1000
   link/ether 02:01:1c:32:1d:28 brd ff:ff:ff:ff:ff:ff
   inet 162.254.27.24/32 brd 162.254.27.24 scope global eth0
   inet 162.254.27.26/32 scope global eth0
   inet6 fe80::1:1cff:fe32:1d28/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 64000 qdisc pfifo_fast state UP qlen 1000
   link/ether 02:01:4d:2d:0a:c5 brd ff:ff:ff:ff:ff:ff
   inet 10.14.58.15/24 brd 10.14.58.255 scope global eth1
   inet 10.14.58.254/32 brd 10.14.58.255 scope global eth1
   inet6 fe80::1:4dff:fe2d:ac5/64 scope link
       valid_lft forever preferred_lft forever
  • HA设置-后端系统

使用Keepalivd和IPVS正确设置负载平衡器的强制性要求是你的系统使用HA-网关IP(10.14.58.254)作为默认网关。为此, 可以在/ etc / network / interfaces中手动配置网络接口。例如, 这是Webserver1的界面配置:

auto eth0
iface eth0 inet static
       address 10.14.58.11
       netmask 255.255.255.0
       gateway 10.14.58.254
       dns-nameservers 69.194.131.41
       pre-up /sbin/ifconfig $IFACE mtu 64000
  • 如果此网络配置处于活动状态, 则你的相应系统可以访问Internet。现在可以安装系统更新和其他必要的应用程序。在我们的案例中, 我们可以继续在Web服务器上安装Apache(apt-get install apache2), 在邮件服务器上安装Postfix(apt-get install postfix)。

  • HA设置-负载平衡

负载平衡组件由Keepalived控制。它控制IPVS的负载平衡配置。 keepalived.conf中用于负载平衡的配置代码包括定义一个虚拟服务器(连接到虚拟公共IP的服务器)以及定义专用网络上的真实服务器(最多N个)。一个keepalived.conf中可以配置多个负载均衡器。根据所使用的应用协议, 有许多不同的方法可以检查真实服务器的运行状态。如果不再将真实服务器的当前状态视为可用, 则在解决任何问题之前, 不会再向其转发任何请求。

SMTP负载平衡器

SMTP负载平衡器应在TCP端口25(virtual_server)上接受来自公共IP 162.254.27.26的请求, 并且两个服务器(real_server)10.14.58.17和10.14.58.1均将以Round Robin方式(lb_algo rr)在私有端口上共享它们。净(lb_kind_NAT)。测试真实服务器的运行状态, 以查看它们是否连接到端口25。

要创建此配置, 请将以下代码添加到/etc/keepalived/keepalived.conf中(两个网关系统上均相同)。

virtual_server 162.254.27.26 25 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP
   
   real_server 10.14.58.17 25
    {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 25
         }
     }

   real_server 10.14.58.12 25
   {
        weight 1
        TCP_CHECK {
             connect_timeout 3 
             connect_port 25
        }
    }
}
  • 重新启动keepalived后, 负载均衡器处于活动状态。可以使用ipvsadm -l检查IPVS负载平衡器的状态。

root@vrrp-master:~# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP ip162.254.27.24.26.pbiaas.com:sm rr
 style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px;">-> 10.14.58.17:smtp             Masq   1     0         0
-> 10.14.58.12:smtp             Masq   1     0         0
  • HTTP负载均衡器

  • HTTP负载平衡器应以非常相似的方式在TCP端口80(virtual_server)上接受来自公共IP 162.254.27.26的请求, 并且两个服务器(real_server)10.14.58.11和10.14.58.13应该通过循环方法(lb_algo rr)在专用网上(lb_kind_NAT)。测试真实服务器的运行状态, 以查看它们是否使用HTTP-GET连接到测试URL。此测试不仅检查是否可以对URI进行HTTP调用, 而且还验证返回的文档的哈希值是否正确-而不是存储的哈希值-(即文档已更改或存在HTTP错误) 。它测试他们是否可以接收到服务器的连接, 否则认为服务器有故障。

    为了生成哈希值, 我们使用以下命令:

genhash -s [real server IP] -p 80 –u [document to check]
  • 在我们的情况下:

root@vrrp-master:~# genhash -s 10.14.58.11 -p 80 -u /alive.txt
MD5SUM = ea53b3baf477a283376779a3c1985085
  • 要创建此配置, 我们必须将以下代码添加到/etc/keepalived/keepalived.conf中(两个网关系统上均相同):

virtual_server 162.254.27.26 80 {
   delay_loop 6
   lb_algo rr 
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP

   real_server 10.14.58.11 80
   {
      weight 1
      HTTP_GET {
        url {
           path /alive.txt
               digest ea53b3baf477a283376779a3c1985085
           }
           connect_timeout 10
           connect_port 80
           nb_get_retry 3
           delay_before_retry 10
           }
    }

    real_server 10.14.58.13 80
    {
      weight 1
      HTTP_GET {
        url {
           path /alive.txt
               digest 01bc6b572ba171d4d3bd89abe9cb9a4c
           }    
           connect_timeout 10
           connect_port 80
           nb_get_retry 3
           delay_before_retry 10
          }
      }
}
  • 重新启动系统后, 已配置的负载均衡器在Keepalived中处于活动状态。然后可以使用ipvsadm -l检查IPVS负载平衡器的状态。

root@vrrp-master:~# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP ip162.254.27.24.26.pbiaas.com:sm rr
 -> 10.14.58.17:smtp             Masq   1     0         0
 -> 10.14.58.12:smtp             Masq   1     0         0
TCP ip 162.254.27.24.26.pbiaas.com:ht rr
 -> 10.14.58.11:http             Masq   1     0         0
 -> 10.14.58.13:http             Masq   1     0         0
  • 两个负载均衡器处于活动状态, 实际服务器处于运行状态。

    HA系统已完成!

    而已!你的结果是一个高可用性系统, 该系统分布在不同的可用区域中。对于这种水平可扩展的高可用性系统, 每个负载均衡器也可能有两个以上的真实服务器。你可以根据需要轻松地增加或关闭额外的服务器, 具体取决于你的负载行为。

那管理服务器呢?

  • 可以通过几种不同的方式使管理服务器可用。可以通过网关系统(使用iptables-方法1)或负载平衡器(keepalived.conf中的一台真实服务器-Method2)进行发布。

    方法1

    在两个网关主机上启用iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 22 -j DNAT -to 10.14.58.14:22运行并使用iptables-save保存活动iptables /etc/iptables.rules配置> /等/iptables.rules。

    方法二

    keepalived.conf放在另一个负载平衡器上。此负载平衡器应在端口22(virtual_server)和专用网络(lb_kind NAT)上的单个服务器(real_server 10.14.58.14)上接受来自公共IP 162.254.27.26的请求。已测试真实服务器的运行状态以检查其是否可以连接到端口22。要创建此配置, 请将以下代码添加到此文件/etc/keepalived/keepalived.conf(两个网关上都相同):

virtual_server 162.254.27.26 22 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP
 
   real_server 10.14.58.14 22
   {
       weight 1
       TCP_CHECK {
               connect_timeout 3
               connect_port 22
       }
   }
}
  • 完整的keepalived.conf

    在我的示例中, 我决定对中央管理服务器使用方法2。我的配置的完整keepalived.conf如下:

!
! Global Config for keepalived
!
global_defs {
   ! uncomment the next line for the Master System
   lvs_id LVS_MASTER
   ! uncomment the next line for the Backup System
   ! lvs_id LVS_BACKUP
}
 
!
! VRRP Config for keepalived
!
 
! define a vrrp group
vrrp_sync_group VGROUP1 {
   group {
     VI_PUBLIC_1
     VI_GATEWAY_1
   }
}
 
! vrrp instance for the public interface
vrrp_instance VI_PUBLIC_1 {
   ! uncomment the next line for the Master System
   state MASTER
   ! uncomment the next line for the Backup System
   ! state BACKUP
   interface eth0
   lvs_sync_daemon_interface eth0
   virtual_router_id 51
   ! uncomment the next line for the Master System
   priority 100
   ! uncomment the next line for the Backup System
   ! priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass MySuperSecretPassword
   }
   virtual_ipaddress {
       162.254.27.26
   }
}
 
! vrrp instance for the internal gateway interface
vrrp_instance VI_GATEWAY_1 {
   ! uncomment the next line for the Master System
   state MASTER
   ! uncomment the next line for the Backup System
   ! state BACKUP
   interface eth1
   lvs_sync_daemon_inteface eth1
   virtual_router_id 52
   ! uncomment the next line for the Master System
   priority 100
   ! uncomment the next line for the Backup System
   ! priority 50
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass MySuperSecretPassword
   }
   virtual_ipaddress {
       10.14.58.15
   }
} 

!
! LVS loadbalancing configuration for keepalived
!
 
! first virual Server
virtual_server 162.254.27.26 80 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP
 
   real_server 10.14.58.11 80
   {
       weight 1
       HTTP_GET {
           url {
               path /alive.txt
                       digest ea53b3baf477a283376779a3c1985085
               }
               connect_timeout 10
               connect_port 80
               nb_get_retry 3
               delay_before_retry 10
       }
   }
   real_server 10.14.58.13 80
   {
       weight 1
       HTTP_GET {
           url {
               path /alive.txt
                       digest 01bc6b572ba171d4d3bd89abe9cb9a4c
               }
               connect_timeout 10
               connect_port 80
               nb_get_retry 3
               delay_before_retry 10
       }
   }
}

! second virual Server
virtual_server 162.254.27.26 25 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP
 
   real_server 10.14.58.17 25
   {
       weight 1
       TCP_CHECK {
               connect_timeout 3
               connect_port 25
       }
   }
   real_server 10.14.58.12 25
   {
       weight 1
       TCP_CHECK {
               connect_timeout 3
               connect_port 25
       }
   }
}
 
! third virtual Server
virtual_server 162.254.27.26 22 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   nat_mask 255.255.255.0
   protocol TCP
 
   real_server 10.14.58.14 22
   {
       weight 1
       TCP_CHECK {
               connect_timeout 3
                connect_port 22
       }
   }
}
  • 我们希望该故障转移云方案系列对你有所帮助。

有用的链接

  • Keepalived主页

    IPVS主页

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: