Статьи

Настройка Кассандры с Приамом

Ранее я объяснял, как настроить Cassandra в AWS . Описанная настройка работает, но в некоторых случаях этого может быть недостаточно. Например, это не дает вам простой способ создавать и восстанавливать резервные копии, а добавление новых узлов основывается на специальном скрипте Python, который случайным образом выбирает начальное число.

Итак, теперь я собираюсь объяснить, как настроить Priam, вспомогательный инструмент Cassandra от Netflix.

Моя основная причина его настройки — функция резервного копирования / восстановления, которую он предлагает. Все другие способы создания резервных копий очень утомительны, и в Приаме реализованы важные биты — моментальные снимки и инкрементные резервные копии .

Приам, однако, немного сложно запустить. Руководство по установке не слишком детально и его нелегко найти (это последний, не сразу видимый элемент в вики). Во-первых, он имеет одну ветку на каждую версию Cassandra, поэтому вы должны проверить правильную ветку и собрать ее. Я тут же натолкнулся на проблему, поскольку их имена не позволяют eclipse импортировать проект gradle. В течение 24 часов я сообщил о 3 проблемах, что не идеально. Priam не поддерживает динамические имена SimpleDB и не позволяет переопределять связанные свойства через командную строку. Я надеюсь, что нет больших проблем. Те, с которыми я столкнулся, я исправил и сделал запрос на получение .

Как выглядит установка?

  • Добавьте javaagent к параметрам JVM
  • Запустите веб-сайт Priam
  • Он автоматически заменяет большую часть файла cassandra.yaml, включая поставщика семян (т. Е. Как узел находит другие узлы в кластере)
  • Беги Кассандра
  • Он получает начальную информацию (которая хранится в AWS SimpleDB) и подключается к кластеру.

Я решил запустить файл военных действий с помощью автономной системы управления причалом, а не устанавливать tomcat. С точки зрения сценариев оболочки, основные биты выглядят так (в дополнение к сценарию оболочки в исходном посте, который запускается при инициализации узла):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Get the Priam war file and jar file
aws s3 cp s3://$BUCKET_NAME/priam-web-3.12.0-SNAPSHOT.war ~/
aws s3 cp s3://$BUCKET_NAME/priam-cass-extensions-3.12.0-SNAPSHOT.jar /usr/share/cassandra/lib/priam-cass-extensions.jar
# Set the Priam agent
echo "-javaagent:/usr/share/cassandra/lib/priam-cass-extensions.jar" >> /etc/cassandra/conf/jvm.options
 
# Download jetty-runner to be able to run the Priam war file from the command line
wget http://central.maven.org/maven2/org/eclipse/jetty/jetty-runner/9.4.8.v20171121/jetty-runner-9.4.8.v20171121.jar
nohup java -Dpriam.clustername=LogSentinelCluster -Dpriam.sdb.instanceIdentity.region=$EC2_REGION -Dpriam.s3.bucket=$BACKUP_BUCKET \
-Dpriam.sdb.instanceidentity.domain=$INSTANCE_IDENTITY_DOMAIN -Dpriam.sdb.properties.domain=$PROPERTIES_DOMAIN \
-Dpriam.client.sslEnabled=true -Dpriam.internodeEncryption=all -Dpriam.rpc.server.type=sync \
-Dpriam.partitioner=org.apache.cassandra.dht.Murmur3Partitioner -Dpriam.backup.retention.days=7 \
-Dpriam.backup.hour=$BACKUP_HOUR -Dpriam.vnodes.numTokens=256 -Dpriam.thrift.enabled=false \
-jar jetty-runner-9.4.8.v20171121.jar --path /Priam ~/priam-web-3.12.0-SNAPSHOT.war &
 
while ! echo exit | nc $BIND_IP 8080; do sleep 10; done
 
echo "Started Priam web package"
 
service cassandra start
chkconfig cassandra on
 
while ! echo exit | nc $BIND_IP 9042; do sleep 10; done

BACKUP_BUCKET, PROPERTIES_DOMAIN и INSTANCE_DOMAIN предоставляются через скрипт CloudFormation (поскольку мы не можем знать точные имена заранее — особенно для SimpleDB). Обратите внимание, что эти свойства не будут работать в главном репо — я добавил их в свой запрос на извлечение.

Чтобы это работало, вам нужно создать два домена SimpleDB (например, CloudFormation). Возможно, вы могли бы заменить SimpleDB на какое-то другое хранилище данных (и не полагаться на AWS), но пока это выходит за рамки.

Результатом работы Priam будет то, что у вас есть узлы Cassandra в SimpleDB (вы можете просматривать его с помощью этого расширения Chrome, так как AWS не предлагает никакого пользовательского интерфейса), и, конечно, резервные копии будут автоматически создаваться в резервном хранилище S3.

Затем вы можете восстановить резервную копию, зарегистрировавшись на каждом узле и выполнив:

1
curl http://localhost:8080/Priam/REST/v1/restore?daterange=201803180000,201803191200®ion=eu-west-1&keyspaces=your_keyspace

Вы указываете временной диапазон для восстановления. Все еще не идеально, так как можно надеяться на восстановление одним нажатием, но гораздо лучше, чем развертывание собственной инфраструктуры резервного копирования и восстановления.

Одно очень важное замечание — vnodes не поддерживаются. В моем исходном кластере по умолчанию было 256 vnodes на машину, а теперь его всего 1, потому что Priam не поддерживает ничего, кроме 1. Жаль, поскольку vnodes — рекомендуемый способ настройки Cassandra. Очевидно, Netflix не использует их, однако. Есть ветка незавершенного производства для этого, которая была заброшена 5 лет назад. К счастью, есть новый запрос на получение с поддержкой Vnode, который можно использовать вместе с моим запросом на получение из этой ветки .

Priam заменяет некоторые значения по умолчанию в Cassandra другими значениями, поэтому вы можете сравнить текущую настройку и недавно созданный файл cassandra.yaml. В целом он не чувствует себя готовым к суперпроизводству, но, очевидно, так оно и есть, поскольку Netflix использует его в производстве.

Опубликовано на Java Code Geeks с разрешения Божидара Божанова, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Настройка Cassandra с Приамом

Мнения, высказанные участниками Java Code Geeks, являются их собственными.