7.2. Создание базового файла конфигурации

Если Red Hat Enterprise Linux и Red Hat High Availability уже установлены, для создания кластера останется только создать файл конфигурации /etc/cluster/cluster.conf и запустить кластерные службы. Эта секция ориентирована на создание базового файла конфигурации. Более сложные операции — изоляция узлов, настройка резервных доменов и служб высокой готовности — будут рассмотрены позднее.

Важно

В результате будет создан простой файл конфигурации. Такая версия не считается завершенной.
Ниже приведен порядок создания шаблона файла конфигурации. Окончательный файл может отличаться в зависимости от индивидуальных требований окружения, числа узлов, типа изоляции, типа и числа кластерных служб.
  1. Создайте файл /etc/cluster/cluster.conf на любом узле (см. Пример 7.1, «cluster.conf. Базовая конфигурация»).
  2. Дополнительно: при настройке кластера с двумя узлами можно позволить одному узлу поддерживать кворум:
    <cman two_node="1" expected_votes="1"/>
    Операции добавления или удаления two_node из cluster.conf требуют перезапуска кластера (см. Раздел 8.4, «Обновление конфигурации»). Пример 7.2, «cluster.conf. Базовая конфигурация для двух узлов» содержит пример настройки two_node.
  3. После этого можно выбрать имя кластера и номер версии конфигурации с помощью атрибутов name и config_version в строке cluster (см. Пример 7.1, «cluster.conf. Базовая конфигурация» и Пример 7.2, «cluster.conf. Базовая конфигурация для двух узлов»).
  4. В секции clusternodes для каждого узла можно определить имя и идентификатор с помощью атрибутов name и nodeid в строке clusternode.
  5. Сохраните /etc/cluster/cluster.conf.
  6. Проверьте соответствие его формата схеме в cluster.rng:
    [root@example-01 ~]# ccs_config_validate 
    Configuration validates
    
  7. Скопируйте изменения в /etc/cluster/ на каждом узле. Это можно сделать с помощью scp.

    Примечание

    Копирование конфигурации работающего кластера рекомендуется выполнять с помощью cman_tool version -r. По желанию можно использовать scp, но при этом потребуется остановить кластерные программы на всех узлах и выполнить проверку ccs_config_validate.

    Примечание

    Базовый шаблон содержит и другие элементы, но они будут рассмотрены позднее.
  8. Запустите кластер на всех узлах:
    service cman start
    Пример:
    [root@example-01 ~]# service cman start
    Starting cluster: 
       Checking Network Manager...                             [  OK  ]
       Global setup...                                         [  OK  ]
       Loading kernel modules...                               [  OK  ]
       Mounting configfs...                                    [  OK  ]
       Starting cman...                                        [  OK  ]
       Waiting for quorum...                                   [  OK  ]
       Starting fenced...                                      [  OK  ]
       Starting dlm_controld...                                [  OK  ]
       Starting gfs_controld...                                [  OK  ]
       Unfencing self...                                       [  OK  ]
       Joining fence domain...                                 [  OK  ]
    
  9. Выполните cman_tool nodes на любом узле, чтобы убедиться, что все узлы успешно вошли в состав кластера, о чем сообщает значение «M» в столбце статуса:
    [root@example-01 ~]# cman_tool nodes
    Node  Sts   Inc   Joined               Name
       1   M    548   2010-09-28 10:52:21  node-01.example.com
       2   M    548   2010-09-28 10:52:21  node-02.example.com
       3   M    544   2010-09-28 10:52:21  node-03.example.com
    
  10. После успешного создания кластера можно приступить к настройке изоляции узлов (см. Раздел 7.3, «Исключение узлов из кластера»).

7.2.1. Примеры cluster.conf

Пример 7.1, «cluster.conf. Базовая конфигурация» и Пример 7.2, «cluster.conf. Базовая конфигурация для двух узлов» демонстрируют две схемы, на основе которых будут позднее настроены возможности изоляции узлов и службы высокой готовности.

Пример 7.1. cluster.conf. Базовая конфигурация


<cluster name="mycluster" config_version="2">
   <clusternodes>
     <clusternode name="node-01.example.com" nodeid="1">
         <fence>
         </fence>
     </clusternode>
     <clusternode name="node-02.example.com" nodeid="2">
         <fence>
         </fence>
     </clusternode>
     <clusternode name="node-03.example.com" nodeid="3">
         <fence>
         </fence>
     </clusternode>
   </clusternodes>
   <fencedevices>
   </fencedevices>
   <rm>
   </rm>
</cluster>

Пример 7.2. cluster.conf. Базовая конфигурация для двух узлов


<cluster name="mycluster" config_version="2">
   <cman two_node="1" expected_votes="1"/>
   <clusternodes>
     <clusternode name="node-01.example.com" nodeid="1">
         <fence>
         </fence>
     </clusternode>
     <clusternode name="node-02.example.com" nodeid="2">
         <fence>
         </fence>
     </clusternode>
   </clusternodes>
   <fencedevices>
   </fencedevices>
   <rm>
   </rm>
</cluster>

7.2.2. Значение consensus элемента totem в кластере с двумя узлами

Если кластер содержит два узла, и в будущем добавление других узлов не планируется, можно опустить значение consensus в строке totem. В таком случае оно будет рассчитываться автоматически по принципу:
  • Если число узлов не превышает двух, то (token * 0.2) с допустимым диапазоном 200 - 2000 мс.
  • Если число узлов больше или равно трем, то (token + 2000 мс).
При увеличении числа узлов с 2 до 3 (и более) потребуется перезапустить кластер, так как формула расчета изменится.
Если в кластер с двумя узлами планируется добавить дополнительные узлы, необходимость перезапуска кластера можно предотвратить, переопределив consensus в строке totem:

<totem token="X" consensus="X + 2000" />

Вместо (X + 2000) необходимо указать полученное целое значение.
Главным достоинством этого подхода является сокращение времени восстановления в кластере с двумя узлами, так как значение consensus не является динамическим.
Следует помнить, что функции автоматического обнаружения узлов cman учитывают только наличие физических узлов в кластере с двумя элементами, а не наличие two_node=1 в cluster.conf.