Построение двухузлового Linux-кластера с помощью Heartbeat

Building a Two-Node Linux Cluster with Heartbeat
Mar 11, 2002 By C T Leung
in Software

Термин "кластер" на самом деле не очень хорошо определен и может означать разное для разных людей. Согласно Webopedia, кластер - это группа секторов на жестком диске. Большинство пользователей Windows наверняка знакомы с понятием потерянных кластеров, нечто, что можно побороть запуском утилиты дефрагментации диска.

Тем не менее, на более продвинутом уровне компьютерных технологий термин кластер обычно означает группу компьютеров, объединенных сетью для достижения большой производительности, обычно измеряемой в MIPS (миллионы операций в секунду), или для достижения большей доступности (HA).

Beowulf, суперкомпьютер для бедных
Большинство суперкомпьютеров в мире построено на основе концепции параллельных вычислений. Большая вычислительная мощность достигается путем сложения мощностей отдельных вычислителей на задачах, которые можно хорошо разделить между этими вычислителями. Например, построенный IBM "Deep Blue", который выиграл в шахматы у Каспарова, представляет собой объединение нескольких сотен RS6000. Другой пример: многие голливудские компании, занимающиеся мультипликацией, например Pixar, Industrial Light или Magic, используют кластеры компьютеров для рендеринга.

В прошлом только отдельные университетские или исследовательские центры могли себе позволить сосредоточить ресурсы для построения топового суперкомпьютера. Стартовавший в относительно недавнем времени в NASA проект Beowulf посвящен построению кластеров из устаревшего дешевого оборудования, типа первых Pentium и прочих подобных устройств, на которых запускается Linux.

За несколько последних лет сразу во многих университетах по всему миру были развернуты кластеры Beowulf для научных вычислений или исследования достижений переднего края кластеростроения.

High Availability (HA), кластер высокой доступности
Кластеры из этой категории используют несколько различных технологий для обеспечения отказоустойчивых сервисов высокой доступности. Такие компании, как Red Hat, TurboLinux и PolyServe имеют решения для превращения группы компьютеров в самоподдерживающийся пул, где машины наблюдают за состоянием друг друга и когда мастер-сервер аварийно завершает работу, его функции подхватываются подчиненными серверами. В основном это похоже на зеркалирование дисков между различными машинами, то есть программное обеспечение и информация идентичны на разных узлах.

Теория
Поскольку я не имею "белых" IP-адресов, я построю свой кластер в приватной сети с несколькими Linux-серверами и рабочими станциями на Win9x.

Если у вас есть доступ к трем или более внешним IP-адресам, вы можете построить кластер и в Интернете.

В моей схеме в Интернет имеет доступ Linux-маршрутизатор, подключенный к кабельному модему одним из интерфейсов (eth1).

Двухузловой кластер состоит из машины node1 (192.168.1.2) и машины node2 (192.168.1.3). В зависимости от ваших установок любая из них может быть мастер-сервером и любая другая - подчиненным сервером. В примере я выбрал node1 мастером и node2 - резервным. С момента, когда кластер установлен, основной сервер будет работать на псевдониме интерфейса с адресом 192.168.1.4. Во время работы мастер-сервера все сервисы (DHCP, DNS, HTTP, FTP, etc.) будут доступны по обоим адресам (фактически, IP-алиасинг есть ключевая концепция для данного двухузлового кластера).

Когда мастер-сервер уходит в даун, node2 берет на себя все сервисы, которые были запущены на узле node1 с помощью запуска их на том же самом псевдоинтерфейсе с адресом 192.168.1.4. Поскольку некоторые серверы могут быть запущены на многих узлах, но зато другие, как например DHCP, могут быть подняты только на одном узле физического сегмента, они не могут существовать одновременно на node1 и node2. То есть алиас с адресом 192.168.1.4 существует одномоментно только или на мастере, или на резервном сервере.

Фактически, лежащий в основе принцип настолько прост, что любой администратор, знакомый с шелл-программированием, мог бы написать собственный скрипт для его реализации. Мы установим бесконечный цикл на резервном сервере, который будет проверять доступность мастера и в случае его недоступности поднимать алиас 192.168.1.4 и нужные сервисы.

Двухузловой кластер на основе "Heartbeat"
Вам понадобятся две машины не слабее 100MHz CPU, 32MB RAM, имеющие по одной сетевой карте и 1Gb жесткий диск. Эти машины не обязаны быть идентичными.

У меня были AMD K6 350M Hz и Pentium 200 MMX. Я выбрал машинку AMD в качестве первичного сервера. Старое и почти полностью вышедшее из употребления оборудование в отличном состоянии - прекрасный объект для экспериментов.

node1

AMD K6 350MHz cpu
4G SCSI hard drive (you certainly can use IDE hard drive)
128MB RAM
1.44 Floppy drive
24x CD-ROM (not needed after installation)
3COM 905 NIC

node2

Pentium 200 MMX
4G SCSI hard drive
96MB RAM
1.44 Floppy
24x CD-ROM
3COM 905 NIC

Необходимое программное обеспечение
На узлах node1 и node2 необходимо иметь установленный Linux. Мой выбор - Red Hat 7.2 на node1 и Red Hat 6.2 на node2 (хотел посмотреть, будет ли схема работать на разных версиях операционной системы). Проверьте, все ли серверные программы, нужные вам, установлены на обоих машинах.

Детали установки:
128 Мб для раздела swap и весь оставшийся диск для корневого раздела файловой системы.
Установленные пакеты: Apache, FTP, Samba, DNS, dhcpd, Squid, Heartbeat.

Heartbeat - часть проекта Ultra Monkey (The Linux HA Project), и rpm-пакет может быть загружен с сайта www.UltraMonkey.org.

Та часть работы, которая относится к скачиванию и установке пакета проста. Но документация труднонаходима и неполна. Это одна из причин, по которой написано эта инструкция.

Содержание некоторых конфигурационных файлов, необходимых для рабочей схемы:

/etc/hosts
127.0.0.1 localhost
192.168.1.1 router
192.168.1.2 node1
192.168.1.3 node2

Этот файл должен быть одинаковым на node1 и node2; можно по необходимости добавить и другие узлы.

Проверьте, что команда cat /etc/HOSTNAME выдает соответственно node1 или node2 в зависимости от машины. При необходимости воспользуйтесь редактированием файла /etc/HOSTNAME для исправления ситуации.

Вывод ifconfig на узле node1:

eth0 Link encap:Ethernet HWaddr 00:60:97:9C:52:28
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18617 errors:0 dropped:0 overruns:0 frame:0
TX packets:14682 errors:0 dropped:0 overruns:0 carrier:0
collisions:3 txqueuelen:100
Interrupt:10 Base address:0x6800
eth0:0 Link encap:Ethernet HWaddr 00:60:97:9C:52:28
inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:10 Base address:0x6800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

Обратите внимание: eth0:0 показывает адрес алиаса сетевого интерфейса с адерсом 192.168.1.4.

Вывод ifconfig для node2:

eth0 Link encap:Ethernet HWaddr 00:60:08:26:B2:A4
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15673 errors:0 dropped:0 overruns:0 frame:0
TX packets:17550 errors:0 dropped:0 overruns:0 carrier:0
collisions:2 txqueuelen:100
Interrupt:10 Base address:0x6700
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:142 errors:0 dropped:0 overruns:0 frame:0
TX packets:142 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

Установите rpm-пакет Heartbeat. Для этого пройдите на FTP Ultra Monkey, затем в pub, затем в Ultra Monkey и найдите последнюю версию. Скачайте, выполните от суперпользователя:

rpm -ivh heartbeat-0.4.9-1.um.1.i386.rpm

(Вероятнее всего, на текущий момент понадобится выполнить yum install heartbeat, возможно понадобится добавить репозиторий Ultra Monkey - прим. перев.)

Кабель Null Modem, кросс-кабель, вторая сетевая карта
В соответствии с документацией, в каждый узел нужно установить по второй сетевой карте и соединить узлы через эти карты кросс-кабелем. Кроме того, опять же в соответствии с документацией, нужно соединить последовательные порты узлов нульмодемным кабелем. Проводя эксперименты, я установил, что ни дополнительные сетевые карты, ни нульмодемный, ни кросс-кабель не являются обязательными для функционирования схемы.

Конфигурирование Heartbeat - наиболее значимая вещь во время установки. Ошибки, допущенные в конфигурации, не дадут кластеру работать корректно. Конфигурация должна быть идентичной на обоих узлах.
Имеется три конфигурационных файла, все в каталоге /etc/ha.d: ha.cf, haresource и authkeys.

Содержимое файла /etc/ha.d/ha.cf:

debugfile /var/log/ha-debug
#
# File to write other messages to
#
logfile /var/log/ha-log
#
# Facility to use for syslog()/logger
#
logfacility local0
#
# keepalive: how many seconds between heartbeats
#
keepalive 2
#
# deadtime: seconds-to-declare-host-dead
#
deadtime 10
udpport 694
#
# What interfaces to heartbeat over?
#
udp eth0
#
node node1
node node2
#
# ------> end of ha.cf

Наиболее важны три последние опции:

udp eth0
#
node node1
node node2

Если нет нульмодемного кабеля, вы должны использовать интерфейс eth0, то есть единственную сетевую карту для udp; два описателя узла должны быть одинаковыми, их значения соответствовать тому, что возвращает команда uname -n на каждом узле.

Содержимое файла /etc/ha.d/haresources:

node1 IPaddr::192.168.1.4 httpd smb dhcpd

Это единственная нужная строка, вы можете добавить столько служб, сколько нужно, сообразуясь с именами инит-скриптов в /etc/rc.d/init.d.

Файл /etc/ha.d/authkeys: в нем ничего не требуется менять, но необходимо изменить права на файл:

chmod 600 /etc/ha.d/authkeys

Запуск службы Heartbeat
Запуск демона Heartbeat можно осуществить с помощью команды

service heartbeat start

или

/etc/rc.d/init.d/heartbeat start

Сразу после запуска Heartbeat вывод ifconfig на node1 должен быть примерно следующим:

eth0 Link encap:Ethernet HWaddr 00:60:97:9C:52:28
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18617 errors:0 dropped:0 overruns:0 frame:0
TX packets:14682 errors:0 dropped:0 overruns:0 carrier:0
collisions:3 txqueuelen:100
Interrupt:10 Base address:0x6800
eth0:0 Link encap:Ethernet HWaddr 00:60:97:9C:52:28
inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:10 Base address:0x6800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

Если вы видите строку eth0:0, значит Heartbeat поднялся, теперь можно проверить доступ к сервисам на адресе http://192.168.1.4 и просмотреть журналы /var/log/ha-log на обоих узлах. Также с помощью ps -A | grep dhcpd убедитесь, что dhcpd не запущен на резервном узле.

Теперь тест доступности. Выгрузите систему и выключите питание на node1. В течение 10 секунд должно произойти поднятие алиаса на узле 2. Проверьте с помощью ifconfig:

eth0 Link encap:Ethernet HWaddr 00:60:08:26:B2:A4
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15673 errors:0 dropped:0 overruns:0 frame:0
TX packets:17550 errors:0 dropped:0 overruns:0 carrier:0
collisions:2 txqueuelen:100
Interrupt:10 Base address:0x6700
eth0:0 Link encap:Ethernet HWaddr 00:60:08:26:B2:A4
inet addr:192.168.1.4 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15673 errors:0 dropped:0 overruns:0 frame:0
TX packets:17550 errors:0 dropped:0 overruns:0 carrier:0
collisions:2 txqueuelen:100
Interrupt:10 Base address:0x6700

Если есть eth0:0 с адресом 192.168.1.4 - значит мы в деле. Кроме того, с помощью команды

ps -A | grep dhcpd

можно проверить, поднялся ли DHCP-сервер.

Конечно, среди продуктов для кластеростроения высокой доступности имеются коммерческие предложения, основанные на той же парадигме алиасов сетевых интерфейсов, однако для малого бизнеса, образования и исследований схема с Heartbeat близка к идеальной.

Назад