Развёртывание CockroachDB в кластере в Ubuntu 16.04

CockroachDB – это открытая распределённая база данных SQL, которая обеспечивает согласованность данных, масштабируемость и устойчивость к ошибкам.

CockroachDB очень просто подготовить: нужно только установить пакет на несколько серверов (так называемых нод) и настроить их взаимодействие в кластере. Ноды кластера должны работать так, как если бы они были единым целым.

Такая структура легко расширяется по мере роста потребностей хранения данных: вы можете легко увеличить мощность системы за счет добавления новых нод к существующему кластеру. Больше информации можно найти на сайте CockroachDB.

Примечание: На момент написания руководства доступна только бета-версия CockroachDB. Используйте это руководство для ознакомления с функциями программы. Работать с критически важными данными пока что не рекомендуется.

Данное руководство не обеспечивает безопасного доступа к интерфейсу администратора. Любой пользователь, у которого есть URL, сможет получить доступ к нему. Если вы хотите использовать CockroachDB в производстве, заблокируйте порт 8080 с помощью брандмауэра.

Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian

Данное руководство поможет развернуть устойчивую к ошибкам распределенную БД CockroachDB на нескольких нодах.

Для начала нужно установить CockroachDB на несколько серверов, затем запустить их как ноды и объединить их в кластер.

Кроме того, вы научитесь распределять данные, предупреждать сбои и подключать приложения к CockroachDB.

Это руководство демонстрирует развёртывание без SSL-шифрования. В производстве такая БД очень уязвима.

Требования

  • Три сервера Ubuntu 16.04. В руководстве у них будут такие имена хостов: cockroach-01, cockroach-02, cockroach-03.
  • Минимум 2 Гб RAM и настроенная частная сеть на каждом сервере.
  • Пользователь с доступом к sudo на каждом сервере (чтобы создать такого пользователя, обратитесь к этой статье).
  • Разблокированный трафик TCP. Если на сервере включен брандмауэр, откройте порты 26257 (для работы нод и приложений) и 8080 (для интерфейса администратора).

sudo ufw allow 26257/tcp
sudo ufw allow 8080/tcp

Опционально: установите NTP на каждом сервере.

Читайте также: Настройка часового пояса и NTP-синхронизации в Ubuntu 14.04

Также для работы вам понадобится внешний и внутренний IP-адрес каждого сервера.

1: Установка CockroachDB

Примечание: Данный раздел нужно выполнить на каждой ноде кластера.

Подключитесь к первому серверу, cockroach-01:

ssh 8host@cockroach_01_public_ip

Перейдите в домашний каталог, загрузите и установите бинарный файл cockroach.

wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do

Чтобы распаковать файл, введите:

tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach

Переместите бинарный файл:

sudo mv cockroach /usr/local/bin

Запросите версию CockroachDB, чтобы убедиться, что файл работает.

cockroach version

Если система не отвечает на команду cockroach, вернитесь в начало этого раздела и убедитесь, что все действия выполнены без ошибок.

Повторите этот раздел на остальных серверах кластера, cockroach-02 и cockroach-03.

2: Запуск первой ноды

Первая нода CockroachDB запускает кластер. После этого к ней нужно подключить остальные ноды.

Запишите внутренний IP-адрес первой ноды (cockroach-01).

Затем введите на первой ноде следующую команду. Она запускает ноду без шифрования SSL (–insecure), переводит процесс в фоновый режим и возвращает доступ к командной строке (–background) и готовит ноду к взаимодействию с другими нодами кластера с помощью внутреннего IP-адреса (–advertise-host).

cockroach start --insecure --background --advertise-host=cockroach_01_private_ip

Примечание: Вместо cockroach_01_private_ip укажите внутренний адрес своей ноды.

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

Первая нода запущена, а значит – запущен кластер. Вы можете просмотреть подробную информацию, перейдя в интерфейс администратора (этот инструмент идёт в комплекте с CockroachDB и предоставляет информацию о кластере. Откройте ссылку:

http://cockroach_01_public_ip:8080

Во вкладке Overview вы увидите, что в кластере запущена одна нода.

Обратите внимание на восклицательный знак в поле NODE. Это предупреждение значит, что в кластере недостаточно нод для репликации данных. Это поведение нормально, поскольку вы только начали собирать кластер.

Чтобы настроить репликацию данных, нужно добавить в кластер больше нод. Три ноды CockroachDB обеспечивают три копии данных. В случае сбоя одной из нод данные будут защищены.

3: Добавление нод в кластер

Перейдите на сервер cockroach-02 и запустите CockroachDB.

В данном случае нужно немного расширить команду, чтобы подключиться к первой ноде с помощью её внутреннего IP. На данном этапе вам понадобится внутренний IP-адрес cockroach-02 и cockroach-01.

cockroach start --insecure --background \
--advertise-host=cockroach_02_private_ip \
--join=cockroach_01_private_ip:26257

Перейдите на cockroach-03 и подключитесь к первой ноде, указав соответствующие IP-адреса.

cockroach start --insecure --background \
--advertise-host=cockroach_03_private_ip \
--join=cockroach_01_private_ip:26257

Снова откройте интерфейс администратора:

http://cockroach_03_public_ip:8080

Вы увидите, что в кластере три ноды.

4: Распределение данных (опционально)

Когда на одну из нод записываются данные, остальные ноды имеют доступ к этим данным. Чтобы понять, как это работает, используем тестовые данные CockroachDB и встроенный SQL-клиент.

Сгенерируйте данные на первой ноде, cockroach-01.

cockroach gen example-data | cockroach sql

Это создаст тестовую БД startrek.

Запустите SQL-клиент и просмотрите базы данных кластера:

cockroach sql
SHOW DATABASES;

Вы увидите БД startrek:

+--------------------+
|      Database      |
+--------------------+
| information_schema |
| pg_catalog         |
| startrek           |
| system             |
+--------------------+

Примечание: CockroachDB поддерживает собственный диалект SQL, который расширяет стандарт SQL.

Перейдите в терминал второй ноды, cockroach-02 и запустите те же команды:

cockroach sql
SHOW DATABASES;

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

Также проверить базу данных можно с помощью интерфейса администратора, в боковой панели DATABASES:

http://cockroach_01_public_ip:8080/#/databases/

5: Удаление ноды из кластера (опционально)

Кроме распределения данных CockroachDB обеспечивает доступность и целостность данных в случае сбоя одной из нод.

Формула устойчивости CockroachDB к ошибкам ноды выглядит так:

(n - 1)/2

где n – количество нод в кластере. То есть, кластер из трёх нод может без потерь перенести сбой одной ноды.

Чтобы посмотреть, как это происходит, попробуйте удалить из кластера одну ноду. После теста можно снова добавить ноду в кластер.

Перейдите на вторую ноду, cockroach-02, и запустите SQL-клиент, если не сделали этого ранее.

cockroach sql

Посчитайте количество строк в таблице quotes:

SELECT COUNT(*) FROM startrek.quotes;

В этой таблице 200 строк. Чтобы закрыть SQL-клиент, нажмите CTRL+C.

Теперь удалите ноду из кластера и убедитесь, что данные всё ещё доступны на других нодах.

Остановите процесс cockroach на второй ноде, cockroach-02.

cockroach quit

Перейдите в терминал одной из двух оставшихся нод (например, cockroach-03) и запустите SQL-клиент.

cockroach sql

Снова запросите количество строк в таблице quotes:

SELECT COUNT(*) FROM startrek.quotes;

Как видите, несмотря на то, что одна из нод была удалена из кластера, данные полностью доступны. CockroachDB без проблем перенесла сбой одной из нод.

6: Восстановление ноды (опционально)

Теперь давайте посмотрим, как CockroachDB себя ведёт, когда сервер восстанавливается в кластере после ошибки. Удалите какие-нибудь данные и подключите в кластер удалённую ранее ноду. После восстановления ноды CockroachDB автоматически удалит с неё эти данные.

С помощью терминала cockroach-03 удалите все строки, где episode > 50:

DELETE FROM startrek.quotes WHERE episode > 50;
SELECT COUNT(*) FROM startrek.quotes;

В результате останется 133 строки.

Вернитесь в терминал удалённой ноды cockroach-02 и восстановите её:

cockroach start --insecure --background \
--advertise-host=cockroach_02_private_ip \
--join=cockroach_01_private_ip:26257

Запустите SQL-клиент:

cockroach sql

Запросите количество строк в таблице quotes:

SELECT COUNT(*) FROM startrek.quotes;

В ней должно быть 133 строки.

Несмотря на то, что действие было выполнено во время сбоя ноды, CockroachDB быстро восстанавливает и синхронизирует данные на всех нодах кластера.

Чтобы удалить тестовые данные, введите в cockroach sql CLI:

DROP TABLE quotes;
DROP TABLE episodes;
DROP DATABASE startrek;

7: Подключение приложения к CockroachDB

Кластер запущен и реплицирует данные. Теперь попробуйте подключить приложение к CockroachDB. Для этого понадобится:

  • Драйвер для приложения (CockroachDB использует драйверы PostgreSQL).
  • Строка соединения.

В данном руководстве вы найдёте общий пример подключения. При подключении реального приложения нужно учитывать его индивидуальные параметры.

Выберите подходящий драйвер из списка доступных драйверов PostgreSQL и установите его.

Примечание: Хотя CockroachDB поддерживает протокол PostgreSQL, синтаксис SQL CockroachDB и PostgreSQL отличаются и не являются взаимозаменяемыми.

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

Строка должна подключиться к порту 26257 и может использовать IP-адрес любой ноды. Брандмауэр должен пропускать соединения на порт 26257.

К примеру, так выглядит строка соединения PHP/PDO, которая подключается к пользователю 8host и базе данных bank на localhost.

PDO('pgsql:host=localhost;port=26257;dbname=bank;sslmode=disable',
'8host', null, array(
PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => true,
));

Примечание: Код для работы с клиентами PostgreSQL можно найти на сайте CockroachDB.

Заключение

База данных CockroachDB развёрнута в кластере из трех нод и поддерживает репликацию данных.

Проект CockroachDB быстро разрабатывается. Если появится обновление, в панели управления вы увидите сообщение:

There is a newer version of CockroachDB available.

Чтобы просмотреть ссылку на новый бинарный файл, нажмите Update. На момент написания руководства обновить файл нужно вручную.

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

Чтобы использовать CockroachDB в производстве, читайте рекомендации по настройке.

Документацию CockroachDB можно найти здесь.

Tags: ,

Добавить комментарий