Прежняя история работодателя это является большим. Некоторые детали изменяются для защиты невинного. У меня был трудный служащий, назовите его Fred, который имел много проблем производительности, но, казалось, искупил себя и заработал назад некоторые полномочия. Только проблема была, когда его полномочия были восстановлены, ошибка в сценарии настройки дала ему некоторые дополнительные полномочия.
Я был посреди большого проекта, таким образом, я спросил Fred к пакету текущие исправления Windows, которые были необходимы для приложения. (Это было в дни перед бластером, когда люди не исправили так неукоснительно, как они делают сегодня). Таким образом, Fred запускает тест на в нашей лаборатории, и все хорошо работает.
Fred затем задает несколько вопросов:
"Who should I push it to?" (Mind you, this is a patch for some custom VB app)
"Everyone", I respond
"Ok, what time should it start?"
"How about 2AM?", I answer. (Figuring I'd have time to look over everything before I left for the day!)
Таким образом, что происходит затем? Он устанавливает задание с нашим приложением распределения программного обеспечения для продвижения всем и даже достаточно любезен для устанавливания флажков для каждой платформы что поддержка продукта. Затем устанавливает время начала в течение 2:00, как в 2:00, которое произошло приблизительно 12 часов в прошлом.
Результат? Все перезагружает и попытки установить некоторый патч во время выполнения VB5. Около 14:45 в пятницу днем. Все.
Все? Как 40 000 ПК? Да. 3 000 серверов Windows? Да. 300 л. с., поля Sun и IBM Unix? Да. Кластер AS/400? Да.
Единственной вещью, которая не перезагружала, был Windows DCs, потому что AD парни отключили наше приложение по некоторым причинам. Святой кошмар. После недели вытирания я не мог полагать, что был все еще нанят.
Кульминационный пункт? Fred получил огромное продвижение в задание, где он ничего не мог больше повреждать.
Принятый ответ больше не соответствует действительности.
Как правило, вам следует использовать ELB. Однако вы можете обнаружить редкую потребность, которую не может удовлетворить ELB, и предпочтете использовать keepalived, даже если это противоречит передовой практике.
Keepalived и VRRP работают в Amazon VPC. Он не работает с ec2-classic.
С keepalived вы используете команды notify
или notify_master
в keepalived.conf
.
Сценарий уведомления затем вызывает aws cli
с параметрами disassociate-address
и associate-address
, чтобы отвязать и затем связать адрес, а не через 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
Для получения более подробной информации и рабочих примеров посетите следующие ссылки: