Показаны различия между двумя версиями страницы.
centos_7_samba_cluster [2014/09/26 12:43] metallic [Настройка CTDB] |
centos_7_samba_cluster [2022/03/25 17:00] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Samba Cluster ====== | ||
- | ===== Введение ===== | ||
- | Предоставление файловых сервисов пользователям является типичной задачей и трудно найти офисную сеть в которой такие сервисы не работают. Наиболее распространенные протоколы - **NFS**(сетевая файловая система) и **CIFS**(windows shares и их аналог в *nix Samba), второй встречается намного чаще. В некоторых же бизнес-процессах файловый сервис занимает ключевую роль, например как в моей сети. У меня имеется хранилище объемом больше сотни терабайт и клиенты, | ||
- | |||
- | Итак, исходные данные: | ||
- | |||
- | Для решения этой задачи будет использоваться свободный аналог Red Hat 7 - Centos 7, хотя я и являюсь сторонником GNU/Debian, но в данной задачей, | ||
- | |||
- | Основные компоненты схематично указаны на рисунке ниже. | ||
- | |||
- | {{ : | ||
- | |||
- | Как видно из схемы, два(или более) сервера имеют доступ к общему хранилищу данных, | ||
- | |||
- | Итак, кластерная ФС, которая доступна на всех узлах у нас уже есть, осталось запустить файловую службу **Samba**, в этой статье используется 4-ая ветка. Но просто так это сделать нельзя, | ||
- | |||
- | < | ||
- | Во всех документациях говорится, | ||
- | В Pacemaker есть даже **RA**(resource agent) // | ||
- | </ | ||
- | |||
- | ===== Подготовка системы ===== | ||
- | Имеем два хоста с установленной ОС Linux Centos 7. Выполняем обновление системы. | ||
- | # yum update | ||
- | |||
- | Отключаем SELinux, редактируем / | ||
- | SELINUX=disabled | ||
- | | ||
- | Выключаем фаервол | ||
- | # systemctl stop firewalld | ||
- | # systemctl disable firewalld | ||
- | |||
- | либо добавляем правила разрешающие узлам кластера взаимодействовать | ||
- | # firewall-cmd --permanent --add-service=high-availability | ||
- | # firewall-cmd --add-service=high-availability | ||
- | |||
- | Настраиваем сеть, на каждом хосте по два сетевых интерфейса eth0 и eth1, первый используется для внутрикластерного взаимодействия и имеет сеть 192.168.232.0/ | ||
- | DEVICE=eth0 | ||
- | ONBOOT=yes | ||
- | BOOTPROTO=static | ||
- | TYPE=Ethernet | ||
- | IPADDR=192.168.232.10 | ||
- | PREFIX=24 | ||
- | |||
- | Настраиваем имена хостов, | ||
- | samba_node1 | ||
- | |||
- | Теперь надо настроить надежное разрешение имен на обоих узлах, а еще лучше, чтобы не зависеть еще от одного сервиса(DNS) и избавиться от дополнительной точки отказа, | ||
- | 192.168.232.10 samba_node1 | ||
- | 192.168.232.20 samba_node2 | ||
- | |||
- | Перезагружаем оба узла | ||
- | # reboot | ||
- | |||
- | Проверяем на обоих узлах | ||
- | [samba_node1 ~]# ping -c 1 samba_node2 | ||
- | PING samba_node2 (192.168.232.20) 56(84) bytes of data. | ||
- | 64 bytes from samba_node2 (192.168.232.20): | ||
- | | ||
- | [samba_node2 ~]# ping -c 1 samba_node1 | ||
- | PING samba_node1 (192.168.232.10) 56(84) bytes of data. | ||
- | 64 bytes from samba_node1 (192.168.232.10): | ||
- | |||
- | Устанавливаем необходимое ПО | ||
- | # yum groupinstall "High Availability" | ||
- | # yum install samba samba-client gfs2-utils ctdb | ||
- | |||
- | ===== Первоначальная настройка кластера ===== | ||
- | На всех узлах устанавливаем пароль на пользователя hacluster | ||
- | # passwd hacluster | ||
- | |||
- | Включаем сервис pcsd на всех узлах | ||
- | # systemctl start pcsd.service | ||
- | # systemctl enable pcsd.service | ||
- | |||
- | Авторизуем узлы в кластере(команда выполняется на любом узле), авторизуемся с пользователем hacluster и паролем, | ||
- | # pcs cluster auth samba_node1 samba_node2 | ||
- | Username: hacluster | ||
- | Password: | ||
- | samba_node1: | ||
- | samba_node2: | ||
- | |||
- | Создаем кластер(команда выполняется на любом узле) | ||
- | # pcs cluster setup --start --name samba_cluster samba_node1 samba_node2 | ||
- | Shutting down pacemaker/ | ||
- | Redirecting to / | ||
- | Redirecting to / | ||
- | Killing any remaining services... | ||
- | Removing all cluster configuration files... | ||
- | samba_node1: | ||
- | samba_node1: | ||
- | samba_node2: | ||
- | samba_node2: | ||
- | | ||
- | Здесь samba_node1 и samba_node2 - имена узлов кластера, | ||
- | totem { | ||
- | version: 2 | ||
- | secauth: off | ||
- | cluster_name: | ||
- | transport: udpu | ||
- | } | ||
- | | ||
- | nodelist { | ||
- | node { | ||
- | ring0_addr: samba_node1 | ||
- | nodeid: 1 | ||
- | } | ||
- | node { | ||
- | ring0_addr: samba_node2 | ||
- | nodeid: 2 | ||
- | } | ||
- | } | ||
- | | ||
- | quorum { | ||
- | provider: corosync_votequorum | ||
- | two_node: 1 | ||
- | } | ||
- | | ||
- | logging { | ||
- | to_syslog: yes | ||
- | } | ||
- | |||
- | Включаем автозагрузку кластера(команда выполняется на любом узле) | ||
- | # pcs cluster enable --all | ||
- | samba_node1: | ||
- | samba_node2: | ||
- | |||
- | Выключаем механизм stonith(команда выполняется на любом узле) | ||
- | # pcs property set stonith-enabled=false | ||
- | |||
- | <note important> | ||
- | Механизм stonith отвечает за физическое отключение узла кластера, | ||
- | </ | ||
- | |||
- | Вот и все, первичная настройка кластера завершена, | ||
- | # pcs status | ||
- | Cluster name: samba_cluster | ||
- | Last updated: Tue Sep 16 19:00:28 2014 | ||
- | Last change: Tue Sep 16 19:00:11 2014 via cibadmin on samba_node2 | ||
- | Stack: corosync | ||
- | Current DC: samba_node1 (1) - partition with quorum | ||
- | Version: 1.1.10-32.el7_0-368c726 | ||
- | 2 Nodes configured | ||
- | 0 Resources configured | ||
- | | ||
- | | ||
- | Online: [ samba_node1 samba_node2 ] | ||
- | | ||
- | Full list of resources: | ||
- | | ||
- | | ||
- | PCSD Status: | ||
- | samba_node1: | ||
- | samba_node2: | ||
- | | ||
- | Daemon Status: | ||
- | corosync: active/ | ||
- | pacemaker: active/ | ||
- | pcsd: active/ | ||
- | |||
- | Как видно, оба узла онлайн, | ||
- | |||
- | ===== Подключение LVM к кластеру ===== | ||
- | Включаем cluster locking в конфиге LVM и включаем автозагрузку демона lvmetad, все это можно сделать одной командой: | ||
- | |||
- | # lvmconf --enable-cluster | ||
- | | ||
- | Проверяем, | ||
- | |||
- | # cat / | ||
- | locking_type = 3 | ||
- | |||
- | Теперь создаем два клонированных ресурса. Первый распределенный менеджер блокировок и второй - кластерный LVM(команды выполняются на любом узле) | ||
- | |||
- | # pcs resource create dlm ocf: | ||
- | # pcs resource create clvmd ocf: | ||
- | |||
- | Настраиваем порядок запуска, | ||
- | |||
- | # pcs constraint order start dlm-clone then clvmd-clone | ||
- | # pcs constraint colocation add clvmd-clone with dlm-clone | ||
- | |||
- | Проверяем, | ||
- | |||
- | # pcs resource show | ||
- | Clone Set: dlm-clone [dlm] | ||
- | | ||
- | Clone Set: clvmd-clone [clvmd] | ||
- | | ||
- | |||
- | Ну а теперь создаем LVM том как обычно, | ||
- | |||
- | # pvcreate /dev/sdb | ||
- | # vgcreate samba_cluster /dev/sdb | ||
- | # lvcreate -n samba_cluster -l100%FREE samba_cluster | ||
- | | ||
- | Смотрим на обоих нодах(по-умолчанию тома должны быть видимы на всех нодах) | ||
- | |||
- | # ls / | ||
- | |||
- | ===== Создание кластерной ФС и подключение ее к кластеру ===== | ||
- | |||
- | Создаем кластерную ФС GFS2 поверх только что созданного LVM тома. Кол-во журналов(-j 2) соответствует кол-ву нод кластера, | ||
- | |||
- | # mkfs.gfs2 -p lock_dlm -t samba_cluster: | ||
- | | ||
- | / | ||
- | This will destroy any data on /dev/dm-2 | ||
- | Are you sure you want to proceed? [y/n]y | ||
- | | ||
- | Device: | ||
- | Block size: 4096 | ||
- | Device size: 10,00 GB (2620416 blocks) | ||
- | Filesystem size: 10,00 GB (2620413 blocks) | ||
- | Journals: | ||
- | Resource groups: | ||
- | Locking protocol: | ||
- | Lock table: | ||
- | UUID: a750c8de-b4bc-2b0b-90ef-0a609319a657 | ||
- | |||
- | После создания ФС можно попробовать ее примонтировать на обоих узлах | ||
- | |||
- | # mount / | ||
- | |||
- | Не забываем отмонтировать и проверить, | ||
- | |||
- | Настаиваем кластер(все команды выполняются на одном узле). Задаем поведение, | ||
- | |||
- | # pcs property set no-quorum-policy=freeze | ||
- | |||
- | Создаем ресурс ФС, в случае необходимости к опциям можно добавить acl | ||
- | |||
- | # pcs resource create clusterfs Filesystem device="/ | ||
- | | ||
- | И наконец настраиваем порядок запуска и зависимости, | ||
- | |||
- | # pcs constraint order start clvmd-clone then clusterfs-clone | ||
- | # pcs constraint colocation add clusterfs-clone with clvmd-clone | ||
- | |||
- | Проверяем, | ||
- | |||
- | # pcs resource show | ||
- | Clone Set: dlm-clone [dlm] | ||
- | | ||
- | Clone Set: clvmd-clone [clvmd] | ||
- | | ||
- | Clone Set: clusterfs-clone [clusterfs] | ||
- | | ||
- | | ||
- | # df -h | ||
- | / | ||
- | |||
- | Как видим, ФС примонтирована и все ресурсы у кластера в рабочем состоянии. На этом настройка pacemaker закончена, | ||
- | |||
- | ===== Настройка CTDB ===== | ||
- | |||
- | Создаем на кластерной ФС директорию для Samba и файлы nodes, public_addresses для CTDB | ||
- | |||
- | # mkdir /mnt/ctdb | ||
- | # touch / | ||
- | # touch / | ||
- | |||
- | Редактируем конфиг / | ||
- | |||
- | CTDB_RECOVERY_LOCK="/ | ||
- | CTDB_NODES=/ | ||
- | CTDB_PUBLIC_ADDRESSES=/ | ||
- | CTDB_MANAGES_SAMBA=yes | ||
- | CTDB_MANAGES_WINBIND=no | ||
- | CTDB_MANAGES_NFS=no | ||
- | CTDB_DEBUGLEVEL=NOTICE | ||
- | | ||
- | Если Samba интегрирована с Active Directory, то включаем еще опцию CTDB_MANAGES_WINBIND. | ||
- | |||
- | В файле nodes перечислены IP-адреса всех узлов кластера, | ||
- | |||
- | # cat / | ||
- | 192.168.232.10 | ||
- | 192.168.232.20 | ||
- | |||
- | Файл public_addresses содержит IP-адреса узлов через которые кластер обслуживает клиентов. Как упоминалось, | ||
- | |||
- | # cat / | ||
- | 10.0.0.100/ | ||
- | 10.0.0.200/ | ||
- | |||
- | И наконец редактируем конфиг Samba, он должен быть одинаков на всех узлах. | ||
- | |||
- | [global] | ||
- | workgroup = COMPANY | ||
- | server string = Samba Test Cluster | ||
- | netbios name = MEGACLUSTER | ||
- | max protocol = SMB2 | ||
- | log file = / | ||
- | max log size = 1000 | ||
- | security = user | ||
- | domain master = no | ||
- | domain logons = no | ||
- | local master = no | ||
- | os level = 33 | ||
- | preferred master = no | ||
- | load printers = no | ||
- | | ||
- | # ----------------------- Cluster Options ------------------------ | ||
- | clustering = yes | ||
- | # Две опции ниже важные, | ||
- | # получить странные глюки | ||
- | private dir = /mnt/ctdb | ||
- | lock directory = /mnt/ctdb | ||
- | idmap backend = tdb2 | ||
- | passdb backend = tdbsam | ||
- | | ||
- | # | ||
- | | ||
- | [test] | ||
- | comment = Cluster Share | ||
- | path = /mnt/share | ||
- | browseable = yes | ||
- | writable = yes | ||
- | |||
- | Наконец включаем CTDB | ||
- | |||
- | # systemctl enable ctdb.service | ||
- | # systemctl start ctdb.service | ||
- | |||
- | После чего он должен распределить адреса по узлам и запустить Samba. Проверяем: | ||
- | |||
- | # ctdb status | ||
- | Number of nodes:2 | ||
- | pnn:0 192.168.232.10 | ||
- | pnn:1 192.168.232.20 | ||
- | Generation: | ||
- | Size:2 | ||
- | hash:0 lmaster:0 | ||
- | hash:1 lmaster:1 | ||
- | Recovery mode:NORMAL (0) | ||
- | Recovery master:0 | ||
- | | ||
- | # ctdb ip | ||
- | Public IPs on node 1 | ||
- | 10.0.0.100 0 | ||
- | 10.0.0.200 1 | ||
- | | ||
- | # ip address show | ||
- | | ||
- | 3: eth1: < | ||
- | link/ether 00: | ||
- | inet 10.0.0.100/ | ||
- | | ||
- | | ||
- | # smbcontrol smbd ping | ||
- | PONG from pid 1:5658 | ||
- | |||
- | Если Samba интегрирована с AD теперь можно попробовать подключиться со стороны клиента, | ||