Site icon 8HOST.COM

Настройка кластера OrientDB в Ubuntu 16.04

OrientDB – это многомодельная база данных NoSQL с поддержкой графиков и документных баз данных. Это приложение Java может работать в любой операционной системе. OrientDB совместима с ACID и поддерживает кластеризацию и репликацию с несколькими мастерами, что упрощает горизонтальное масштабирование.

Понятие «кластер» в OrientDB имеет несколько значений:

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

Требования

1: Root-пароль и имя OrientDB

Запустите сценарий dserver.sh, чтобы сгенерировать учетные данные для экземпляра OrientDB. Это поможет выбрать пароль root и имя экземпляра OrientDB.

Примечание: Выполните этот раздел на всех трех серверах.

Откройте каталог установки.

cd /opt/orientdb

Запустите распределенный сервер.

sudo bin/dserver.sh

При первом запуске распределенного сервера будет предложено указать пароль для учетной записи пользователя root. Это внутренняя учетная запись OrientDB, которая будет использоваться для доступа к серверу, для работы с OrientDB Studio (веб-интерфейсом OrientDB) и подключения к OrientDB с консоли. Если вы не укажете пароль, он будет сгенерирован автоматически. Рекомендуется выбрать пароль самостоятельно.

+---------------------------------------------------------------+
|                WARNING: FIRST RUN CONFIGURATION               |
+---------------------------------------------------------------+
| This is the first time the server is running. Please type a   |
| password of your choice for the 'root' user or leave it blank |
| to auto-generate it.                                          |
|                                                               |
| To avoid this message set the environment variable or JVM     |
| setting ORIENTDB_ROOT_PASSWORD to the root password to use.   |
+---------------------------------------------------------------+
Root password [BLANK=auto generate it]: *****
Please confirm the root password: *****

Затем программа предложит установить имя экземпляра OrientDB (оно может совпадать с именем облачного сервера, на котором запущен экземпляр).

+---------------------------------------------------------------+
|         WARNING: FIRST DISTRIBUTED RUN CONFIGURATION          |
+---------------------------------------------------------------+
| This is the first time that the server is running as          |
| distributed. Please type the name you want to assign to the   |
| current server node.                                          |
|                                                               |
| To avoid this message set the environment variable or JVM     |
| setting ORIENTDB_NODE_NAME to the server node name to use.    |
+---------------------------------------------------------------+
Node name [BLANK=auto generate it]: node-name

Когда сценарий закончит работу, вы увидите:

2017-06-01 02:24:00:717 INFO  OrientDB Server is active v2.2.20 (build 76ab59e72943d0ba196188ed100c882be4315139). [OServer]

На этом этапе вы можете прервать процесс с помощью CTRL + C. Теперь нужно настроить кластер.

2: Настройка распределенного режима OrientDB

Чтобы экземпляр OrientDB работал как нода кластера, необходимо изменить три файла в его каталоге конфигурации:

Файл hazelcast.xml

Главный параметр, который нужно настроить в hazelcast.xml – это механизм, с помощью которого ноды подключаются к кластеру. Рассмотрим механизмы IP Multicast и TCP/IP-cluster. В первом случае нужно указать групповой адрес и порт, который прослушивает каждая нода; механизм IP Multicast автоматически обнаружит сеть. Во втором случае нужно указать IP-адрес каждого члена кластера. В руководстве используется второй механизм, TCP/IP-cluster.

Откройте файл:

sudo nano /opt/orientdb/config/hazelcast.xml

Файл не очень объемный. Изменить нужно следующие разделы файла:

. . .
<group>
<name>orientdb</name>
<password>orientdb</password>
</group>
<properties>
. . .
</properties>
<network>
<port auto-increment="true">2434</port>
<join>
<multicast enabled="true">
<multicast-group>235.1.1.1</multicast-group>
<multicast-port>2434</multicast-port>
</multicast>
</join>
</network>

Отключите многоадресную передачу IP, добавьте запись, которая включает TCP/IP- cluster и укажите ноды кластера. Рассмотрим каждый тег подробнее:

Окончательная версия файла будет выглядеть так:

. . .
<group>
<name>clusterName</name>
<password>clusterPassword</password>
</group>
<properties>
. . .
</properties>
<network>
<port auto-increment="false">2434</port>
<join>
<multicast enabled="false">
<multicast-group>235.1.1.1</multicast-group>
<multicast-port>2434</multicast-port>
</multicast>
<tcp-ip enabled="true">
<member>your_master_server_ip_1</member>
<member>your_master_server_ip_2</member>
<member>your_replica_server_ip</member>
</tcp-ip>
</join>
</network>

Сохраните и закройте файл.

Файл default-distributed-db-config.json

В файл /opt/orientdb/config/default-distributed-db-config.json нужно внести всего несколько поправок. В этом файле можно указать роль ноды в кластере (master или replica).

Откройте файл:

sudo nano /opt/orientdb/config/default-distributed-db-config.json

Найдите следующий блок в файле:

{
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": "majority",
"executionMode": "undefined",
"readYourWrites": true,
"newNodeStrategy": "static",
"servers": {
"*": "master"
},
. . .
}

В результате получится такой файл:

{
"replication": true,
"hotAlignment" : true,
"autoDeploy": true,
"readQuorum": 1,
"writeQuorum": "majority",
"executionMode": "undefined",
"readYourWrites": true,
"newNodeStrategy": "static",
"servers": {
"orientdb_server_name_1": "master",
"orientdb_server_name_2": "master",
"orientdb_server_name_3": "replica"
},
...
}

Сохраните и закройте файл.

Файл orientdb-server-config.xml

В файле /opt/orientdb/config/orientdb-server-config.xml есть параметр, который используется для включения и отключения кластеризации с помощью Hazelcast In-Memory Data Grid в OrientDB. Имя, которое вы предоставили экземпляру OrientDB в разделе 1, можно изменить в этом файле.

Откройте файл:

sudo nano /opt/orientdb/config/orientdb-server-config.xml

Найдите в начале файла следующий раздел. Обратите внимание, что значение параметра NodeName – это имя, которое вы указали в шаге 1:

. . .
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter value="${distributed}" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" na$
<parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.haz$
<parameter value="orientdb_server_name_1" name="nodeName"/>
</parameters>
</handler>
. . .

Чтобы включить кластеризацию, параметр enabled должен иметь значение true. Измените значение параметра. В результате файл выглядит так:

. . .
<handler class="com.orientechnologies.orient.server.hazelcast.OHazelcastPlugin">
<parameters>
<parameter value="true" name="enabled"/>
<parameter value="${ORIENTDB_HOME}/config/default-distributed-db-config.json" na$
<parameter value="${ORIENTDB_HOME}/config/hazelcast.xml" name="configuration.haz$
<parameter value="orientdb_server_name_1" name="nodeName"/>
</parameters>
</handler>
. . .

Сохраните и закройте файл.

Осталось только разблокировать трафик OrientDB в брандмауэре.

3: Настройка брандмауэра

Если сейчас вы попытаетесь запустить кластер, трафик OrientDB будет заблокирован брандмауэром. Откорректируйте правила и разблокируйте трафик через следующие порты:

Откройте эти порты.

sudo ufw allow 2424
sudo ufw allow 2434

Примечание: Порт 2480 используется для доступа к веб-интерфейсу OrientDB Studio. Он использует HTTP, потому соединение небезопасно. Однако если вы хотите открыть трафик по этому порту, введите:

sudo ufw allow 2480

Запустите UFW.

sudo systemctl restart ufw

Система OrientDB уже настроена как сервис Systemd (в руководстве по установке), поэтому теперь можно запустить кластер.

4: Запуск и тестирование кластера OrientDB

На каждом сервере добавьте сервис в автозагрузку.

sudo systemctl enable orientdb

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

sudo systemctl start orientdb

Проверьте состояние процессов.

sudo systemctl status orientdb
orientdb.service - OrientDB Server
Loaded: loaded (/etc/systemd/system/orientdb.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-06-01 02:45:53 UTC; 7s ago

Если сервер не запускается, найдите подсказки в выводе. Потенциальные источники ошибок: нехватка оперативной памяти, отсутствие Java JRE и файл JSON, который не прошел проверку. Не забудьте перезапустить OrientDB, если вы вносите изменения в любой из файлов, перечисленных в разделе 2.

Теперь нужно проверить работу кластера. На любой ноде отфильтруйте записи syslog, связанные с кластером:

sudo tail -f /var/log/syslog | grep -i dserver

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

-------------------+------+------------------------------------+-----+---------+-------------------+
|Name              |Status|Databases                           |Conns|StartedOn|Binary             |
-------------------+------+------------------------------------+-----+---------+-------------------+
|orientdb-replica-1|ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|4    |01:26:00 |111.111.111.111
|orientdb-master-2 |ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|4    |01:25:13 |222.222.222.222
|orientdb-master-1*|ONLINE|GratefulDeadConcerts=ONLINE (MASTER)|6    |01:24:46 |333.333.333.333

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

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

cd /opt/orientdb/bin
sudo ./console.sh

Последняя команда должна выдавать следующий вывод при запуске консоли (командная строка изменится на orientdb>).

OrientDB console v.2.2.17 (build UNKNOWN@r98dbf8a2b8d43e4af09f1b12fa7ae9dfdbd23f26; 2017-02-02 07:01:26+0000) www.orientdb.com
Type 'help' to display all the supported commands.
Installing extensions for GREMLIN language v.2.6.0
orientdb>

Теперь подключитесь к экземпляру сервера OrientDB. Эта команда просто подключается к экземпляру OrientDB, с помощью учетной записи пользователя root. Пароль был создан в разделе 3.

connect remote:localhost root root-password

Для примера создайте БД CallMeMaybe:

create database remote:localhost/CallMeMaybe root root-password plocal

Примечание: Если вы получили сообщение об ошибке Permission Denied или ему подобное, проверьте привилегии на каталог /opt/orientdb/databases. У учетной записи, создающей базу данных с консоли, должны быть права на чтение и запись этого каталога. Вы можете узнать больше о привилегиях Linux здесь.

На данный момент БД CallMeMaybe пуста. Добавьте в нее какие-нибудь данные, например класс.

create class Artist

Добавьте в него запись:

insert into Artist (id, name, age) values (01,'8host', 35)

Убедитесь, что запись появилась в БД.

select id, age, name from Artist

Вы увидите:

+----+----+----+------+
|#   |id  |age |name  |
+----+----+----+------+
|0   |1   |35  |8host |
+----+----+----+------+
1 item(s) found. Query executed in 0.216 sec(s).

Чтобы закрыть консоль, введите:

exit

Теперь перейдите на другую ноду кластера и попытайтесь запросить новую БД, чтобы убедиться, что данные успешно реплицируются.

ssh 8host@another_orientdb_server_ip

Запустите консоль:

cd /opt/orientdb/bin
sudo ./console.sh

Подключитесь к БД как admin, стандартный пользователь OrientDB.

connect remote:localhost/CallMeMaybe admin admin

Повторите запрос:

select id, age, name from Artist

Вы должны получить ту же таблицу.

Закройте консоль.

exit

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

Заключение

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

Читайте также: