Разве не возможно использовать keepalived в EC2

Прежняя история работодателя это является большим. Некоторые детали изменяются для защиты невинного. У меня был трудный служащий, назовите его 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 получил огромное продвижение в задание, где он ничего не мог больше повреждать.

0
задан 8 October 2012 в 19:25
2 ответа

Нет. Во всяком случае, для этого и предназначен Elastic Load Balancer.

1
ответ дан 4 December 2019 в 11:11

Принятый ответ больше не соответствует действительности.

Как правило, вам следует использовать 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

Для получения более подробной информации и рабочих примеров посетите следующие ссылки:

6
ответ дан 4 December 2019 в 11:11

Теги

Похожие вопросы