故障转移云解决方案第1部分

2020年12月29日17:25:03 发表评论 50 次浏览

我们的服务水平协议确保在托管系统上为我们的客户提供99.95%的硬件, 网络和数据可用性。客户可以通过确保他们拥有两台机器(每个火区中的一台机器)来提高可用性。这篇文章是系列文章的一部分, 该系列文章演示了如何利用负载平衡的功能来创建故障转移云解决方案。

对于直接连接到Internet的系统, 乍看之下可能很难。但请放心-这就是虚拟路由器冗余协议(VRRP)的用途-通过使用轮询方法分配无数机器之间的唯一共享IP地址, 使你大获全胜传入IP地址。

我们将在此博客文章中构建此简单解决方案的示例。我们将使用Keepalived(http://www.keepalived.org)工具作为故障转移和负载平衡解决方案。我们将直接在VM上安装Web服务器(Apache)。这为你提供了一个解决方案(使用Keepalived), 可以使用最少的资源轻松创建该解决方案。在下面的博客文章中将描述更复杂的情况。

建议使用这种类型的设置来提高你所有公共IP地址的可用性(如下文所述)。

我们的基本DCD设置:

故障转移云解决方案第1部分1

为了这个测试环境, 我们将使用两台安装和配置完全相同的Debian 7机器。

所有步骤都必须在两台计算机上执行(除非另有说明), 因此请确保针对每种配置调整IP地址和下面提到的其他修改。

对于这种特定情况, 我们将需要其他IP地址。我们可以轻松地在DCD中保留新的IP地址(在" IP管理器"部分中查找):

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

我们将其他IP地址(162.254.25.182)添加到VRRP主服务器。

故障转移云解决方案第1部分3

我的测试设置中有以下网络配置。

VRRP大师

公用IP:eth0 162.254.26.80

专用IP:eth1 10.10.26.12

VRRP从站

公用IP:eth0 162.254.26.81

专用IP:eth1 10.10.26.11

虚拟IP(VRRP主站)

公用IP:eth0 162.254.25.182

创建IP故障转移组

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

在DCD中, 选择公共LAN并转到检查器> IP故障转移.

故障转移云解决方案第1部分4

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

故障转移云解决方案第1部分5

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

配置操作系统

现在我们来谈谈你的操作系统配置。我们安装了Keepalived, 这是一种路由软件, 可用于负载平衡和VRR协议将使用的高可用性。

>易于获取更新

>易于升级

> apt-get安装apache2

> apt-get install keepalived

> apt-get安装ipvsadm

我们将需要唯一的主机名, 以便故障转移能够正常工作。

我将主机命名为" vrrpmaster"和" vrrpslave"。

> vi / etc /主机名

然后执行以下脚本:

> <font color =#38B0DE>-==-荣幸地提出

在我们的标准默认图像中使用并提供了以下图像作为选项, 但是如果你现在想使用自己的图像, 则可以。这是使用DHCP配置网络接口。

> vi / etc / network / interfaces

车eth1

iface eth1 inet dhcp

> dhclient eth1

我们刚刚为Keepalived创建了配置数据。

**请记住要调整你环境的IP地址。

> vi /etc/keepalived/keepalived.conf

# Configuration File for Keepalived

global_defs {
  router_id LVS_MASTER # string identifying the machine
}

# describe virtual service ip
# VRRP Configuration
vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 1
  priority 100
  authentication {
    auth_type PASS
    auth_pass secretpassphrase
  }
  virtual_ipaddress {
    162.254.25.182/32
  }
  # Invoked to master transition
  notify_master "/etc/keepalived/bypass_ipvs.sh del 162.254.25.182"
  # Invoked to slave transition
  notify_backup "/etc/keepalived/bypass_ipvs.sh add 162.254.25.182"
  # Invoked to fault transition
  notify_fault "/etc/keepalived/bypass_ipvs.sh add 162.254.25.182"
  }

virtual_server 162.254.25.182 80 {
  delay_loop 30
  lb_algo rr
  lb_kind DR
  persistence_timeout 50
  protocol TCP

  real_server 10.10.26.12 80 {
    HTTP_GET {
      url {
        path /
        digest 21dde95d9d269cbb2fa6560309dca40c
      }
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 2
    }
  }
  real_server 10.10.26.11 80 {
    HTTP_GET {
      url {
        path /
        digest 21dde95d9d269cbb2fa6560309dca40c
      }
      connect_timeout 3
      nb_get_retry 3
      delay_before_retry 2
      }
    }
  }

将以下信息替换为你的IP地址。

162.254.25.182->虚拟IP地址

10.10.26.12-> VRRP主私有IP(eth1 IP)

10.10.26.11-> VRRP从属专用IP(eth1 IP)

在VRRP Slave conf文件上, 我们必须进行以下更改:

router_id LVS_MASTER-> router_id LVS_SLAVE

状态MASTER->状态BACKUP

优先级100->优先级50

在auth_pass下, 你还可以输入密码。在所有其他VM上, 这必须相同。

根据这些值, Keepalived检查主机是否可用。在我们的例子中, 这是索引页面的路径。这些是来自Apache的用于此标准页面的标准哈希值。当index.html数据更改时, 哈希值也将更改。你可以使用以下命令检查值:

> cd / var / www /

> genhash -s 10.10.26.12 -p 80 -u /index.html

MD5SUM = 21dde95d9d269cbb2fa6560309dca40c

故障转移云解决方案第1部分6

至此, 你的keepalived.conf已完成。

在这种最小配置下, 至关重要的是, " SLAVE"模式所在的计算机必须具有活动的NAT规则。必须确保活动的Web服务器(虚拟IP处于活动状态-在主节点上)实际上是可访问的。为此, 我们使用GaelCharrière的以下脚本" /etc/keepalived/bypass_ipvs.sh"。

#! /bin/sh
#
# Gael Charriere <gael.charriere@gmail.com>
# 10.11.2008
#
# Invoked by keepalived from master/slave
# to slave/master transition to add or remove
# a PREROUTING rule
#
# Essential for slave to redirect incoming
# service packet to localhost. Otherwise a
# loop can appear between master and slave.
#
# The routing table is consulted when a packet
# that creates a new connection is encountered.
# PREROUTING rule alters packets as soon as they come in.
# REDIRECT statement redirects the packet to the machine
# itself by changing the destination IP to the primary
# address of the incoming interface (locally-generated
# packets are mapped to the 127.0.0.1 address).

# Check number of command line args
EXPECTED_ARGS=2
if [ $# -ne $EXPECTED_ARGS ]; then
  echo "Usage: $0 {add|del} ipaddress"
  exit 1
fi

# Check if second arg is a valid ip address
VIP=$2
OLD_IFS=$IFS
IFS="."
VIP=( $VIP )
IFS=$OLD_IFS
# Check that ip has 4 parts
  if [ ${#VIP[@]} -ne 4 ]; then
    echo "IP address must have 4 parts"
    echo "Usage: $0 {add|del} ipaddress"
    exit 1
fi 

# Check that each parts is a number which
# varies between 0 and 255
for oct in ${VIP[@]} ; do
    echo $oct | egrep "^[0-9]+$" >/dev/null 2>&1
  if [ $? -ne 0 ]; then
    echo "$oct: Not numeric"
    echo "Usage: $0 {add|del} ipaddress"
    exit 1
else
  if [ $oct -lt 0 -o $oct -gt 255 ]; then
    echo "$oct: Out of range"
    echo "Usage: $0 {add|del} ipaddress"
    exit 1
  fi
fi
done

# If we are here, ip address is validated
VIP="${VIP[0]}.${VIP[1]}.${VIP[2]}.${VIP[3]}"

# Add or remove the prerouting rule
case "$1" in
add)
        # check if the rule was already specified
        n=$(iptables -t nat -L| grep $VIP | wc -l)
  if [[ $n == 0 ]]; then
        # the rule was not found, add it
        iptables -A PREROUTING -t nat -d $VIP -p tcp -j REDIRECT
    fi
    ;;
    del)
        # check if the rule was already specified
      n=$(iptables -t nat -L| grep $VIP | wc -l)
      while [[ $n > 0 ]]; do
        # remove the rule
        iptables -D PREROUTING -t nat -d $VIP -p tcp -j REDIRECT
        n=$(($n-1))
      done
    ;;
    *)
    echo "Usage: $0 {add|del} ipaddress"
    exit 1
    esac
    exit 0

我们设置权限以确保文件可以执行:

> <font color ="#ffff00">-==-自豪地提出

IP转发需要打开, 并且IP反向路径过滤功能必须关闭。为此, 我们必须进行以下更改:

# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth1.rp_filter=0

#取消注释下一行以启用IPv4的数据包转发

net.ipv4.ip_forward = 1

填写以下字段:

> <font color =#38B0DE>-==-荣幸地提出

这些是此方案所需的设置。

我们可以使用以下命令启动Keepalived(如果收到错误通知, 则表明Keepalived已在运行):

>服务保持活力

在Debian中, Keepalived将消息放在/ var / log / Messages下。如果要在调试消息中包含更多文本, 还可以手动启动Keepalived(声明所需选项):

> keepalived -d -log-detail

现在, 我们可以在VRRP Master上的eth0上看到我们的虚拟IP地址。该地址应响应ping, 并且该IP地址也提供了Apache Web服务器。为了获取我们的网络接口的信息, 我们将使用以下命令:

> ip地址列表

故障转移云解决方案第1部分7

如果VRRP主设备发生故障, 则VRRP从设备将接管IP地址; 1或2次ping之后, 该IP地址将再次可用。

故障转移云解决方案第1部分8

你可以通过停止Keepalived运行类似的测试。

>服务保持停止

再次启动Keepalived时, 该IP地址将自动分配给VRRP主设备。发生这种情况是因为keepalived.conf文件具有更高的优先级。

负载平衡功能基于" Linux虚拟服务器", 并以循环方式实现。每个新IP地址都路由到其他主机。如果VRRP主设备发生故障, 则VRRP从设备将接管松弛部分。

现在可以在我们的Apache2服务器上进行其他测试。如果我们在两个Web服务器上都创建一个HTML文件。

请注意:调整" index.html"内容时, 哈希值也会更改, 因此请确保使用适当的MD5SUM值生成和修改conf文件。

> vi /var/www/index.html

插入以下内容:

<HTML>
 <BODY>
   <H2>
   Test WebServer 1
   </H2>
 </BODY>
</HTML>

与上述类似, 我们将html文件更改为VRRP从站上的Test WebServer2。

当我们使用虚拟IP地址(http://162.254.25.182/index.html)提交http请求时, 我们可以看到我们登陆的服务器。可以在另一个Web服务器上设置第二个连接(另一个IP地址)。然后, 你可以使用以下命令检查负载均衡器组件的状态:

> <font color ="#ffff00">-==-同步:ßÇÈâÈâ

现在, 我们已经建立了故障安全系统。如果你的VRRP主设备(位于第一个火区区域)崩溃, 则VRRP从设备(位于第二个火区区域)在那里可以腾空。

在下一个教程中, 我们将带你完成设置更复杂的负载平衡解决方案的过程。

一盏木

发表评论

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