Amazon-Ec2
在EC2中不能使用keepalived嗎
問題是如果我想使用我的兩個 EC2 實例(ha 代理)需要綁定一個虛擬 IP
keepalived
,但它們在 EC2 中是不可能的,因為在給定時間只有一個實例可以使用彈性 IP,所以它是不可能,對吧?
不,這就是 Elastic Load Balancer 的用途。
2021 年更新。您可以使用它。但你可能不應該。現在幾乎沒有理由這樣做。彈性負載均衡器應該可以完成大多數人需要的大部分工作。
接受的答案不再正確。
一般來說,您應該使用 ELB。但是,您可能會發現 ELB 無法滿足的罕見需求,並且您更願意使用 keepalived,即使它違反了最佳實踐。
Keepalived 和 VRRP 在 Amazon VPC 中工作。它不適用於 ec2-classic。
使用 keepalived,您可以
notify
使用.notify_master``keepalived.conf
notify 腳本然後呼叫
aws cli
withdisassociate-address
和associate-address
選項來解綁然後綁定地址,而不是通過 keepalived 本身的 VIP 機制。它工作正常。這是一個範例通知腳本:
#!/bin/bash TYPE=$1 NAME=$2 STATE=$3 function die { echo "${1-Died} at ${BASH_SOURCE[1]}:${FUNCNAME[1]} line ${BASH_LINENO[0]}." exit 1 } function master { # Check if an elastic IP is defined test -n "$EC2_EIP" || die 'elastic ip not defined' # Attempt to read the instance-id EC2_INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`" test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id' if [ -z $EC2_REGION ]; then # Get the region if not set EC2_AVAIL_ZONE=`wget -q -O - http://instance-data/latest/meta-data/placement/availability-zone` EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`" fi # Call into ec2. Make sure ec2 output echo "aws ec2 disassociate-address --public-ip $EC2_EIP --region=$EC2_REGION" /usr/bin/aws ec2 disassociate-address --public-ip $EC2_EIP --region=$EC2_REGION if [ $? -eq 0 ]; then echo "disassocate-address: success" fi; echo "aws ec2 associate-address --public-ip $EC2_EIP --instance-id $EC2_INSTANCE_ID --region=$EC2_REGION" /usr/bin/aws ec2 associate-address --public-ip $EC2_EIP --instance-id $EC2_INSTANCE_ID --region=$EC2_REGION if [ $? -eq 0 ]; then echo "associate-address: success" fi; } case $STATE in "MASTER") master exit 0 ;; "BACKUP") exit 0 ;; "FAULT") exit 0 ;; *) echo "unknown state" exit 1 ;; esac
有關更多詳細資訊和工作範例,請訪問以下連結: