centos_7_samba_cluster
Различия
Показаны различия между двумя версиями страницы.
| — | centos_7_samba_cluster [2022/03/25 14:00] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 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 теперь можно попробовать подключиться со стороны клиента, | ||
