Развёртывание CockroachDB в кластере в Ubuntu 16.04
Ubuntu | Комментировать запись
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: CockroachDB, Ubuntu 16.04