Кластер — это определенное количество серверов, объединенных в группу и образующих единый ресурс. Данное решение позволяет повысить надёжность, доступность и производительность системы и предназначено для исключения простоев в её работе.
Платформа Arta Synergy использует хранилище Cassandra и индексатор Elasticsearch, позволяющие создавать кластеры как для распределения нагрузки, так и для сохранения доступности данных.
В данной инструкции приведены минимальные настройки следующей конфигурации:
платформа Arta Synergy
MySQL на отдельном сервере
главный узел (master-node) Elasticsearch на отдельном сервере
3 отдельных сервера, на каждом из которых установлены Cassandra и Elasticsearch
Примечание
На всех серверах время должно быть синхронизировано.
На сервере Synergy для MySQL нужно указать пути к БД в конфигурационном
файле standalone-onesynergy.xml
, а также
логин и пароль пользователя с доступом к MySQL, если они отличаются от
установленных по умолчанию:
<xa-datasource jndi-name="java:/SynergyDS" pool-name="synergy_ds" enabled="true" use-ccm="fals$ <xa-datasource-property name="URL"> --> jdbc:mysql://192.168.2.3:3306/synergy?useUnicode=true&characterEncoding=utf8 </xa-datasource-property> <driver>com.mysql</driver> <xa-pool> <min-pool-size>20</min-pool-size> <max-pool-size>400</max-pool-size> <is-same-rm-override>false</is-same-rm-override> <interleaving>false</interleaving> <pad-xid>false</pad-xid> <wrap-xa-resource>false</wrap-xa-resource> </xa-pool> <security> --> <user-name>root</user-name> --> <password>root</password> </security> ... </xa-datasource>
Аналогично для StorageDS
, для версий Arta
Synergy ниже 4.1 - jbpm
.
В нашем примере сервер MySQL имеет ip-адрес 192.168.2.3 и стандартные учётные данные пользователя. Для применения изменений Wildfly/ JBoss должен быть перезапущен.
Затем на сервере MySQL нужно дать все права пользователю, который будет подключаться с сервера Synergy:
mysql> GRANT ALL PRIVILEGES ON *.* TO
'root'@'ip-адрес_сервера_Synergy' WITH GRANT OPTION IDENTIFIED BY
'root';
mysql> FLUSH PRIVILEGES;
Проверить подключение с сервера Synergy можно так:
# mysql -u {username} -p'{password}' -h {remote
server ip or name} -P {port} -D {DB name}
В нашем случае:
# mysql -uroot -proot -h 192.168.2.3 -P 3306 -D
synergy
В рассматриваемой конфигурации используется один главный узел и 3 узла с данными Elasticsearch. Главный узел в примере не хранит данные и используется только для извлечения данных и группирования результатов.
Настройки на сервере Synergy осуществляются в файле /opt/synergy/jboss/standalone/configuration/arta/elasticConfiguration.xml
,
где нужно указать ip-адрес главного узла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration xmlns="http://www.arta.kz/xml/ns/ai" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.arta.kz/xml/ns/ai http://www.arta.kz/xml/ns/ai/index.xsd"> <!-- URL доступа к серверу Elasticsearch --> <url>http://192.168.2.111:9200/</url> ... </configuration>
Также следует убедиться, что в нужных конфигурационных файлах (fileIndex.xml
, docIndex.xml
, formIndex.xml
) индексатором установлен
Elasticsearch. Для применения изменений Wildfly/ JBoss должен быть
перезапущен.
На сервере главного узла в файле /etc/elasticsearch/elasticsearch.yml
нужно
раскомментировать либо добавить следующие параметры:
cluster.name: elastic_cluster
- имя
кластера, указывается на всех нодах кластера;
node.name: elastic_master
- имя данного
узла;
network.host: 192.168.2.111
- указать
ip-адрес узла;
discovery.zen.ping.unicast.hosts: ["192.168.4.0",
"192.168.0.155", "192.168.2.158", "192.168.2.111"]
- перечислить
ip-адреса всех нод кластера;
discovery.zen.minimum_master_nodes: 1
-
число серверов объединения процессов, требуемых для кворума кластера, так
как в конфигурации используется один главный узел, нужно указать 1;
Примечание
В кластере должно использоваться нечётное число главных узлов, например, 1, 3, 5. В этом параметре используется число, равное n/2 +1, где n - количество главных узлов.
node.master: true
- назначает экземпляр
Elasticsearch главным узлом;
node.data: false
- параметр указывает,
что узел не будет хранить данные.
На 3 серверах, содержащих узлы Elasticsearch с данными, должны быть указаны такие параметры:
cluster.name: elastic_cluster
node.name: имя_узла
network.host: ip_адрес_данного_узла
discovery.zen.ping.unicast.hosts: ["192.168.4.0",
"192.168.0.155", "192.168.2.158", "192.168.2.111"]
discovery.zen.minimum_master_nodes: 1
node.master: false
- указать, что узел не
является главным;
node.data: true
- узел будет хранить
данные;
Для применения изменений нужно перезапустить Elasticsearch на всех нодах.
Проверить состояние узлов можно так:
# curl 'http://192.168.2.158:9200/_cat/nodes?v' ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 192.168.2.111 41 98 29 1.50 1.41 1.31 mi * elastic_master 192.168.4.0 31 99 15 2.58 2.36 2.19 di - cassel1 192.168.0.155 26 99 15 2.58 2.36 2.19 di - cassel2 192.168.2.158 16 98 28 1.50 1.41 1.31 di - cassel3
Проверить состояние кластера:
# curl 'http://192.168.2.158:9200/_cluster/health?pretty' { "cluster_name" : "elastic_cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 4, "number_of_data_nodes" : 3, "active_primary_shards" : 340, "active_shards" : 1020, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
Статус кластера определяется на уровне шардов (фрагментов). Возможные статусы:
green
- все фрагменты доступны;
yellow
- основной фрагмент размещён, но
некоторые реплики фрагментов пока нет;
red
- часть фрагментов недоступна.
Примечание
Каждый документ хранится в одном основном фрагменте (shard). Когда документ индексируется, он сперва индексируется на основном фрагменте, а затем на всех его копиях (replicas).
Настройки на сервере Synergy производятся в конфигурационных файлах /opt/synergy/jboss/standalone/configuration/arta/jcr/jcr-cassandra.xml
и /opt/synergy/jboss/standalone/configuration/arta/jcr/ss4c-cassandra.xml
.
В них следует указать ip-адреса всех нод Cassandra, в hostName
добавить ip одной из нод и выбрать
уровень согласованности:
<configuration> <nodes> <node> <host>192.168.4.0</host> <port>9042</port> </node> </nodes> <nodes> <node> <host>192.168.0.155</host> <port>9042</port> </node> </nodes> <nodes> <node> <host>192.168.2.158</host> <port>9042</port> </node> </nodes> <hostName>192.168.4.0</hostName> ... <consistency-level>QUORUM</consistency-level> </configuration>
Выбранный в данном случае уровень QUORUM
означает, что координатор кластера дожидается подтверждения записи от более
чем половины узлов, в описываемой конфигурации от 2. Уровни согласованности
можно подробнее изучить в официальной
документации.
Нужно также проверить, что в standalone-onesynergy.xml
в секции resource-adapters
отсутствуют либо
закомментированы строки, относящие к хранилищу Jackrabbit
Для применения изменений Wildfly/ JBoss должен быть перезапущен.
На серверах, содержащих ноды Cassandra, нужно указать следующие параметры в
/etc/cassandra/cassandra.yaml
:
cluster_name: 'Synergy Cluster'
- имя
кластера Cassandra;
listen_address: ip-адрес_узла
- для
каждого узла указать его ip;
rpc_address: ip-адрес_узла
- для каждого
узла указать его ip;
seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "192.168.4.0, 192.168.0.155" - перечислить ip-адреса раздающих узлов кластера. Не нужно делать все узлы кластера раздающими.
Более подробно настройка параметров для промышленного развёртывания описана в соответствующем разделе.
Затем нужно перезапустить Cassandra на всех серверах кластера. Состояние кластера можно проверить так:
# nodetool status Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 192.168.0.155 250.21 MB 256 100.0% 35c9844a-ae5e-429a-bff0-4a3b9c29b8c3 rack1 UN 192.168.2.158 250.3 MB 256 100.0% 21b89eea-9779-46d5-9ac8-7096f03764a7 rack1 UN 192.168.4.0 250.24 MB 256 100.0% ecf9e4a8-4500-4462-aeb8-31f33c1c7bfb rack1