Pull to refresh
0
GlobalDots
GlobalDots — We Make IT Faster!

Как сэкономить на спотовых инстансах EC2 с помощью Scylla

Reading time 4 min
Views 5K
Original author: Павел Клюшин
Спотовые инстансы могут сэкономить вам много денег. Но что если вы работаете с сервисами с сохранением состояния, например, базами данных NoSQL? Основная проблема заключается в том, что в таком случае каждая нода в кластере должна сохранять некоторые параметры — IP, данные и другие конфигурации. В этом посте мы расскажем об опенсорсной NoSQL БД Scylla и о том, как ее можно использовать в спотовых инстансах EС2 для непрерывной работы — с помощью предиктивной технологии SpotInst, а также расширенной функциональности сохранения состояния.




Что Такое 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, который подключен к инстансу, во время работы будут непрерывно выполняться снапшоты, а после замены он будет использован для сопоставления блоков.



Чтобы ваша машина продолжила работать в случае сбоя, нужно помнить о нескольких вещах:

  1. Частный IP-адрес. — убедитесь, что новый компьютер имеет тот же IP-адрес, чтобы gossip-протокол мог продолжить взаимодействие с машиной.
  2. Том. Нода должна быть подключена к тому же хранилищу и должна иметь тот же том, что и раньше. Если нет, сервис будет недоступен.
  3. 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.
Tags:
Hubs:
+5
Comments 0
Comments Leave a comment

Articles

Information

Website
www.globaldots.com
Registered
Founded
Employees
51–100 employees
Location
Германия