Спотовые инстансы могут сэкономить вам много денег. Но что если вы работаете с сервисами с сохранением состояния, например, базами данных NoSQL? Основная проблема заключается в том, что в таком случае каждая нода в кластере должна сохранять некоторые параметры — IP, данные и другие конфигурации. В этом посте мы расскажем об опенсорсной NoSQL БД Scylla и о том, как ее можно использовать в спотовых инстансах EС2 для непрерывной работы — с помощью предиктивной технологии SpotInst, а также расширенной функциональности сохранения состояния.
Scylla — это база данных NoSQL, распространяемая по opensource-модели. Она была разработана с учетом совместимости с Apache Cassandra, обеспечивая при этом значительно более высокую пропускную способность и меньшие задержки. Она поддерживает те же протоколы и форматы файлов, что и Apache Cassandra. Однако Scylla написана полностью C++, а не на Java, как Apache Cassandra. Кроме того, Scylla была построена с использованием фреймворка Seastar, который представляет собой асинхронную библиотеку, заменяющую потоки выполнения, разделяемую память, сопоставленные файлы и другие классические техники программирования Linux. У Scylla также есть свой уникальный дисковый планировщик, который помогает повысить производительность.
Тесты, проведенные как инженерами ScyllaDB, так и сторонними компаниями, продемонстрировали, что Scylla превосходит Apache Cassandra в 10 раз.
Scylla обеспечивает доступность в режиме AlwaysOn. Автоматический переход на резервную систему, репликация между несколькими узлами и центрами обработки данных обеспечивают отказоустойчивость.
Scylla, как и Cassandra, использует gossip-протокол для обмена метаданными для идентификации нод в кластере и определения того, активны ли они. Нет единой точки отказа — не может быть и единого реестра состояния нод, поэтому они должны обмениваться информацией между собой.
При создании нового кластера Scylla вряд ли возникнет желание сразу прибегать к спотовым инстансам из-за их нестабильного поведения. Не в их пользу говорит и тот факт, что эти инстансы можно отключить в течение 2 минут. Поэтому Elastigroup — это стандартный выбор для такого окружения.
Elastigroup с показателем 100% доступности является лидером Spot Market. Выбор правильной ставки для правильного спота, анализ истории данных в реальном времени — все это помогает выбрать спотовые инстансы с наименьшей ценой и наибольшим сроком работы. Изменения в Spot Market прогнозируются на 15 минут вперед, что позволяет заменять спот без прерывания работы.
Теперь о сохранении состояния. Elastigroup умеет сохранять тома данных. Для любого тома EBS, который подключен к инстансу, во время работы будут непрерывно выполняться снапшоты, а после замены он будет использован для сопоставления блоков.
Чтобы ваша машина продолжила работать в случае сбоя, нужно помнить о нескольких вещах:
Для повышения доступности ваших данных рекомендуется распределить узлы между A-Z. Сконфигурировать это можно с помощью значения
Предположим, что у вас есть кластер, созданный в регионе
Теперь мы покажем, как развернуть кластер из шести нод. Каждый дата-центр будет состоять из трех обычных нод и двух сидов. IP-адреса выглядят так:
US US-DC1
US US-DC2
На каждой ноде Scylla нужно отредактировать файл scylla.yaml. Вот еще один пример, для одной ноды в каждом дата-центре:
US Data-center 1 – 192.168.1.1
US Data-center 2 — 192.168.1.4
На каждой ноде Scylla нужно отредактировать файл cassandra-rackdc.properties, указав соответствующую информацию о стойке и дата-центре:
Nodes 1-3
Nodes 4-6
При настройке Elastigroup важно включить функцию сохранения состояния — это необходимо, чтобы сохранить данные и сетевую конфигурацию при замене инстанса из-за отключении спота. Откройте вкладку Compute, дойдите до функции stateful и отметьте опции, как показано на скриншоте ниже.
Также рекомендуем воспользоваться командой «nodetool drain» shutdown script, чтобы очистить commit log и прекратить прием новых соединений. Описание есть в разделе shutdown script.
На анимации ниже — вы видите кластер Scylla с тремя инстансами. Все ноды работают на спотовых инстансах, с настроенным сохранением состояния.
Когда один из инстансов отключается, наша функция сохранения состояния создает инстанс с томами Private IP и Root/Data. И, как вы можете видеть ниже, инстанс возвращаются в кластер.
Так с помощью Scylla и Spotinst вы можете увеличить производительность и при этом снизить затраты.
Если хотите посмотреть и протестировать решение, можете обратиться к нам через форму на сайте, в комментариях к посту, по почте ru@globaldots.com или по телефону +7-495-762-45-85.
Что Такое Scylla?
Scylla — это база данных NoSQL, распространяемая по opensource-модели. Она была разработана с учетом совместимости с Apache Cassandra, обеспечивая при этом значительно более высокую пропускную способность и меньшие задержки. Она поддерживает те же протоколы и форматы файлов, что и Apache Cassandra. Однако Scylla написана полностью C++, а не на Java, как Apache Cassandra. Кроме того, Scylla была построена с использованием фреймворка Seastar, который представляет собой асинхронную библиотеку, заменяющую потоки выполнения, разделяемую память, сопоставленные файлы и другие классические техники программирования Linux. У Scylla также есть свой уникальный дисковый планировщик, который помогает повысить производительность.
Тесты, проведенные как инженерами ScyllaDB, так и сторонними компаниями, продемонстрировали, что Scylla превосходит Apache Cassandra в 10 раз.
Как Scylla реплицирует свои данные между нодами
Scylla обеспечивает доступность в режиме AlwaysOn. Автоматический переход на резервную систему, репликация между несколькими узлами и центрами обработки данных обеспечивают отказоустойчивость.
Scylla, как и Cassandra, использует gossip-протокол для обмена метаданными для идентификации нод в кластере и определения того, активны ли они. Нет единой точки отказа — не может быть и единого реестра состояния нод, поэтому они должны обмениваться информацией между собой.
Как запустить Scylla на Spotinst
При создании нового кластера Scylla вряд ли возникнет желание сразу прибегать к спотовым инстансам из-за их нестабильного поведения. Не в их пользу говорит и тот факт, что эти инстансы можно отключить в течение 2 минут. Поэтому Elastigroup — это стандартный выбор для такого окружения.
Elastigroup с показателем 100% доступности является лидером Spot Market. Выбор правильной ставки для правильного спота, анализ истории данных в реальном времени — все это помогает выбрать спотовые инстансы с наименьшей ценой и наибольшим сроком работы. Изменения в Spot Market прогнозируются на 15 минут вперед, что позволяет заменять спот без прерывания работы.
Теперь о сохранении состояния. Elastigroup умеет сохранять тома данных. Для любого тома EBS, который подключен к инстансу, во время работы будут непрерывно выполняться снапшоты, а после замены он будет использован для сопоставления блоков.
Чтобы ваша машина продолжила работать в случае сбоя, нужно помнить о нескольких вещах:
- Частный IP-адрес. — убедитесь, что новый компьютер имеет тот же IP-адрес, чтобы gossip-протокол мог продолжить взаимодействие с машиной.
- Том. Нода должна быть подключена к тому же хранилищу и должна иметь тот же том, что и раньше. Если нет, сервис будет недоступен.
- Config-файл — scylla.yaml по умолчанию находится по адресу /etc/scylla/scylla.yaml. Его необходимо отредактировать так, чтобы узлы имели информацию о своей конфигурации. Вот ключевые параметры, которые нужно настроить:
- Cluster_name — имя кластера. Этот параметр разделяет ноды разных логических кластеров. Для всех узлов в пределах одного кластера должно быть установлено одинаковое значение;
- Listen_interface — интерфейс, который Scylla назначает для подключения к другим узлам;
- Seeds — сид-ноды используются во время запуска для начальной загрузки gossip-процесса и присоединения к кластеру;
- Rpc_address — IP-адрес интерфейса для клиентских соединений (Thrift, CQL);
- Broadcast_address — IP-адрес интерфейса для соединений между нодами, то как он будет виден внутри кластера.
Выбор стоек
Для повышения доступности ваших данных рекомендуется распределить узлы между A-Z. Сконфигурировать это можно с помощью значения
Ec2Snitch
в файлах scylla.yaml
и cassandra-rackdc.properties
.Предположим, что у вас есть кластер, созданный в регионе
us-east-1
. Если нода 1 находится в us-east-1a
, а нода 2 — в us-east-1b
, Scylla будет считать, что они находятся в двух разных стойках в одном дата-центре. Узел 1 будет считаться стойкой 1a, а узел 2 — стойкой 1b.Теперь мы покажем, как развернуть кластер из шести нод. Каждый дата-центр будет состоять из трех обычных нод и двух сидов. IP-адреса выглядят так:
US US-DC1
Node# Private IP
Node1 192.168.1.1 (seed)
Node2 192.168.1.2 (seed)
Node3 192.168.1.3
US US-DC2
Node# Private IP
Node4 192.168.1.4 (seed)
Node5 192.168.1.5 (seed)
Node6 192.168.1.6
На каждой ноде Scylla нужно отредактировать файл scylla.yaml. Вот еще один пример, для одной ноды в каждом дата-центре:
US Data-center 1 – 192.168.1.1
cluster_name: 'ScyllaDB_Cluster'
seeds: "192.168.1.1,192.168.1.2,192.168.1.4,192.168.1.5"
endpoint_snitch: Ec2Snitch
rpc_address: "192.168.1.201"
listen_address: "192.168.1.201"
US Data-center 2 — 192.168.1.4
cluster_name: 'ScyllaDB_Cluster'
seeds: "192.168.1.1,192.168.1.2,192.168.1.4,192.168.1.5"
endpoint_snitch: Ec2Snitch
rpc_address: "192.168.1.4"
listen_address: "192.168.1.4"
На каждой ноде Scylla нужно отредактировать файл cassandra-rackdc.properties, указав соответствующую информацию о стойке и дата-центре:
Nodes 1-3
dc=us-east-1a
rack=RACK1
Nodes 4-6
dc=us-east-1b
rack=RACK2
Настройка Spotinst Console
При настройке Elastigroup важно включить функцию сохранения состояния — это необходимо, чтобы сохранить данные и сетевую конфигурацию при замене инстанса из-за отключении спота. Откройте вкладку Compute, дойдите до функции stateful и отметьте опции, как показано на скриншоте ниже.
Также рекомендуем воспользоваться командой «nodetool drain» shutdown script, чтобы очистить commit log и прекратить прием новых соединений. Описание есть в разделе shutdown script.
Как же это работает?
На анимации ниже — вы видите кластер Scylla с тремя инстансами. Все ноды работают на спотовых инстансах, с настроенным сохранением состояния.
Когда один из инстансов отключается, наша функция сохранения состояния создает инстанс с томами Private IP и Root/Data. И, как вы можете видеть ниже, инстанс возвращаются в кластер.
Так с помощью Scylla и Spotinst вы можете увеличить производительность и при этом снизить затраты.
Если хотите посмотреть и протестировать решение, можете обратиться к нам через форму на сайте, в комментариях к посту, по почте ru@globaldots.com или по телефону +7-495-762-45-85.