Ранее я объяснял, как настроить 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, являются их собственными. |