我想要针对 Amazon Elastic Compute Cloud (EC2) 实例为虚拟 IP 地址故障转移实施多个 IP 地址。但是,在 Ubuntu 16.04 系统上,虚拟 IP 监控脚本失败。如何解决此问题?

要在 Ubuntu 系统上运行 vip_monitor.sh 脚本,您必须先安装 aws-apitools-common 程序包。

1.    下载并配置 AWS 命令行界面 (CLI)

$ sudo apt-get install ec2-api-tools

2.    验证在安装 CLI 后存在以下脚本。

/usr/bin/ec2-assign-private-ip-addresses
/usr/bin/ec2-describe-instances

3.    使用 scp 命令将 /etc/profile.d/aws-apitools-common.sh 文件从 Amazon Linux AMI 计算机复制到 Ubuntu 计算机。

$ sudo scp -i UbuntuKey.pem /etc/profile.d/aws-apitools-common.sh ubuntu@Instance_IP:~

注意:默认情况下,Amazon Linux 2 中未安装 aws-apitools-common 程序包。

4.    将 aws-apitools-common.sh 脚本复制到与 vip_monitor.sh 脚本相同的目录,然后提供脚本执行权限。

$ sudo cp ./aws-apitools-common.sh /root
$ sudo chmod a+x aws-apitools-common.sh

5.    创建 /opt/aws/bin 目录和符号链接

$ sudo mkdir -p /opt/aws/bin/
$ ln -s /usr/bin/ec2-describe-instances /opt/aws/bin/
$ ln -s /usr/bin/ec2-assign-private-ip-addresses /opt/aws/bin/ 

6.    通过将 /bin/sh 更改为 /bin/bash 来修改 vip_monitor.sh 脚本的第一行,以便脚本使用 Bash Shell。

以下是 vip_monitor.sh 脚本的示例。

#!/bin/bash
# This script will monitor another HA node and take over a Virtual IP (VIP)
# if communication with the other node fails

# High Availability IP variables
# Other node's IP to ping and VIP to swap if other node goes down
HA_Node_IP=172.31.10.16
VIP=172.31.6.106

# Specify the EC2 region that this will be running in
REGION=us-west-1

# Run aws-apitools-common.sh to set up default environment variables and to
# leverage AWS security credentials provided by EC2 roles
. ./aws-apitools-common.sh

# Determine the instance and ENI IDs so we can reassign the VIP to the
# correct ENI. Requires EC2 describe-instances and assign-private-ip-address
# permissions. The following example EC2 Roles policy will authorize these
# commands:
# {
#  "Statement": [
#    {
#      "Action": [
#        "ec2:AssignPrivateIpAddresses",
#        "ec2:DescribeInstances"
#      ],
#      "Effect": "Allow",
#      "Resource": "*"
#    }
#  ]
# }

Instance_ID=`/usr/bin/curl --silent http://169.254.169.254/latest/meta-data/instance-id`
ENI_ID=`/opt/aws/bin/ec2-describe-instances $Instance_ID --region $REGION | grep eni -m 1 | awk '{print $2;}'`

echo `date` "-- Starting HA monitor"
while [ . ]; do
  pingresult=`ping -c 3 -W 1 $HA_Node_IP | grep time= | wc -l`
  if [ "$pingresult" == "0" ]; then
    echo `date` "-- HA heartbeat failed, taking over VIP"
    /opt/aws/bin/ec2-assign-private-ip-addresses -n $ENI_ID --secondary-private-ip-address $VIP --allow-reassignment --region $REGION
    pingresult=`ping -c 1 -W 1 $VIP | grep time= | wc -l`
    if [ "$pingresult" == "0" ]; then
      echo `date` "-- Restarting network"
      /sbin/service network restart > /dev/null 2>&1
    fi
    sleep 60
  fi
  sleep 2
done

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2019 年 1 月 31 日