Кластеры · 4 min read · Jan 29, 2026

Настройка активного/активного кластера Samba CTDB с использованием GFS и DRBD (CentOS 5.5)

Настройка активного/активного кластера Samba CTDB с использованием GFS и DRBD (CentOS 5.5)

Эта статья объясняет, как настроить активный/активный кластер Samba CTDB, используя GFS и DRBD. Подготовлено Рафаэлем Марангони из команды BRLink Servidor Linux.

Введение

Мы используем два узла, оба являются активными узлами, и запросы распределяются по нагрузке. Для репликации данных между узлами мы используем DRBD. Для активного/активного кластера мы должны использовать ClusterFS (в данном случае GFS), чтобы оба узла могли записывать на ресурс DRBD одновременно.

1 Предварительная заметка

Дистрибутив Linux:

Мы используем дистрибутив CentOS 5.5 (64 бита), но, вероятно, он будет работать и на Fedora (и Red Hat, безусловно). Установка CentOS очень проста и классическая, выберите базовые пакеты и другие вещи, которые вам нравятся/нужны. Один момент, который следует помнить, это то, что мы используем DRBD для репликации данных между узлами, поэтому вам нужно иметь диск или раздел, эксклюзивный для DRBD. Помните об этом перед разбиением дисков при установке CentOS.

Сетевое оборудование/топология:

Мы используем две гигабитные сетевые карты на узел, одна (eth0) подключена к сети (LAN), а другая (eth1) с перекрестным кабелем, соединяющим оба узла. Перекрестный кабель должен использоваться для повышения производительности и надежности системы, потому что DRBD не будет зависеть от сетевых коммутаторов или чего-либо еще для репликации данных между узлами.

В этом руководстве мы будем использовать физические узлы node1.clusterbr.int и node2.clusterbr.int: node1.clustersmb.int: Использует IP 10.0.0.181 (LAN) и IP 172.16.0.1 (перекрестный) nnode2.clustersmb.int: Использует IP 10.0.0.182 (LAN) и IP 172.16.0.2 (перекрестный) vip1.clustersmb.int: Это кластерный IP, от node1 10.0.0.183. vip2.clustersmb.int: Это кластерный IP, от node2 10.0.0.184.

Диски:

Оба узла имеют два диска: /dev/sda: для ОС; /dev/sdb: для DRBD. Как я уже говорил, вы можете использовать только один диск, оставив один раздел эксклюзивным для DRBD.

CTDB:

Это кластерная реализация TDB, используемая с Samba на кластерных файловых системах. Нам это нужно для активного/активного кластера, чтобы оба сервиса smb могли отвечать на сетевые запросы. Дополнительная информация на http://ctdb.samba.org.

2 Подготовка узлов

Отключение SELINUX

Нам нужно отключить SELINUX:

vi /etc/selinux/config

Измените только эту строку (оставив все остальное нетронутым):

SELINUX=disabled

Установка имени хоста

Нам нужно изменить имя хоста и шлюз узлов:

vi /etc/sysconfig/network

node1:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node1.clustersmb.int
GATEWAY=10.0.0.9

node2:

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=node2.clustersmb.int
GATEWAY=10.0.0.9

Настройка сетевых интерфейсов

Далее мы настроим сетевые интерфейсы:

node1:

Сетевой интерфейс LAN:

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.181
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=a6:1e:3d:67:66:78 

Интерфейс Cross-Over/DRBD:

vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.1
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=ee:ef:ff:9a:9a:57

node2:

Сетевой интерфейс LAN:

vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.0.0.182
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=52:52:a1:1a:62:32

Интерфейс Cross-Over/DRBD:

vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=172.16.0.2
NETMASK=255.255.255.0
ONBOOT=yes
HWADDR=1a:18:b2:50:96:1e

Настройка конфигурации DNS

Настройка конфигурации DNS на обоих узлах (в соответствии с вашей сетью):

vi /etc/resolv.conf
search clustersmb.int
nameserver 10.0.0.9

Настройка базового разрешения имен хостов

Настройка /etc/hosts (одинаковая конфигурация на обоих узлах):

vi /etc/hosts
127.0.0.1               localhost.localdomain localhost
10.0.0.191              node1.clustersmb.int   node1
10.0.0.192              node2.clustersmb.int   node2

PS: Вы, вероятно, захотите добавить другие строки в этот файл, чтобы указать на другие адреса вашей сети.

Проверка сетевой доступности

Давайте проверим, все ли в порядке:

node1:

Пингование node2 (через интерфейс LAN):

[root@node1 ~]# ping -c 2 node2

[root@node1 ~]# ping -c 2 node2
PING node2 (10.0.0.182) 56(84) bytes of data.
64 bytes from node2 (10.0.0.182): icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from node2 (10.0.0.182): icmp_seq=2 ttl=64 time=0.082 ms
— node2 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.082/0.085/0.089/0.009 ms

Пингование node2 (через интерфейс перекрестного соединения):

[root@node1 ~]# ping -c 2 172.16.0.2

[root@node1 ~]# ping -c 2 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.083 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.083 ms
— 172.16.0.2 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.083/0.083/0.083/0.000 ms

node2:

Пингование node1 (через интерфейс LAN):

[root@node2 ~]# ping -c 2 node1

[root@node2 ~]# ping -c 2 node1
PING node1 (10.0.0.181) 56(84) bytes of data.
64 bytes from node1 (10.0.0.181): icmp_seq=1 ttl=64 time=0.068 ms
64 bytes from node1 (10.0.0.181): icmp_seq=2 ttl=64 time=0.063 ms
— node1 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.063/0.065/0.068/0.008 ms

Пингование node1 (через интерфейс перекрестного соединения):

[root@node2 ~]# ping -c 2 172.16.0.1

[root@node2 ~]# ping -c 2 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=1.36 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.075 ms
— 172.16.0.1 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.075/0.722/1.369/0.647 ms

Настройка параметров инициализации

Я предпочитаю установить уровень выполнения на 3.

vi /etc/inittab

Измените только эту строку (оставив все остальное нетронутым):

id:3:initdefault:

Я предпочитаю удалить некоторые службы из автоматической инициализации, чтобы оставить только службы, которые действительно будут использоваться.

Это активные службы, которые нам понадобятся:

[root@node1 ~]# chkconfig --list | grep 3:sim

[root@node1 ~]# chkconfig –list | grep 3:sim
acpid 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
anacron 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
apmd 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
atd 0:нет 1:нет 2:нет 3:да 4:да 5:да 6:нет
cpu_speed 0:нет 1:да 2:да 3:да 4:да 5:да 6:нет
crond 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
irqbalance 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
kudzu 0:нет 1:нет 2:нет 3:да 4:да 5:да 6:нет
network 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
rawdevices 0:нет 1:нет 2:нет 3:да 4:да 5:да 6:нет
sshd 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет
syslog 0:нет 1:нет 2:да 3:да 4:да 5:да 6:нет


На этом этапе нам нужно перезагрузить оба узла, чтобы применить конфигурацию.

reboot

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.