Инструменты пользователя

Инструменты сайта


centos_7_samba_cluster

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
centos_7_samba_cluster [2014/09/16 17:29]
metallic [Подготовка системы]
centos_7_samba_cluster [2022/03/25 17:00] (текущий)
Строка 26: Строка 26:
 Отключаем SELinux, редактируем /etc/sysconfig/selinux: Отключаем SELinux, редактируем /etc/sysconfig/selinux:
   SELINUX=disabled   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/24, а второй для обслуживания клиентов, сеть 10.0.0.0/24. Если в кластере всего два узла, то рекомендуется подключить интерфейсы eth0 напрямую друг к другу кросс-кабелем, для того, чтобы избежать лишней точки отказа - свитча. Итак, конфигурируем сеть, у первого узла будет адрес 192.168.232.10, у второго 192.168.232.20. Пример конфига /etc/sysconfig/network-scripts/ifcfg-eth0: Настраиваем сеть, на каждом хосте по два сетевых интерфейса eth0 и eth1, первый используется для внутрикластерного взаимодействия и имеет сеть 192.168.232.0/24, а второй для обслуживания клиентов, сеть 10.0.0.0/24. Если в кластере всего два узла, то рекомендуется подключить интерфейсы eth0 напрямую друг к другу кросс-кабелем, для того, чтобы избежать лишней точки отказа - свитча. Итак, конфигурируем сеть, у первого узла будет адрес 192.168.232.10, у второго 192.168.232.20. Пример конфига /etc/sysconfig/network-scripts/ifcfg-eth0:
Строка 45: Строка 53:
   # reboot   # 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): icmp_seq=1 ttl=64 time=0.297 ms
 +  
 +  [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): icmp_seq=1 ttl=64 time=0.323 ms
 +
 +Устанавливаем необходимое ПО
 +  # 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: Authorized
 +  samba_node2: Authorized
 +
 +Создаем кластер(команда выполняется на любом узле)
 +  # pcs cluster setup --start --name samba_cluster samba_node1 samba_node2
 +  Shutting down pacemaker/corosync services...
 +  Redirecting to /bin/systemctl stop  pacemaker.service
 +  Redirecting to /bin/systemctl stop  corosync.service
 +  Killing any remaining services...
 +  Removing all cluster configuration files...
 +  samba_node1: Succeeded
 +  samba_node1: Starting Cluster...
 +  samba_node2: Succeeded
 +  samba_node2: Starting Cluster...
 +  
 +Здесь samba_node1 и samba_node2 - имена узлов кластера, а samba_cluster - имя создаваемого кластера. В результате выполнения этой команды будет сгенерирован файл /etc/corosync/corosync.conf примерно такого содержания:
 +  totem {
 +  version: 2
 +  secauth: off
 +  cluster_name: samba_cluster
 +  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: Cluster Enabled
 +  samba_node2: Cluster Enabled
 +
 +Выключаем механизм stonith(команда выполняется на любом узле)
 +  # pcs property set stonith-enabled=false
 +
 +<note important>
 +Механизм stonith отвечает за физическое отключение узла кластера, это может понадобится, когда связь с этим узлом потеряна и его состояние не известно, поэтому во избежании порчи данных узел с неизвестным состоянием изолируется(fence), т.е. физически выключается. Обычно для этих задач используют специальные адаптеры питания с функцией управления по сети. В боевых условиях отключать механизм stonith крайне не рекомендуется, но т.к. мы настраивает тестовую конфигурацию, мы так поступим.
 +</note>
 +
 +Вот и все, первичная настройка кластера завершена, убедиться в этом можно выполнив следующую команду:
 +  # 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: Online
 +    samba_node2: Online
 +  
 +  Daemon Status:
 +    corosync: active/enabled
 +    pacemaker: active/enabled
 +    pcsd: active/enabled
 +
 +Как видно, оба узла онлайн, в качестве DC(Designated Co-ordinator) выбран узел samba_node1. Пока что наш кластер работает в холостую и не управляет никакими ресурсами(сервисами), этим мы займемся дальше.
 +
 +===== Подключение LVM к кластеру =====
 +Включаем cluster locking в конфиге LVM и включаем автозагрузку демона lvmetad, все это можно сделать одной командой:
 +
 +  # lvmconf --enable-cluster
 +  
 +Проверяем, должно ровняться 3
 +
 +  # cat /etc/lvm/lvm.conf | grep "locking_type ="
 +  locking_type = 3
 +
 +Теперь создаем два клонированных ресурса. Первый распределенный менеджер блокировок и второй - кластерный LVM(команды выполняются на любом узле)
 +
 +  # pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
 +  # pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
 +
 +Настраиваем порядок запуска, dlm должен стартовать первым и оба демона должны выполняться на одном хосте
 +
 +  # 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]
 +       Started: [ samba_node1 samba_node2 ]
 +   Clone Set: clvmd-clone [clvmd]
 +       Started: [ samba_node1 samba_node2 ]
 +
 +Ну а теперь создаем LVM том как обычно, все дальнейшие команды ничем не отличаются от обычной, не кластерной LVM(предполагается, что общий диск у всех нод - /dev/sdb). Команды выполнять только на одном узле.
 +
 +  # pvcreate /dev/sdb
 +  # vgcreate samba_cluster /dev/sdb
 +  # lvcreate -n samba_cluster -l100%FREE samba_cluster
 +  
 +Смотрим на обоих нодах(по-умолчанию тома должны быть видимы на всех нодах)
 +
 +  # ls /dev/samba_cluster/samba_cluster
 +
 +===== Создание кластерной ФС и подключение ее к кластеру =====
 +
 +Создаем кластерную ФС GFS2 поверх только что созданного LVM тома. Кол-во журналов(-j 2) соответствует кол-ву нод кластера, протокол блокировки для кластера - lock_dlm
 +
 +  # mkfs.gfs2 -p lock_dlm -t samba_cluster:cluster_FS -j 2 /dev/samba_cluster/samba_cluster
 +  
 +  /dev/samba_cluster/samba_cluster is a symbolic link to /dev/dm-2
 +  This will destroy any data on /dev/dm-2
 +  Are you sure you want to proceed? [y/n]y
 +  
 +  Device:                    /dev/samba_cluster/samba_cluster
 +  Block size:                4096
 +  Device size:               10,00 GB (2620416 blocks)
 +  Filesystem size:           10,00 GB (2620413 blocks)
 +  Journals:                  2
 +  Resource groups:           40
 +  Locking protocol:          "lock_dlm"
 +  Lock table:                "samba_cluster:cluster_FS"
 +  UUID:                      a750c8de-b4bc-2b0b-90ef-0a609319a657  
 +
 +После создания ФС можно попробовать ее примонтировать на обоих узлах
 +
 +  # mount /dev/samba_cluster/samba_cluster /mnt/
 +
 +Не забываем отмонтировать и проверить, что ФС не прописана в fstab, ее монтировать будет кластер.
 +
 +Настаиваем кластер(все команды выполняются на одном узле). Задаем поведение, требуемое при отсутствии кворума(чтобы не пострадали данные в случаи split brain)
 +
 +  # pcs property set no-quorum-policy=freeze
 +
 +Создаем ресурс ФС, в случае необходимости к опциям можно добавить acl
 +
 +  # pcs resource create clusterfs Filesystem device="/dev/samba_cluster/samba_cluster" directory="/mnt" fstype="gfs2" "options=noatime" op monitor interval=10s on-fail=fence clone interleave=true
 +  
 +И наконец настраиваем порядок запуска и зависимости, т.е. ФС должна монтироваться после готовности LVM
 +
 +  # 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]
 +       Started: [ samba_node1 samba_node2 ]
 +   Clone Set: clvmd-clone [clvmd]
 +       Started: [ samba_node1 samba_node2 ]
 +   Clone Set: clusterfs-clone [clusterfs]
 +       Started: [ samba_node1 samba_node2 ]
 +  
 +  # df -h
 +  /dev/mapper/samba_cluster-samba_cluster    10G         259M  9,8G            3% /mnt
 +
 +Как видим, ФС примонтирована и все ресурсы у кластера в рабочем состоянии. На этом настройка pacemaker закончена, переходим к заключительному этапу - настройка CTDB.
 +
 +===== Настройка CTDB =====
 +
 +Создаем на кластерной ФС директорию для Samba и файлы nodes, public_addresses для CTDB
 +
 +  # mkdir /mnt/ctdb
 +  # touch /etc/ctdb/nodes
 +  # touch /etc/ctdb/public_addresses
 +
 +Редактируем конфиг /etc/sysconfig/ctdb
 +
 +  CTDB_RECOVERY_LOCK="/mnt/ctdb/.ctdb.lock"
 +  CTDB_NODES=/etc/ctdb/nodes
 +  CTDB_PUBLIC_ADDRESSES=/etc/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-адреса всех узлов кластера, через которые взаимодействует ПО управления кластером - pacemaker и CTDB, эти адреса могут быть на отдельных интерфейсах, как уже упоминалось.
 +
 +  # cat /etc/ctdb/nodes
 +  192.168.232.10
 +  192.168.232.20
 +
 +Файл public_addresses содержит IP-адреса узлов через которые кластер обслуживает клиентов. Как упоминалось, этот файл нужен в случае если адресами управляет CTDB, он сам решит на какой узел какой адрес отдать. После адреса через пробел указывается сетевая карта, которой этот адрес присвоить, нужно перечислить все возможные варианты на всех узлах.
 +
 +  # cat /etc/ctdb/public_addresses
 +  10.0.0.100/24 eth1
 +  10.0.0.200/24 eth1
 +
 +И наконец редактируем конфиг Samba, он должен быть одинаков на всех узлах.
 +
 +  [global]
 +          workgroup = COMPANY
 +          server string = Samba Test Cluster
 +          netbios name = MEGACLUSTER
 +          max protocol = SMB2
 +          log file = /var/log/samba/log.%m
 +          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
 +  
 +  #============================ Share Definitions ==============================
 +  
 +  [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   OK
 +  pnn:1 192.168.232.20   OK (THIS NODE)
 +  Generation:388325546
 +  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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +      link/ether 00:0c:29:15:60:7b brd ff:ff:ff:ff:ff:ff
 +      inet 10.0.0.100/24 brd 10.0.0.255 scope global eno33554976
 +         valid_lft forever preferred_lft forever
 +  
 +  # smbcontrol smbd ping
 +  PONG from pid 1:5658
 +
 +Если Samba интегрирована с AD теперь можно попробовать подключиться со стороны клиента,  если нет, то создаем учетную запись пользователя.
  
centos_7_samba_cluster.1410874160.txt.gz · Последнее изменение: 2022/03/25 17:03 (внешнее изменение)