Samba/CTDB: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
Строка 198: Строка 198:


=== настройка ctdb ===
=== настройка ctdb ===
доделаю завтра
......
......



Версия от 17:22, 21 января 2025

Описание

В этой статье рассмотрим построение масштабируемого кластера файлового сервиса Samba. Для обеспечения высокой доступности мы будет использовать сетевую файловую систему, которая будет доступна одновременно всем серверам в кластере. В качестве кластерной файловой системы будем использовать GlusterFS. Для механизма блокировок Samba использует TBD (trivial data base), нам понадобится его кластерная реализация CTDB. CTDB будет управлять переносом IP-адреса и запуском сервиса Samba (и winbind если речь идет о доменной конфигурации).

Конфигурация (без доменной поддержки)

Общий вид можно представить схемой

Ctdb-wo-domain.png


Кластер GlusterFS

Построение кластера GlusterFS не рассматривается в данной статье. Немного устаревшие, но в целом верные шаги, возможно посмотреть в отдельном документе GlusterFS

  • gluster1 - 192.168.160.11/24
  • gluster2 - 192.168.160.12/24
  • gluster3 - 192.168.160.13/24

Кластер Samba

  • samba1 - первая нода сервиса smb - 192.168.160.151/24
  • samba2 - первая нода сервиса smb - 192.168.160.152/24
  • 192.168.160.180/24 - виртуальный IP по которому будет отвечать один из узлов

Установка необходимого ПО

На все ноды сервиса samba нужно установить один набор ПО.

# apt-get update
# apt-get install samba-ctdb glusterfs9-client

Важно! Убедитесь, что у вас активна samba с поддержкой кластеризации. Результат должен быть таким

[root@samba1 ~]# smbd -b | grep -A 1 -i cluster
   CLUSTER_SUPPORT
   COMPILER_SUPPORTS_LL
--
Cluster support features:
   CLUSTER_SUPPORT
   CTDB_SOCKET: /var/run/ctdb/ctdbd.socket

если у вас результат такой

Cluster support features:
   NONE

то, вероятно, у вас стоит несколько пакетов с smbd, к примеру пакет samba-dc, который нам сейчас не нужен и должен быть удален.

Кластерную файловую систему примонтировать в /mnt/gluster/, проще всего это сделать через /etc/fstab

gluster1,gluster2,gluster3:/gfs-volume /mnt/gluster/ glusterfs defaults,_netdev 0 0

Настройка службы ctdb

  • в файле /etc/ctdb/nodes перечисляются IP адреса всех нод кластера
192.168.160.151
192.168.160.152
  • в файле /etc/ctdb/public_addresses указываем адрес (и интерфейс) по которому будет взаимодействие с клиентами.
192.168.160.180/24 ens19
  • в файле /etc/ctdb/ctdb.conf указать recovery lock на сетевой ФС
[cluster]
recovery lock=/mnt/gluster/ctdb.lock
  • включить поддержку скриптов для управления необходимыми службами. CTDB сам будет запускать и управлять ими.
# for i in 00.ctdb 10.interface 50.samba; do ctdb event script enable legacy $i; done

и проверить, что они включились (наличие * у имени)

[root@samba1 ~]#  ctdb event script list legacy
* 00.ctdb
  01.reclock
  05.system
  06.nfs
* 10.interface
  11.natgw
  11.routing
  13.per_ip_routing
  20.multipathd
  31.clamd
  40.vsftpd
  41.httpd
  48.netbios
  49.winbind
* 50.samba
  60.nfs
  70.iscsi
  91.lvs
 
  • запустить ctdb
systemctl enable --now ctdb

Настройка samba

  • Выключить возможность запуска smb через systemd
systemctl disable --now smb
  • создать конфигурационный файл samba

т.к. все ноды должны иметь одинаковый конфигурационный файл, то лучше всего хранить его настройки в registry. Для этого достаточно создать минимальный /etc/samba/smb.conf с содержимым

[global]
clustering = yes
include = registry

Затем создать текстовый файл /etc/samba/main_smb.conf с содержимым

netbios name = mycluster
idmap config * : backend = autorid
idmap config * : range = 1000000-1999999
workgroup = cluster
security = user
passdb backend = tdbsam
map to guest = Bad User

[share]
guest ok = yes
path=/mnt/gluster/share
browseable=yes 
read only = no

и импортировать его (только на этой\одной ноде)

net conf import main_smb.conf

после чего net conf list покажет цельный конфиг на всех нодах, и все утилиты от smbd до testparm будут работать с полным единым конфигом на всех нодах кластера.

Повторюсь, все настройки/файлы должны быть идентичные на всех нодах кластера (кроме команды net conf import)

После настройки сделать ребут нод и убедится

  1. Шара glusterfs примонтирована
  2. Служба ctdb запущена
  3. Служба smb запущена
  4. на всех нодах вывод net conf list одинаков

Проверка работы

  1. После запуска ctdb, на одой из нод должен автоматически добавится еще один ip адрес указанный в /etc/ctdb/public_addresses
  2. При выключении сети, выключении сервиса ctdb, выклычении всей ноды с адресом из /etc/ctdb/public_addresses, этот адрес назначается другой серверу в кластере
  3. Для клиентов, весь кластер доступен по имени в smb.conf (netbios name), вне зависимости от локального hostname.

Конфигурация (c доменной поддержкой)

Общий вид можно представить схемой

Ctdb-with-domain.png

Общие подходы такие же, но добавлена еще одна сущность - контроллер домена. Таким образом имеем

Кластер GlusterFS

  • gluster1 - 192.168.160.11/24
  • gluster2 - 192.168.160.12/24
  • gluster3 - 192.168.160.13/24

Кластер Samba

  • samba1 - первая нода сервиса smb - 192.168.160.151/24
  • samba2 - первая нода сервиса smb - 192.168.160.152/24
  • 192.168.160.180/24 - виртуальный IP по которому будет отвечать один из узлов

Контроллер домена

  • dc1.cluster.alt - 192.168.160.10/24

Установка необходимого ПО

На все ноды сервиса samba нужно установить один набор ПО.

# apt-get update
# apt-get install samba-ctdb glusterfs9-client task-auth-ad-winbind

Важно! Убедитесь, что у вас активна samba с поддержкой кластеризации. Результат должен быть таким

[root@samba1 ~]# smbd -b | grep -A 1 -i cluster
   CLUSTER_SUPPORT
   COMPILER_SUPPORTS_LL
--
Cluster support features:
   CLUSTER_SUPPORT
   CTDB_SOCKET: /var/run/ctdb/ctdbd.socket

если у вас результат такой

Cluster support features:
   NONE

то, вероятно, у вас стоит несколько пакетов с smbd, к примеру пакет samba-dc, который нам сейчас не нужен и должен быть удален.

Кластерную файловую систему примонтировать в /mnt/gluster/, проще всего это сделать через /etc/fstab

gluster1,gluster2,gluster3:/gfs-volume /mnt/gluster/ glusterfs defaults,_netdev 0 0


настройка ctdb

доделаю завтра ......

  • включить поддержку скриптов для управления необходимыми службами. CTDB сам будет запускать и управлять ими.
# for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script enable legacy $i; done


Дополнительные ссылки