Samba/Cluster: различия между версиями
(Новая страница: «{{stub}} == Описание == В этой статье рассмотрим обеспечение высокой доступности сервиса Samba. Дл...») |
|||
Строка 8: | Строка 8: | ||
* 192.168.135.251 - виртуальный IP по которому будет отвечать один из узлов | * 192.168.135.251 - виртуальный IP по которому будет отвечать один из узлов | ||
На каждом узле доступно общее блочное устройство {{path|/dev/sdb}}, настроен hostname и в файле {{path|/etc/hosts}} прописано соответствие адреса имени. Так же настроен взаимный беспарольный root-доступ для первоначальной инициализации кластера. | На каждом узле доступно общее блочное устройство {{path|/dev/sdb}}, настроен hostname и в файле {{path|/etc/hosts}} прописано соответствие адреса имени. Так же настроен взаимный беспарольный root-доступ для первоначальной инициализации кластера. | ||
== | == Настройка Pacemaker == | ||
Установим необходимые пакеты на всех узлах: | Установим необходимые пакеты на всех узлах: | ||
<pre># apt-get install pacemaker</pre> | <pre># apt-get install pacemaker</pre> | ||
Строка 15: | Строка 15: | ||
На одном из узлов инициализируем кластер: | На одном из узлов инициализируем кластер: | ||
<pre># crm cluster init nodes=samba01,samba02</pre> | <pre># crm cluster init nodes=samba01,samba02</pre> | ||
Зададим имя кластера, для этого в добавим в файле {{path|/etc/corosync/corosync.conf}} следующий параметр: | |||
<pre>totem { | |||
... | |||
cluster_name: samba_cluster | |||
... | |||
}</pre> | |||
Применим конфигурацию corosync текущего узла на всех узлах: | |||
<pre># crm corosync push | |||
OK: samba02</pre> | |||
Добавим сервисы в автозагрузку: | |||
<pre># systemctl enable corosync | |||
# systemctl enable pacemaker</pre> | |||
Перезагрузимся и проверим состояние кластера: | |||
<pre># crm status | |||
Stack: corosync | |||
Current DC: samba01 (version 1.1.16-alt1-94ff4df) - partition with quorum | |||
Last updated: Wed Apr 12 10:52:47 2017 | |||
Last change: Wed Apr 12 10:46:47 2017 by hacluster via crmd on samba01 | |||
2 nodes configured | |||
0 resources configured | |||
Online: [ samba01 samba02 ] | |||
No resources</pre> | |||
== Настройка STONITH == | |||
Для корректной работы узлов с общим хранилищем, необходимо настроить механизм STONITH. Этот механизм позволяет кластеру физически отключить неотвечающий на запросы узел, чтобы не повредить данные на общем хранилище.<br> | |||
Установим необходимые пакеты: | |||
<pre># apt-get install cluster-glue-stonith</pre> | |||
Проверим наличие необходимых ресурсов в pacemaker: | |||
<pre># crm ra classes | grep stonith | |||
stonith</pre> | |||
Посмотреть доступные STONITH устройств можно командой: | |||
<pre># stonith -L</pre> | |||
Для примера выберем устройство meatware, которое реализует механизм с помощью сообщений на консоль, после которого оператор должен выключить узел вручную. | |||
Описание устройств можно посмотреть командой: | |||
<pre># stonith -t meatware -h</pre> | |||
Обязательные параметры устройства можно посмотреть командой: | |||
<pre># stonith -t meatware -n | |||
hostlist | |||
</pre> | |||
В нашем случае обязательный параметр только hostlist задающий имена узлов которые от может убить.<br> | |||
Создадим для каждого узла отдельный ресурс: | |||
<pre># configure primitive smb-meat-01 stonith:meatware params hostlist=samba01 | |||
# configure primitive smb-meat-02 stonith:meatware params hostlist=samba02</pre> | |||
Запретим ресурсу стартовать на узле который он должен убивать: | |||
<pre># crm configure location l-st-meat-01 smb-meat-01 -inf: samba01 | |||
# crm configure location l-st-meat-02 smb-meat-02 -inf: samba02</pre> | |||
Включим механизм STONITH: | |||
<pre># crm configure property stonith-enabled=true</pre> | |||
Проверить работу механизма STONITH можно командой: | |||
<pre># stonith_admin --reboot samba01</pre> | |||
После настройки STONITH наш кластер будет выглядеть так: | |||
<pre># crm status | |||
... | |||
Full list of resources: | |||
smb-meat-01 (stonith:meatware): Started samba02 | |||
smb-meat-02 (stonith:meatware): Started samba01</pre> | |||
== Настройка Cluster LVM == | |||
Установим необходимые пакеты: | |||
<pre># apt-get install clvm</pre> | |||
Сервисами DLM и CLVM должен управлять Pacemaker, они не должны запускаться автоматически: | |||
<pre># systemctl disable dlm | |||
# systemctl disable lvm2-clvmd</pre> | |||
На каждом узле включаем поддержку кластера LVM: | |||
<pre># lvmconf --enable-cluster</pre> | |||
Проверяем включилась ли она: | |||
<pre># cat /etc/lvm/lvm.conf | grep "locking_type =" | |||
locking_type = 3</pre> | |||
Создаем ресурс для DLM: | |||
<pre># crm configure primitive dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence</pre> | |||
Клонируем ресурс DLM: | |||
<pre># crm configure clone clonedlm dlm meta interleave=true ordered=true</pre> | |||
Создаем ресурс для CLVM: | |||
<pre># crm configure primitive clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence</pre> | |||
Клонируем ресурс CLVM: | |||
<pre># crm configure clone cloneclvmd clvmd meta interleave=true ordered=true</pre> | |||
Проверим запустились ли ресурсы: | |||
<pre># crm resource show</pre> |
Версия от 16:32, 12 апреля 2017
Описание
В этой статье рассмотрим обеспечение высокой доступности сервиса Samba. Для обеспечения высокой доступности мы будет использовать общее хранилище, которое будет доступно одновременно всем серверам в кластере. Для синхронизации доступа серверов к общему хранилищу используется DLM (распределенный менеджер блокировок). В качестве кластерной файловой системы будем использовать GFS2, но она не работает напрямую с блочными устройствами, поэтому нам придется использовать кластерную реализацию LVM. Для механизма блокировок Samba использует TBD (trivial data base), нам понадобится его кластерная реализация CTDB. CTDB будет управлять переносом IP-адреса и запуском сервиса Samba. Pacemaker будет управлять следующими ресурсами: DLM, CLVM, GFS2, CTDB.
Тестовая конфигурация
Рассмотрим следующую конфигурацию:
- samba01 - первый узел кластера (IP 192.168.135.221/24 ens18)
- samba02 - второй узел кластера (IP 192.168.135.223/24 ens18)
- 192.168.135.251 - виртуальный IP по которому будет отвечать один из узлов
На каждом узле доступно общее блочное устройство /dev/sdb, настроен hostname и в файле /etc/hosts прописано соответствие адреса имени. Так же настроен взаимный беспарольный root-доступ для первоначальной инициализации кластера.
Настройка Pacemaker
Установим необходимые пакеты на всех узлах:
# apt-get install pacemaker
Для управления кластером будем использовать утилиту crmsh:
# apt-get install crmsh python-module-yaml
На одном из узлов инициализируем кластер:
# crm cluster init nodes=samba01,samba02
Зададим имя кластера, для этого в добавим в файле /etc/corosync/corosync.conf следующий параметр:
totem { ... cluster_name: samba_cluster ... }
Применим конфигурацию corosync текущего узла на всех узлах:
# crm corosync push OK: samba02
Добавим сервисы в автозагрузку:
# systemctl enable corosync # systemctl enable pacemaker
Перезагрузимся и проверим состояние кластера:
# crm status Stack: corosync Current DC: samba01 (version 1.1.16-alt1-94ff4df) - partition with quorum Last updated: Wed Apr 12 10:52:47 2017 Last change: Wed Apr 12 10:46:47 2017 by hacluster via crmd on samba01 2 nodes configured 0 resources configured Online: [ samba01 samba02 ] No resources
Настройка STONITH
Для корректной работы узлов с общим хранилищем, необходимо настроить механизм STONITH. Этот механизм позволяет кластеру физически отключить неотвечающий на запросы узел, чтобы не повредить данные на общем хранилище.
Установим необходимые пакеты:
# apt-get install cluster-glue-stonith
Проверим наличие необходимых ресурсов в pacemaker:
# crm ra classes | grep stonith stonith
Посмотреть доступные STONITH устройств можно командой:
# stonith -L
Для примера выберем устройство meatware, которое реализует механизм с помощью сообщений на консоль, после которого оператор должен выключить узел вручную. Описание устройств можно посмотреть командой:
# stonith -t meatware -h
Обязательные параметры устройства можно посмотреть командой:
# stonith -t meatware -n hostlist
В нашем случае обязательный параметр только hostlist задающий имена узлов которые от может убить.
Создадим для каждого узла отдельный ресурс:
# configure primitive smb-meat-01 stonith:meatware params hostlist=samba01 # configure primitive smb-meat-02 stonith:meatware params hostlist=samba02
Запретим ресурсу стартовать на узле который он должен убивать:
# crm configure location l-st-meat-01 smb-meat-01 -inf: samba01 # crm configure location l-st-meat-02 smb-meat-02 -inf: samba02
Включим механизм STONITH:
# crm configure property stonith-enabled=true
Проверить работу механизма STONITH можно командой:
# stonith_admin --reboot samba01
После настройки STONITH наш кластер будет выглядеть так:
# crm status ... Full list of resources: smb-meat-01 (stonith:meatware): Started samba02 smb-meat-02 (stonith:meatware): Started samba01
Настройка Cluster LVM
Установим необходимые пакеты:
# apt-get install clvm
Сервисами DLM и CLVM должен управлять Pacemaker, они не должны запускаться автоматически:
# systemctl disable dlm # systemctl disable lvm2-clvmd
На каждом узле включаем поддержку кластера LVM:
# lvmconf --enable-cluster
Проверяем включилась ли она:
# cat /etc/lvm/lvm.conf | grep "locking_type =" locking_type = 3
Создаем ресурс для DLM:
# crm configure primitive dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence
Клонируем ресурс DLM:
# crm configure clone clonedlm dlm meta interleave=true ordered=true
Создаем ресурс для CLVM:
# crm configure primitive clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence
Клонируем ресурс CLVM:
# crm configure clone cloneclvmd clvmd meta interleave=true ordered=true
Проверим запустились ли ресурсы:
# crm resource show