[AWS] AWS Cloud 환경에서 VIP 구현방안

Symptoms

  • AWS Cloud 환경에서 MCCS로 VIP 할당 후 외부에서 해당 IP로 통신이 불가능

Environment

  • AWS Cloud (Native)
  • Windows, Linux 공통
  • MCCS 4.x

Cause

  • AWS Cloud 환경에서는 OS내부에서 명령어로 VIP를 할당해도 외부에서 해당 IP로 통신이 불가능하다.

Solution

1. AWS의 ENI or Secondary-IP 제어를 통한 VIP 구성
– 페일오버시 AWS CLI 명령어를 수행하여 운영노드의 서비스용 vNIC을 제거하고, 대기노드에 서비스용 vNIC 할당 개념.
– 테스트시 (운영노드 vNIC 제거 -> 대기노드 vNIC 할당)후 OS내부에서 서비스용 IP 미존재 및 통신불가 발생
– AWS에 Case Open 하였으나, 해당 방식으로 사용불가 잠정결론.

2. AWS의 LB를 사용한 VIP 구성
– VIP를 MCCS에서 관리하지 않고 L4 Switch에 할당/관리 하는 방식과 유사한 개념.
– VIP는 AWS LB에 위치하며, 이중화 대상 OS내부 에서는 확인되지 않음.
– AWS에서 주기적으로 특정 포트(예 : Oracle-1521, ASCS-3600) Alive 상태를 체크하여, Alive 노드로만 패킷을 Forwarding 수행.

3. AWS의 Overlay-ip 사용한 VIP 구성
– MCCS로 OS내부에 VIP를 할당하고, AWS CLI로 AWS Routing Table 변경 하여, 통신이 가능하게 해주는 개념.
– AWS업체(베스핀글로벌)와 함께 MCCS로 테스트하여, 정상동작여부가 검증된 방식.
– 이중화 대상 OS내부 에서 VIP가 확인 됨.
– overlay-ip 사용을 위한 요구사항 (1Gbps 이상의 DX 네트워크) 존재.
– https://aws.amazon.com/ko/blogs/apn/making-application-failover-seamless-by-failing-over-your-private-virtual-ip-across-availability-zones/

* AWS Routing Table 변경 스크립트 예시
==============================
#!/bin/bash
export table1=rtb-0506bbe0d5b0560c3
export table2=rtb-06ce0e67a48a28f48
export table3=rtb-0e432a16ef70bbf0c
export server1_NID1=eni-07ec2f774b28a21be
export server2_NID2=eni-07d950017924b9149

su -m mmsweb << ‘EOF’

if [ $HOSTNAME == “CommonDB01” ]
then
INTERFACE_ID=$server1_NID1
elif [ $HOSTNAME == “CommonDB02” ]
then
INTERFACE_ID=$server2_NID2
fi

for TABLE in $table1 $table2 $table3
do
ssh -p 22 mmsweb@10.205.131.13 aws ec2 replace-route –route-table-id $TABLE –destination-cidr-block 192.168.10.100/32 –network-interface-id $INTERFACE_ID –profile controller
sleep 2
for i in {1..3}
do
ssh -p 22 mmsweb@10.205.131.13 aws ec2 describe-route-tables –route-table-id $TABLE –profile controller | grep $INTERFACE_ID
if [ $? -eq 0 ]
then
break
elif [ $? -ne 0 ]
then
ssh -p 22 mmsweb@10.205.131.13 aws ec2 replace-route –route-table-id $TABLE –destination-cidr-block 192.168.10.100/32 –network-interface-id $INTERFACE_ID –profile controller
sleep 2
if [ $i == “3” ]
then
ssh -p 22 mmsweb@10.205.131.13 aws ec2 describe-route-tables –route-table-id $TABLE –profile controller | grep $INTERFACE_ID
if [ $? -ne 0 ]
then
echo “[`date`]ERROR : $TABLE is not changed” >> /home/mmsweb/vip_error.log
fi
fi
fi
done
done
exit
EOF
exit 0