Статьи

Формирование облака на AWS для Кассандры с HPCC

Если вашей основной целью является настройка простого кластера Cassandra, то вы, вероятно, хотите начать здесь:

http://docs.datastax.com/en/cassandra/2.1/cassandra/install/installAMI.html

Однако, если у вас есть кластер AWS, в который вы хотите добавить Cassandra, тогда читайте дальше.

В моем случае я хотел добавить Cassandra в существующий кластер HPCC. В частности, я хотел иметь возможность раскручивать кластер HPCC + Cassandra с помощью одной команды. Для этого я решил добавить немного сценариев Python поверх Cloud Formation.

У Amazon есть средство под названием Cloud Formation. Cloud Formation читает файл шаблона JSON и создает экземпляры, как описано в этом файле. (довольно гладко) В этом JSON вы можете выполнять команды оболочки, которые выполняют тяжелую работу. Файл JSON может определять параметры, которые администратор может затем предоставить через консоль управления или через интерфейс командной строки AWS. 

(ИМХО, предлагаю  установить AWS CLI )

Запуск облачной формации

Сначала я начал с EasyFastHPCCoAWS Тима  Хамфри . Этот шаблон формирования облаков является отличной основой. Он устанавливает AWS CLI и копирует содержимое корзины S3 в / home / ec2-users. Посмотрите на  файл шаблона . Чтобы запустить его, достаточно просто создать PlacementGroup, KeyPair и корзину S3, в которую вы скопируете содержимое репозитория github. Для простоты я назвал все это одно и то же: «realtime-hpcc».

Теперь с помощью одной команды я могу запустить недорогой кластер HPCC с помощью следующего:

aws cloudformation create-stack --capabilities CAPABILITY_IAM --stack-name realtime-hpcc --template-body https://s3.amazonaws.com/realtime-hpcc/MyHPCCCloudFormationTemplate.json --parameters \
   ParameterKey=HPCCPlacementGroup,ParameterValue=realtime-hpcc \
   ParameterKey=HPCCPlatform,ParameterValue=HPCC-Platform-5.2.2-1 \
   ParameterKey=KeyPair,ParameterValue=realtime-hpcc \
   ParameterKey=MasterInstanceType,ParameterValue=c3.2xlarge \
   ParameterKey=NumberOfRoxieNodes,ParameterValue=1 \
   ParameterKey=NumberOfSlaveInstances,ParameterValue=1 \
   ParameterKey=NumberOfSlavesPerNode,ParameterValue=2 \
   ParameterKey=RoxieInstanceType,ParameterValue=c3.2xlarge \
   ParameterKey=ScriptsS3BucketFolder,ParameterValue=s3://riptide-hpcc/ \
   ParameterKey=SlaveInstanceType,ParameterValue=c3.2xlarge \
   ParameterKey=UserNameAndPassword,ParameterValue=riptide/HIDDEN

Обратите внимание, я указал шаблон через URL https. Я также указал имя стека, которое вы будете использовать при запросе статуса AWS, что вы можете сделать с помощью следующей команды:

aws cloudformation describe-stacks --stack-name realtime-hpcc

При этом вы получите хороший, чистый JSON обратно, который выглядит примерно так:

{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:us-east-1:633162230041:stack/realtime-hpcc/e609e0b0-2595-11e5-97b7-5001b34a4a0a",
            "Description": "Launches instances for fast executing HPCC on AWS. Plus, it sets up and starts HPCC System.",
            "Parameters": [
                {
                    "ParameterValue": "realtime-hpcc",
                    "ParameterKey": "KeyPair"
                }...
            ],
            "Tags": [],
            "CreationTime": "2015-07-08T17:22:24.461Z",
            "Capabilities": [
                "CAPABILITY_IAM"
            ],
            "StackName": "realtime-hpcc",
            "NotificationARNs": [],
            "StackStatus": "CREATE_IN_PROGRESS",
            "DisableRollback": false
        }
    ]
}

StackStatus является ключевым свойством. Вы захотите подождать, пока не появится надпись «CREATE_COMPLETE».

После его завершения вы можете зайти в консоль управления и просмотреть свои экземпляры EC2.

Если что-то пошло не так, вы можете посмотреть в /var/log/user-data.log. Шаблон Тима удобно перенаправляет вывод команд оболочки в этот файл журнала.

Установка Кассандры 

СЕЙЧАС — чтобы на самом деле установить Cassandra на машины, я просто разложил работу Тима и изменил шаблон Cloud Formation, включив  в него репозиторий datastax и ням-установку Cassandra . И в следующий раз, когда я создал свой кластер: пуф волшебный вуду, Кассандра была установлена!

Затем мне нужно было настроить экземпляры Cassandra в кластер. Сначала я попытался сделать это, используя сценарий оболочки, выполняемый как часть формирования облака, но это оказалось трудным, потому что я хотел IP-адреса для всех узлов, а не только для того, на котором выполнялся сценарий. Я переключил передачи и решил организовать конфигурацию из python после того, как облако уже сформировалось.

Я написал  небольшой скрипт на python  (configure_local_cassandra.py), который принимает четыре параметра: местоположение файла cassandra.yaml, имя кластера, частные IP-адреса узлов Cassandra и IP-адрес самого узла. Сценарий python обновляет конфигурацию cassandra, подставляя эти значения в  файл шаблона . Я добавил это в корзину S3, и Cloud Formation позаботилась о развертывании шаблона и скрипта Python на компьютерах. (благодаря шаблону Тима)

Конфигурирование Кассандры 

С этим сценарием и шаблоном на каждом компьютере, последний кусок — это сценарий, который собирает IP-адреса для узлов и вызывает сценарий python через ssh. Для этого мы используем aws ec2 cli и выбираем JSON для всех наших экземпляров. Команда aws ec2 выглядит следующим образом:

aws ec2 describe-instances

Я написал скрипт на python ( configure_cassandra_cluster.py ), который анализирует этот JSON и запускает команды на каждом из узлов через ssh. 

Чтобы упростить все, я добавил несколько сценариев оболочки, которые переносят все командные строки (поэтому мне не нужно запоминать все параметры). Сценарии оболочки следующие

Удобные сценарии

Для простоты я также добавил  несколько сценариев оболочки,  которые переносят все командные строки (поэтому мне не нужно запоминать все параметры). Сценарии оболочки позволяют вам создавать кластер, получать статус кластера и удалять кластер с помощью одной командной строки:

create_stack.sh, get_status.sh, delete_stack.sh

(соответственно)

Собираем все вместе …

Подводя итог, скрипт create_stack.sh использует облачную информацию aws для создания кластера.

Затем вы можете наблюдать за состоянием кластера с помощью get_status.sh.

После создания скрипт configure_cassandra_cluster.py устанавливает, настраивает и запускает Cassandra.

После этого вы сможете запустить ecl, используя Casssandra!

Не стесняйтесь брать эти сценарии и применять их к другим вещам. И спасибо Тиму Хамфрису за шаблон формирования облаков.