Руководтсво администратора/разработчика

Документация

Варианты СУБД

CockrouchDB

CockroachDB — распределённая СУБД (SQL) с открытым кодом, обеспечивающая согласованность данных, масштабируемость и выживаемость. (рекомендуется как быстрая и простая замена Postgres)


Подготовка

Поскольку CockrouchDB является распределённая СУБД (SQL) с открытым кодом, обеспечивающая согласованность данных, масштабируемость и выживаемость, то имеет смысл устанавливать его на несколько хостов (серверов).

Настройка CockroachDB проста. Все узлы кластера действуют «симметрично» и предлагают доступ к одинаковым данным. Если хранилище для данных необходимо увеличить, то при используемой архитектуре достаточно создать новые узлы и присоединить к кластеру.

Перед тем, как начать, потребуются:

  • Три сервера с Ubuntu 16.04 с 2+ Гб RAM и включённой опцией Private Networking [для DigitalOcean]. Все они должны находиться в одном регионе. В качестве их имён далее будут использоваться: cockroach-01cockroach-02cockroach-03.
  • На каждом сервере должен быть добавлен пользователь-администратор (не root, но с правами sudo).
  • У всех серверов должен быть разрешён TCP-трафик на двух портах. Если в качестве firewall настроен UFW, потребуется его настроить соответствующим образом:
    • 26257 — для взаимодействия между узлами и с приложением (sudo ufw allow 26257/tcp);
    • 8080 ­— для административного интерфейса Admin UI (sudo ufw allow 8080/tcp).
  • Опционально: установите и настройте NTP на каждом сервере. (Если разворачиваете СУБД для короткого тестирования, в этом нет необходимости.)

Узнайте внутренний и внешний IP-адреса каждого сервера. Далее в для них будут использоваться обозначения вида cockroach_01_public_ip и cockroach_02_private_ip и тд.


Установка

На каждом узле кластера должен быть исполняемый файл cockroach. Далее описана установка CockroachDB на первом сервере (cockroach-01), по аналогии с которой необходимо провести операции на остальных узлах.

Подключаемся по SSH к серверу, после чего в домашнем каталоге пользователя скачиваем и устанавливаем последнюю версию бинарника cockroach:
 

$ ssh sammy@cockroach_01_public_ip
$ wget -qO- https://binaries.cockroachdb.com/cockroach-v20.1.11.linux-amd64.tgz | tar xvz
$ sudo cp -i cockroach-v20.1.11.linux-amd64/cockroach /usr/local/bin/


Проверьте, что исполняемый файл СУБД доступен, узнав его версию:
 

$ cockroach version
Build Tag:v1.0-rc.1-dirty
Build Time: 2017/05/01 18:33:34
Distribution: CCL
Platform: linux amd64
Go Version: go1.8.1
C Compiler: gcc 6.3.0
Build SHA-1:2d4d1ab5c42efb5accf73c9876e6ffd934fdc9e6
Build Type: release


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

Повторите эти операции на двух других серверах, которые станут узлами кластера (cockroach-02 и cockroach-03). После этого можно настроить сам кластер.


Настройка узлов (общедоступный режим)

Добавление первого узла

Первый узел CockroachDB — cockroach-01 — запустит кластер. Но ничего особенного в его конфигурации нет: он просто запускается как один сервер СУБД, к которому затем присоединяются другие.

Для запуска кластера надо выполнить на cockroach-01 следующую команду (вместо имени cockroach-01 можно указать IP-адрес):

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


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

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


Теперь, когда узел (и кластер) начал работать, можно посмотреть сведения о нём через панель управления административного интерфейса Admin UI, встроенного в CockroachDB для получения информации о кластере. Зайдите по адресу http://cockroach_01_public_ip:8080 (теперь уже используется публичный IP).

О том, что узел успешно запущен, видно в интерфейсе:
 


Уведомительный восклицательный знак (!) в блоке NODE при наведении курсора мыши даст пояснение: кластер имеет слабый уровень репликации (Low Replication), потому что у вас недостаточно узлов. С одним узлом, который запущен сейчас, данные не будут восстановлены в случае падения (о том, сколько требуется узлов для стабильной работы, читайте ниже, в пункте 5).

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

Добавление второго и третьего узлов к кластеру


Запустите на сервере cockroach-02 команду cockroach так же, как это было сделано для первого узла на предыдущем этапе, но с единственным отличием. В параметрах СУБД мы укажем, что необходимо присоединиться к первому узлу через внутренний IP-адрес. В команде ниже замените обе переменные с IP (cockroach_02_private_ip и cockroach_01_private_ip):
 

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


Выполните такую же команду на третьем сервере (cockroach-03), указав там его внутренний IP. Присоедините его тоже к первому узлу:
 

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


Зайдите в административный интерфейс (Admin UI) любого узла (например, http://cockroach_03_public_ip:8080) и убедитесь, что кластер теперь состоит из 3 узлов:



Все узлы соединены между собой и имеют доступ к одним и тем же данным.


Настройка узлов (защищенный режим)

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

 

Создание сертификатов

  1. Создайте два локальных каталога (на рабочей машине, НЕ на сервере):

    mkdir certs
    mkdir my-safe-directory
    • certs: директория, где будет сгенерирован свой сертификат CA и все сертификаты и ключи узлов и клиентов в этом кластере, а затем загрузите некоторые файлы на свои узлы.
    • my-safe-directory: директория, где будет сгенерирован свой ключ CA в этом кластере, а затем мы будем ссылаться на этот ключ при создании сертификатов узла и клиента. Это секретный ключ, его не стоит загружать его на другие узлы.
  2. Создайте сертификат и ключ CA:

    cockroach cert create-ca \
    --certs-dir=certs \
    --ca-key=my-safe-directory/ca.key
    
  3. Создайте сертификат и ключ для первого узла, выданные для всех общих имен, которые вы можете использовать для ссылки на узел, а также на экземпляры балансировщика нагрузки:

    cockroach cert create-node \
    <node1 internal IP address> \
    <node1 external IP address> \
    $(hostname) \
    localhost \
    127.0.0.1 \
    --certs-dir=certs \
    --ca-key=my-safe-directory/ca.key
    
  4. Загрузите сертификат CA, сертификат узла и ключ на первый узел:

    Если у вас настроен sftp-доступ к серверу или имеется другой способ скопировать файлы на сервер, то скопируйте файлы node.crt, node.key  и ca.key в директорию ~/certs на сервер, иначе выполните следующие команды:

    • ssh <username>@<node1 address> "mkdir certs"
      
      scp certs/ca.crt \
      certs/node.crt \
      certs/node.key \
      <username>@<node1 address>:~/certs
      
    • Удалите локальную копию сертификата узла и ключа:

      rm certs/node.crt certs/node.key
      

      Примечание:

      Это необходимо, поскольку сертификаты и ключи для дополнительных узлов также будут иметь имена node.crt и node.keyВ качестве альтернативы удалению этих файлов вы можете запускать следующие cockroach cert create-node команды с --overwrite флагом.

  5. Создайте сертификат и ключ для второго, третьего и других узлов. (повторяйте шаги 3–4 для каждого узла).

  6. Создайте клиентский сертификат и ключ для root-пользователя:

    cockroach cert create-client \
    root \
    --certs-dir=certs \
    --ca-key=my-safe-directory/ca.key
    
  7. Загрузите сертификат CA, сертификат клиента и ключ на машины, с которых будет осуществляться подключение к нодам кластера:

    ssh <username>@<workload address> "mkdir certs"
    
    scp certs/ca.crt \
    certs/client.root.crt \
    certs/client.root.key \
    <username>@<workload address>:~/certs
    

    Далее мы опишем процедуру настройки подключения к защищенному кластеру.

 

Запуск узлов

Выполните на каждом узле команду:

cockroach start \
--certs-dir=certs \
--advertise-addr=<node1 address> \
--join=<node1 address>,<node2 address>,<node3 address> \
--cache=.25 \
--max-sql-memory=.25 \
--background

Надо повторить данную команду для всех нод кластера, меняя параметры IP-адресов каждого узла.

На локальном компьютере запустите cockroach init команду, чтобы завершить процесс запуска узлов и объединить их в кластер:

cockroach init --certs-dir=certs --host=<address of any node>

После запуска узлов, мы можем получить доступ к web-интерфейсу cockroach-кластера, обратившись на любой из узлов по порту 8080

Для доступа к консоли необходимо создать пользователя, для этого подлючаемся к любому из узлов

cockroach sql --certs-dir=certs --host=<address>
и создаем пользователя, используя команду sql
CREATE USER craig WITH PASSWORD 'ваш_пароль';


Подключение RiderDB

1. Создание объкта "Подключения к БД"

При создании нового проекта создается SQLite база данных, в которую переносятся все необходимые данные для запуска нового проекта (шаблоны, объекты) и проект стартуется с использованием этой базы данных.

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

Создание объекта "подключения"

Выберите пункт меню "Системные" - "БД" - "Подключение к БД" и создайте объект подключения

Пример создания объекта подключения в БД

  • Название - любое название
  • Драйвер - выберите из списка (база CockrouchDB совместима с PostgreSQL и использует тот же драйвер. Выбираем postgres
  • Соединение/путь - строка подключения к вашей созданой базы данных (включает указание пользователя/путь к серверу/название базы)

 

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

 

2. Создайте базу данных

Buildbox реализуем механизм ведения архива состояний баз данных, а также механизм миграции баз данных между различными драйверами.

Для этого необходимо создать базу данных во вкладке "Архив БД" с необходимым драйвером. При создании объекта база данных создается автоматически и копирует данные из текущей базы (хранилища).

Для активации созданной БД необходимо нажать "Активировать" и перестартовать сервис RiderDB (API).

 

3. Активация созданного "Подключения к БД"

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

Сохраните конфигурацию  (нажмите "Сохранить конфигурацию") и сделайте рестарт сервиса (нажмите "Перезагрузить")


Строка соединения

Для подключения к БД необходимо использовать следующий формат подключения

postgresql://{имя_пользователя}:{пароль}@{IP_или_доменное_имя_сервера}:26257?sslmode=require

Пример:

postgresql://pguser:pass123@cr01.server.com:26257?sslmode=require


Настройка сервера

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

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

1. Войдите на любой из хостов вашего кластера

cockroach sql --certs-dir=certs --host=IP_адрес_или_доменное_имя_сервера

2. Создайте роль (пользователя), которого вы будете указывать в строке соединения с БД с необходимыми правами (работает с версии v20.2.5 и выше)

CREATE USER ваш_пользователь WITH CREATEDB LOGIN PASSWORD 'пароль' VALID UNTIL '2040-10-10';

Внимание! Настройка повторяет действия, которые вы выполняете выше при добавления пользователя для доступа к UI-интерфейсу. Вы можете сразу указать параметр CREATEDB и использовать одного пользователя и для доступа к UI и для подключения к базе данных.