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 명령을 사용하여 Amazon Linux AMI 머신의 /etc/profile.d/aws-apitools-common.sh 파일을 Ubuntu 머신에 복사합니다.

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

참고: aws-apitools-common 패키지는 Amazon Linux 2에서 기본적으로 설치되지 않습니다.

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.    스크립트에 Bash 셸이 사용되도록 /bin/sh/bin/bash로 변경하여 vip_monitor.sh 스크립트의 첫 번째 행을 수정합니다.

다음은 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 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2019-01-31