Как развернуть CockroachDB на трехузловом кластере в Ubuntu 16.04

Статья из CockroachDB

Вступление

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

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

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

цели

В этом руководстве вы создадите распределенную и отказоустойчивую базу данных, развернув CockroachDB на нескольких серверах - распределенный многоузловой кластер. Вы начнете с установки CockroachDB на несколько серверов, запустите их как узлы, а затем сделайте так, чтобы они работали вместе как кластер.

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

В этом руководстве описывается настройка небезопасного развертывания без шифрования SSL, которое мы не рекомендуем использовать для производства. Однако CockroachDB также предлагает secure инструкции по развертыванию для DigitalOcean. (Несмотря на то, что говорится в первом абзаце по ссылке, выбрана * Secure * версия статьи.)

Предпосылки

Прежде чем начать, вам потребуется следующее:

  • 3 сервера Ubuntu 16.04 с оперативной памятью не менее 2 ГБ wite с включенной частной сетью. Все они должны быть в одном регионе. В этом руководстве мы будем использовать следующие имена хостов:

  • * Таракан-01 *

  • * Таракан-02 *

  • * Таракан-03 *

  • На каждом сервере add-пользователь без полномочий root с привилегиями sudo

  • Убедитесь, что трафик TCP разрешен на следующих портах. Если вы witch настроили UFW в качестве вашего firewall вам нужно разрешить эти два порта на каждом сервере:

  • + 26257 + для связи между узлами и приложениями: + sudo ufw allow 26257 / tcp +

  • + 8080 + для пользовательского интерфейса администратора: + sudo ufw allow 8080 / tcp +

  • Необязательно: На каждом сервере install и настройте NTP . (Для кратких испытаний это не является жестким требованием)

Запишите общие и частные IP-адреса всех ваших серверов. В этом руководстве мы будем использовать автономные имена хостов и IP-адреса, такие как * cockroach-01 *, ` и ` для каждого из трех серверов. Чтобы найти свой частный IP-адрес, нажмите на сервер с панели управления DigitalOcean. * Частный IP * указан в верхней строке информации.

Шаг 1 - Установка CockroachDB

У каждого узла в вашем кластере должна быть копия двоичного файла + cockroach + (то есть программа). Мы установим CockroachDB на ваш первый сервер * cockroach-01 *, а затем сделаем то же самое на других серверах.

Чтобы начать, войдите в систему * таракан-01 * с помощью SSH.

ssh @

Затем, из домашнего каталога вашего пользователя sudo, скачайте и установите последний двоичный файл + 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

Убедитесь, что бинарный файл доступен, проверив его версию:

cockroach version

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

Наконец, повторите эти команды для двух других серверов, которые вы планируете использовать в качестве узлов. В нашем примере это * таракан-02 * и * таракан-03 *.

Теперь, когда CockroachDB доступен на всех ваших машинах, вы можете настроить свой кластер.

Шаг 2 - Запуск вашего первого узла

Ваш первый узел CockroachDB запустит ваш кластер. В этом первом узле нет ничего особенного; просто нужно начинать с одного, а потом к нему присоединяться другие. Мы будем использовать * таракан-01 * для этого раздела.

Запишите свой частный IP-адрес для * cockroach-01 *. На панели управления DigitalOcean щелкните этот хост. * Частный IP * указан в верхней строке информации.

Следующая команда для запуска кластера должна быть выполнена на * cockroach-01 *. Эта команда запускает узел без шифрования SSL (+ - insecure +), возвращает управление командной строкой (+ - background +) и настраивает этот узел для связи с другими узлами, используя свой внутренний IP-адрес (+ --advertise-хост + `). Замените выделенную переменную ниже, `++, фактическим частным IP-адресом:

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

Теперь, когда ваш узел (и кластер) активен, вы можете просмотреть его детали, перейдя на его панель администратора UI (инструмент в комплекте с CockroachDB, чтобы показать вам информацию о вашем кластере). Перейдите к + http: //: 8080 +. На этот раз это публичный IP-адрес.

Здесь вы увидите, что у вас работает один узел.

изображение: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/vCwyWTg.png [CockroachDB Admin UI, показывающий кластер с 1 узлом]

Вы увидите предупреждающий восклицательный знак (!) На плитке * NODE *. Если навести указатель мыши на предупреждение, это означает, что в вашем кластере установлена ​​низкая репликация, что означает, что у вас недостаточно узлов. Это допустимо, поскольку у нас сейчас только один узел. С одним узлом ваши данные не являются отказоустойчивыми, поскольку они недостаточно реплицируются в другие источники. Если узел выйдет из строя, ваши данные будут потеряны.

Мы исправим это на следующем шаге, добавив два других сервера в качестве узлов в этот кластер. Имея три узла, CockroachDB гарантирует наличие как минимум трех копий ваших данных, поэтому можно потерять узел без безвозвратной потери данных.

Шаг 3 - Добавление узлов два и три в ваш кластер

На вашем сервере * cockroach-02 * запустите узел CockroachDB с помощью команды + cockroach start +, как вы делали в шаге 2. Здесь мы обновляем команду, чтобы указать, что вы хотите, чтобы она присоединилась к кластеру первого сервера через его частный IP-адрес. Вам потребуется частный IP-адрес для * cockroach-02 * и * cockroach-01 *, чтобы заменить выделенные ниже переменные ` и `.

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

Повторите эту команду на своем третьем компьютере, * cockroach-03 *, с его частным IP-адресом. Пусть он также присоединится к первому узлу.

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

Теперь, когда вы получаете доступ к интерфейсу администратора с любого узла, вы увидите, что в кластере есть 3 узла.

  • + HTTP: //: 8080 +

изображение: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/ZPudCY8.png [CockroachDB Admin UI, показывающий кластер с 3 узлами]

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

(Необязательно) Шаг 4 - демонстрация распространения данных

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

Из вашего первого узла * cockroach-01 * сгенерируйте данные примера:

cockroach gen example-data | cockroach sql

Это создает образец базы данных с именем + startrek +.

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

cockroach sql
SHOW DATABASES;

Вы увидите базу данных + startrek +, которая содержит данные нашего примера.

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

Теперь перейдите к терминалу вашего второго узла, * cockroach-02 *, и выполните те же команды:

cockroach sql
SHOW DATABASES;

Вы увидите, что, хотя вы сгенерировали данные примера на другом узле, они были распределены, и база данных + startrek + доступна со всех ваших других серверов.

Вы также можете увидеть, что база данных существует из боковой панели * DATABASES * Admin UI на любом узле; например, в + http: //: 8080 / # / database / +.

(Необязательно) Шаг 5 - Удаление узла из кластера

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

Формула допуска CockroachDB для отказа узла: * (n - 1) / 2 *, где * n * - количество узлов в вашем кластере. Таким образом, в этом примере из трех узлов мы можем допустить потерю одного узла без потери каких-либо данных.

Чтобы продемонстрировать это, мы удалим узел из кластера и покажем, что все данные кластера по-прежнему доступны. Затем мы снова присоединим узел к кластеру и увидим, что он получает все обновления, которые произошли, когда он был отключен.

С вашего второго узла, * cockroach-02 *, запустите клиент SQL, если вы еще не в нем:

cockroach sql

Подсчитайте количество строк в таблице + quotes + примера базы данных:

SELECT COUNT(*) FROM startrek.quotes;

Вы увидите, что в таблице 200 строк. Выйдите из клиента SQL, нажав + CTRL + C +.

Теперь мы удалим этот узел из кластера и увидим, что все данные по-прежнему доступны с других узлов.

С того же узла, который вы использовали (* таракан-02 *), остановите процесс таракана:

cockroach quit

Теперь переключитесь на терминал одного из ваших других узлов (например, * cockroach-03 *) и запустите клиент SQL:

cockroach sql

Выполните ту же команду, что и раньше, чтобы посчитать количество строк в таблице + quotes +:

SELECT COUNT(*) FROM startrek.quotes;

Несмотря на потерю одного из узлов в кластере, вы увидите, что у вас все еще есть 200 строк данных! Это означает, что 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= \
--join=:26257

Запустите встроенный клиент SQL:

cockroach sql

Теперь посчитайте количество строк в таблице + quotes +:

SELECT COUNT(*) FROM startrek.quotes;

Это все еще должно быть 133.

Таким образом, несмотря на то, что он находился в автономном режиме, когда произошло обновление, узел обновляется, как только он присоединяется к кластеру.

Если хотите, теперь вы можете удалить примеры данных (все еще используя CLI + cockroach sql +):

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

(Необязательно) Шаг 7 - Подключение приложения

Когда ваш кластер запущен и работает, вы можете использовать его в качестве базы данных для приложения. Это требует двух частей:

  • драйвер для использования с вашим приложением (CockroachDB работает с драйверами PostgreSQL)

  • соответствующая строка подключения

Это руководство показывает общий пример; вам нужно будет предоставить подробности для вашего собственного приложения.

Выберите и установите соответствующий драйвер от списка совместимых драйверов клиента PostgreSQL для вашего приложения.

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

Строка подключения должна подключаться к порту + 26257 + и может использовать IP-адрес любого узла. Это означает, что ваш брандмауэр также должен разрешать соединения через порт + 26257 + (как мы установили в предварительных условиях).

Например, вот строка подключения PHP / PDO, которая подключает пользователя + sammy + к базе данных + банк + на + localhost +:

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

Для получения дополнительной помощи по использованию клиентских драйверов PostgreSQL CockroachDB имеет a количество доступных примеров кода.

Заключение

К этому моменту вы создали кластер из трех узлов, ознакомились с распределенными и живучими функциями CockroachDB и увидели, как подключить кластер к приложению.

Поскольку CockroachDB является быстро меняющимся проектом, вы иногда будете видеть на своей панели мониторинга сообщение: * Доступна более новая версия CockroachDB. * Используйте кнопку * Update *, чтобы просмотреть ссылку на обновленный двоичный файл, который во время Написание вам придется скачать и установить вручную.

Если вы хотите масштабировать развертывание по горизонтали, добавив больше узлов, выполните шаги для второго и третьего узлов, приведенных выше для четвертого узла и т. Д. Все, что вам нужно сделать, это установить двоичный файл + cockroach + и подключить новые узлы к существующему кластеру.

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

И, наконец, вот общая ссылка на документацию CockroachDB.

Related