Samba/CTDB: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 155: | Строка 155: | ||
[[Файл:Ctdb-with-domain.png]] | [[Файл:Ctdb-with-domain.png]] | ||
Общие подходы такие же, но добавлена еще одна сущность - контроллер домена. Таким образом имеем | Общие подходы такие же, но добавлена еще одна сущность - контроллер домена. | ||
Таким образом имеем | |||
'''Кластер GlusterFS''' | '''Кластер GlusterFS''' | ||
Строка 173: | Строка 174: | ||
=== Установка необходимого ПО === | === Установка необходимого ПО === | ||
Все шаги нужно сделать на всех нодах (если не указано иного). | |||
На все ноды сервиса samba нужно установить один набор ПО. | На все ноды сервиса samba нужно установить один набор ПО. | ||
Строка 200: | Строка 202: | ||
gluster1,gluster2,gluster3:/gfs-volume /mnt/gluster/ glusterfs defaults,_netdev 0 0 | gluster1,gluster2,gluster3:/gfs-volume /mnt/gluster/ glusterfs defaults,_netdev 0 0 | ||
=== Настройка DNS === | |||
На контроллере домена нужно для IP адреса(ов) из {{path|/etc/ctdb/public_addresses}} создать хотя бы прямые и опционально обратные записи. | |||
[dc.cluster.alt] # samba-tool dns add 127.0.0.1 cluster.alt mycluster A 192.168.160.180 -UAdministrator | |||
...... | [dc.cluster.alt] # samba-tool dns add 127.0.0.1 160.168.192.in-addr.arpa 180 PTR mycluster.cluster.alt -UAdministrator | ||
=== Настройка ctdb === | |||
Для начала выключим все, что могло быть включено ранее | |||
# for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script disable legacy $i; done | |||
# systemctl disable --now smb nmb winbind | |||
* включить включить все кроме winbind | |||
# for i in 00.ctdb 10.interface 50.samba; do ctdb event script enable legacy $i; done | |||
# systemctl start ctdb | |||
=== Настройка samba ==== | |||
Убедится, что в /etc/samba/smb.conf указан самый минимум | |||
[global] | |||
clustering = yes | |||
include = registry | |||
Затем на одной ноде создать текстовый файл {{path|/etc/samba/domain_smb.conf}} с содержимым | |||
[global] | |||
security = ADS | |||
netbios name = MYCLUSTER | |||
workgroup = CLUSTER | |||
realm = CLUSTER.ALT | |||
template shell = /bin/bash | |||
kerberos method = dedicated keytab | |||
dedicated keytab file = /etc/krb5.keytab | |||
wins support = no | |||
template homedir = /home/CLUSTER.ALT/%U | |||
winbind enum users = no | |||
winbind use default domain = Yes | |||
winbind refresh tickets = yes | |||
winbind offline logon = yes | |||
machine password timeout = 0 | |||
idmap config *:range = 10000-19999 | |||
idmap config CLUSTER:range = 1000000-1999999 | |||
idmap config CLUSTER:backend = rid | |||
[share] | |||
path = /mnt/gluster/share | |||
browseable = yes | |||
read only = no | |||
valid users = @cluster-users | |||
и импортировать его (на одной(этой же) ноде) | |||
# net conf import /etc/samba/domain_smb.conf | |||
После чего, на других нодах <tt>net conf list</tt> будет показывать тот же самый конфиг. | |||
=== Настройка nsswitch.conf === | |||
После того, как мы подготовили конфигурационный файл, нужно настроить /etc/nssswich.conf | |||
В {{path|/etc/nsswitch.conf}} изменить три опции вписав туда winbind | |||
passwd: files systemd winbind | |||
shadow: tcb files winbind | |||
group: files [SUCCESS=merge] winbind role | |||
=== Ввод в домен === | |||
'''Важно''': Использовать system-auth не стоит - он не расчитан на ввод кластерных конфигураций. | |||
'''Важно''': Убедитесь, что {{path|/etc/resolv.conf}} указывает на КД | |||
'''Важно''': В данной статье я не настраиваю PAM, он мне не нужен. Если вам нужен, сделайте это самостоятельно. | |||
Вводим в домен | |||
# net ads join -U Administrator | |||
Результат должен быть таким | |||
Using short domain name -- CLUSTER | |||
Joined 'MYCLUSTER' to dns domain 'cluster.alt' | |||
Not doing automatic DNS update in a clustered setup. | |||
Создаем на одной ноде {{path|/etc/krb5.keytab}} | |||
# net ads keytab create | |||
и копируем его на другие ноды в {{path|/etc/krb5.keytab}}, не забывая указать верные права и владельца | |||
# chmod 0640 /etc/krb5.keytab | |||
# chown root:_keytab /etc/krb5.keytab | |||
=== Завершение конфигурации === | |||
После всех проделанных настроек выполняем | |||
# systemctl stop ctdb | |||
# for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script enable legacy $i; done | # for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script enable legacy $i; done | ||
# systemctl enable --now ctdb | |||
== Дополнительные ссылки == | == Дополнительные ссылки == |
Версия от 13:58, 22 января 2025
Описание
В этой статье рассмотрим построение масштабируемого кластера файлового сервиса Samba. Для обеспечения высокой доступности мы будет использовать сетевую файловую систему, которая будет доступна одновременно всем серверам в кластере. В качестве кластерной файловой системы будем использовать GlusterFS. Для механизма блокировок Samba использует TBD (trivial data base), нам понадобится его кластерная реализация CTDB. CTDB будет управлять переносом IP-адреса и запуском сервиса Samba (и winbind если речь идет о доменной конфигурации).
Конфигурация (без доменной поддержки)
Общий вид можно представить схемой
Кластер 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)
После настройки сделать ребут нод и убедится
- Шара glusterfs примонтирована
- Служба ctdb запущена
- Служба smb запущена
- на всех нодах вывод net conf list одинаков
Проверка работы
- После запуска ctdb, на одой из нод должен автоматически добавится еще один ip адрес указанный в /etc/ctdb/public_addresses
- При выключении сети, выключении сервиса ctdb, выклычении всей ноды с адресом из /etc/ctdb/public_addresses, этот адрес назначается другой серверу в кластере
- Для клиентов, весь кластер доступен по имени в smb.conf (netbios name), вне зависимости от локального hostname.
Конфигурация (c доменной поддержкой)
Общий вид можно представить схемой
Общие подходы такие же, но добавлена еще одна сущность - контроллер домена. Таким образом имеем
Кластер 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
Настройка DNS
На контроллере домена нужно для IP адреса(ов) из /etc/ctdb/public_addresses создать хотя бы прямые и опционально обратные записи.
[dc.cluster.alt] # samba-tool dns add 127.0.0.1 cluster.alt mycluster A 192.168.160.180 -UAdministrator [dc.cluster.alt] # samba-tool dns add 127.0.0.1 160.168.192.in-addr.arpa 180 PTR mycluster.cluster.alt -UAdministrator
Настройка ctdb
Для начала выключим все, что могло быть включено ранее
# for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script disable legacy $i; done # systemctl disable --now smb nmb winbind
- включить включить все кроме winbind
# for i in 00.ctdb 10.interface 50.samba; do ctdb event script enable legacy $i; done # systemctl start ctdb
Настройка samba =
Убедится, что в /etc/samba/smb.conf указан самый минимум
[global] clustering = yes include = registry
Затем на одной ноде создать текстовый файл /etc/samba/domain_smb.conf с содержимым
[global] security = ADS netbios name = MYCLUSTER workgroup = CLUSTER realm = CLUSTER.ALT template shell = /bin/bash kerberos method = dedicated keytab dedicated keytab file = /etc/krb5.keytab wins support = no template homedir = /home/CLUSTER.ALT/%U winbind enum users = no winbind use default domain = Yes winbind refresh tickets = yes winbind offline logon = yes machine password timeout = 0 idmap config *:range = 10000-19999 idmap config CLUSTER:range = 1000000-1999999 idmap config CLUSTER:backend = rid [share] path = /mnt/gluster/share browseable = yes read only = no valid users = @cluster-users
и импортировать его (на одной(этой же) ноде)
# net conf import /etc/samba/domain_smb.conf
После чего, на других нодах net conf list будет показывать тот же самый конфиг.
Настройка nsswitch.conf
После того, как мы подготовили конфигурационный файл, нужно настроить /etc/nssswich.conf
В /etc/nsswitch.conf изменить три опции вписав туда winbind
passwd: files systemd winbind shadow: tcb files winbind group: files [SUCCESS=merge] winbind role
Ввод в домен
Важно: Использовать system-auth не стоит - он не расчитан на ввод кластерных конфигураций.
Важно: Убедитесь, что /etc/resolv.conf указывает на КД
Важно: В данной статье я не настраиваю PAM, он мне не нужен. Если вам нужен, сделайте это самостоятельно.
Вводим в домен
# net ads join -U Administrator
Результат должен быть таким
Using short domain name -- CLUSTER Joined 'MYCLUSTER' to dns domain 'cluster.alt' Not doing automatic DNS update in a clustered setup.
Создаем на одной ноде /etc/krb5.keytab
# net ads keytab create
и копируем его на другие ноды в /etc/krb5.keytab, не забывая указать верные права и владельца
# chmod 0640 /etc/krb5.keytab # chown root:_keytab /etc/krb5.keytab
Завершение конфигурации
После всех проделанных настроек выполняем
# systemctl stop ctdb # for i in 00.ctdb 10.interface 49.winbind 50.samba; do ctdb event script enable legacy $i; done # systemctl enable --now ctdb