Green-sell.info

Новые технологии
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Кластер на linux

Кластер на linux

Для начала нужно разобраться что же такое кластер в общем случае. Как правило, кластер состоит из узлов (отдельных компьютеров) и объединяющей их сети. Для построения сети обычно используется технология Fast Ethernet (100Mbit/sec), но в простейшем случае (например, создание кластера в домашних условиях или в демонстративных целях) подойдет и один сегмент Ethernet на 10Mbit/sec.

Обычно кластеры используются научно-исследовательскими организациями для моделирования различного рода задач или проведения сложных расчетов. Цена суперкомпьютеров является недоступной для большинства организаций, поэтому появилась идея собрать свой ‘суперкомпьютер’ из ‘подручного материала’ — рабочих станций на базе процессоров Intel. Производительность процессоров производства Intel сейчас практически достигла уровня процессоров архитектуры RISC (процессоры Intel включая Pentium III используют архитектуру CISC, а P4 — VLIW).

Собираем свой кластер

Конфигурация узлов кластера зависит от задач, которые они будут выполнять. Если ваша цель — само создание кластера без решения каких-нибудь важных задач, подойдут и старенькие машины с 486-ым процессором (желательно DX2 или DX4). Для решения относительно важных задач подойдут компьютеры с процессорами Pentium II от 400Mhz или Pentium III (от 600Mhz).

Обратите внимание на объем оперативной памяти. В первом случае (486/демонстрация работы кластера) достаточным будет 16-32MB (желательно). Во втором — минимум 64Мб, рекомендуется 128Мб ОЗУ.
При использовании многопроцессорных машин объем ОЗУ желательно увеличить до уровня Nx64Mb, где N — это количество процессоров, то есть по 64Мб на каждый процессор. Обычно используются двухпроцессорные машины — в этом случае минимальный объем ОЗУ будет равен 128Мб, а рекомендуемый — 256Мб.

Один компьютер (узел) будет центральным. Желательно, чтобы он был более мощным, чем остальные узлы кластера. На нем нужно установить более мощный процессор, в два раза большим объем оперативной памяти, чем на остальных узлах (минимум 128Мб). Желательно на центральном компьютере использовать SCSI-диск, но подойдет и ATA133 / 7200 rpm. Лучше поставить быстрый SCSI, а на узлах вообще отказаться от жесткого диска — так будет дешевле. Все эти требования — желательные, но не обязательные.

Если вы откажетесь от использования жестких дисков на узлах кластера, операционная система будет загружаться по сети, но об этом мы поговорим немного позже. В этом случае вы получите лишь выигрыш во времени: операционную систему и программное обеспечение нужно будет настраивать только один раз.
Вполне возможен отказ и от видеоплат при сборке узлов кластера (на центральном узле видеоплата все-таки будет нужна).

Теперь поговорим о сети. Как я уже писал, желательно использовать Fast Ethernet. Если количество узлов довольно велико (от 20), для уменьшения коллизий необходимо разбить на отдельные сегменты или использовать для их соединения коммутатор (swith), а не повторитель (hub).
В некоторых случаях имеет смысл разбить сеть на сегменты даже при небольшом числе узлов (от 8), например, если вы используете Ethernet (10Mbit/sec).

При использовании Ethernet отказываться от жестких дисков не рекомендуется: кластер будет работать ужасно медленно, будет возникать огромное число коллизий.
Одним из самых эффективных решений для связи узлов кластера является использование 1.28GBit-ных коммутаторов Myrinet. Также можно использовать технологию Gigabit Ethernet.

Программное обеспечение

В качестве операционных систем можно использовать:

  1. Linux
  2. FreeBSD
  3. Windows NT

Предпочтительнее использовать любую Unix-систему, так как именно эти операционные системы наиболее эффективнее используют сетевые ресурсы. Оптимальным решением является операционная система Linux — она бесплатна и довольно проста в настройке.

Можно использовать любую Linux-систему с версией ядра 2.2.* и выше. Я бы порекомендовал использовать шестую версию Linux RedHat, так как она нетребовательна к системным ресурсам (минимальная конфигурация — 486 33Mhz/8MB RAM/120MB HDD) и в состав дистрибутива входит относительно новое программное обеспечение по сравнению с версией 5.2, которую также можно использовать для построения кластера. Версия ядра, используемая этим дистрибутивом (RH 6), 2.2.5-15.

После установки и настройки (настройки сети) операционной системы нужно установить специальные компиляторы. Дело в том, что бесплатно распространяемые компиляторы gcc/g77/egcs не обеспечивают необходимого уровня оптимизации программ для процессоров Intel (PII, PIII). Рекомендуется использовать коммерческие компиляторы, например, входящие в проект PGI Workstation.
При использовании Windows NT как операционной системы кластера можно также выбрать компилятор компании Intel, оптимизированный для платформы Intel.

В первом и во втором случае доступны тестовые версии компиляторов. Shareware-версию пакета PGI вы можете скачать на сайте PGI Group. А тестовую (14 дней) версию компилятора Intel можно скачать на сайте Intel.

После установки компиляторов нужно установить среду распределения задач. В этой статье я опишу работу со средой PVM, хотя доступны и другие средства MPI, Condor.

MPI CHameleon представляет собой реализацию промышленного стандарта MPI 1.1. MPI CHameleon позволяет программам выполнятся внутри локальной системы или на сетевом кластере с использованием TCP-соединений.
Среда Condor обеспечивает равномерную нагрузку на кластер путем миграции процессов между несколькими машинами.

Я выбрал более простой вариант — PVM (Parallel Virtual Machine). PVM обеспечивает условия для выполнения одной (или нескольких — в большинстве случаем) задач на нескольких машинах. Другими словами PVM просто распределяет процессы на узлах кластера также как планировщик заданий операционной системы распределяет процессорное время для выполнения нескольких задач.
PVM может работать на следующих архитектурах:

Это далеко не все архитектуры, которые поддерживает PVM. Список всех доступных архитектур вы найдете в документации pvm. Интересующие нас (точнее, доступные нам) архитектуры выделены жирным шрифтом.

Работа с ‘параллельной машиной’ довольно проста. Нужно установить ее на всех машинах кластера. Мой ‘кластер’ состоял из двух машин класса Pentium (100 и 150Mhz) с объемом ОЗУ по 32Мб и одной (центральной) Celeron 433 (128Mb). От сетевой загрузки я отказался из-за использование 10Mbit-го Ethernet’a. К тому же на всех узлах уже были установлены жесткие диски. На центральном была установлена ОС Linux Mandrake 7, а на вспомогательных машинах Linux RedHat 6.0 Hedwig. Я не устанавливал каких-нибудь коммерческих комплиляторов, а использовал те, которые входят в состав дистрибутива.
Кстати, PVM может работать и на платформе Windows 9x, но вот этого не рекомендую делать. Ради интереса я установил PVM для Windows 98. Скорость работы даже тестовых приложений (не говоря уже о реальных расчетах) была значительно ниже. То, что кластер работает медленнее было видно даже ‘невооруженным глазом’. Скорее всего, это объясняется неэффективной работой Windows с сетью. К тому же, довольно часто весь кластер ‘зависал’ даже при выполнении тестовых задач, которые входят в состав пакета PVM.

Использование PVM

PVM компилируется с помощью привычной тройки команды:
configure; make; make install

Перед запуском make установите переменную окружения PVM_ROOT. В этой переменной окружения нужно указать каталог, в котором находятся каталоги PVM (например, $HOME/pvm, если вы распаковали архив в свой домашний каталог). Еще одной важной переменной окружения является PVM_ARCH. В ней содержится название архитектуры операционной системы. Данная переменная должна устанавливаться автоматически, но если этого не произошло (как в моем случае), нужно установить архитектуру самостоятельно. При использовании Linux эта переменная должна содержать значение LINUX.

Как я уже писал, нужно установить PVM на всех узлах кластера. Вся параллельная машина состоит из демона pvmd и консоли pvm. Назначение опций запуска демона можно узнать, выполнив команду man pvmd. На центральной машине нужно запустить демон pvmd и выполнить команду:
pvm
Этим мы запустим консоль, с помощью которой мы будем управлять всем кластером.

После запуска консоли вы должны увидеть приглашение, которое свидетельствует о том, что кластер готов к работе:
pvm >
Введите команду conf для печати конфигурации кластера. Вы должны увидеть примерно это:
Листинг 1.

Из листинга 1 видно, что сейчас наш кластер состоит из одной машины — центрального узла, который работает под управлением Linux. Теперь самое время добавить в наш кластер еще два узла. Добавление узлов осуществляется с помощью команды:
add hostname
После успешного добавления узла в кластер он должен быть отображен в списке узлов кластера. Теперь уже можно запускать программы, которые поддерживают PVM. Примеры таких программ вы можете найти в каталоге $PVM_ROOT/bin/$PVM_ARCH/.В нашем случае это будет каталог /root/pvm/bin/LINUX (я установил pvm в каталог /root). Для начала запустим самую простую программу — hello. Прежде чем запустить ее, нужно сделать несколько замечаний:

  1. Вы не можете запускать процессы прямо из консоли pvm. Консоль служит лишь для управления кластером.
  2. Запуск задачи осуществляется обычным способом — из консоли операционной системы. Но ‘распараллеливаться’ будут лишь те процессы, которые поддерживают pvm. С помощью команды spawn также можно породить задачу (см. ниже)

При запуске hello вы должны увидеть сообщение
hello, world from hostname,
где hostname — это узел кластера. Другими словами все узлы кластера должны поприветствовать вас.

Более интересной является программа gexample. После запуска нужно ввести два аргумента: n и число процессоров. Не вдаваясь в математические подробности, она рассчитывает сумму от 1 до n и факториал числа n. Второй аргумент определяет количество процессоров, которые будут задействованы в вычислении. В нашем случае второй аргумент равен трем. Просмотреть список всех задач можно с помощью команды ps -a. Эту команду нужно вводить в консоли pvm, а не в консоли операционной системы! Породить задачу можно также с помощью команды spawn, которая подробно рассмотрена ниже. Назначение всех команд консоли pvm представлено в таблице 1.

Кластер на linux

Юрий Сбитнев

Родился в 1965 г. в Волгограде.

Образование высшее: Волгоградский государственный университет, физический факультет, специальность — теоретическая физика.

С 1987 по 1997 г. — системный программист ВЦ ВолГУ, старший преподаватель кафедры радиофизики физического факультета ВолГУ.

В настоящее время руководитель Службы Информационно-Технического Обеспечения ОАО «Ювелиры Урала», Корпорация ЯВА, Екатеринбург.

Ubuntu кластер

*** ЧТО ТАКОЕ UBUNTU?

Ubuntu — это разрабатываемая сообществом, основанная на ядре Linux операционная система, которая идеально подходит для использования на персональных компьютерах, ноутбуках и серверах. Она содержит все необходимые программы, которые вам нужны: программу просмотра Интернет, офисный пакет для работы с текстами, электронными таблицами и презентациями, программы для общения в Интернет и много других.

Дистрибутивы семейства Ubuntu являются комплектом специально подобранного ПО. Это операционная система плюс множество нужных и полезных программ, которые свободно и без ограничений могут быть использованы вами и вашими друзьями и коллегами. Базовая полнофункциональная версия системы для персональных компьютеров и ноутбуков или версия для серверов занимают всего 1 CD, поэтому вы легко можете получить её для себя и делиться с окружающими. Специальные DVD версии дистрибутива включают практически всё ПО, которое вам может понадобиться для решения любых повседневных задач.

Для установки линукс-кластера на основе дистрибутива Ubuntu вам потребуется установочный диск Ubuntu Desktop Edition, с помощью которого вы установить операционную систему на консоль (главный компьютер) кластера. С того же самого диска нужно будет установить операционную систему на вычислительные узлы кластера. Однако, если вычислительные узлы не предполагается использовать в качестве офисных машин, но только как узлы кластера, то на эти компьютеры правильнее будет установить серверную редакцию дистрибутива — Ubuntu Server Edition, не содержащую графического интерфейса, и соответственно более легкую и быструю.

Сеть кластера следует спроектировать так, чтобы все узлы имели доступ в интернет. Это нужно для большего комфорта при настройке кластера и установки необходимого программного обеспечения на его узлах. Дело в том, что установка ПО в Ubuntu выполняется посредством закачки новейших версий необходимых пакетов из внешних репозиториев. В действительности достаточно будет обеспечить выходом в Интернет только главный компьютер (консоль кластера), а для вычислительных узлов необходима только возможность загружать программные пакеты через прокси. Осуществить это можно, установив на консоли кластера пакет apt-cacher-ng, а на вычислительных узлах сконфигурировать менеджер пакетов apt-get для работы через прокси. Для этого на консоли кластера выполним команду:

sudo apt-get install apt-cacher-ng

После этого на всех остальных узлах выполним команды:

sudo sh -c «echo «Acquire::http < Proxy \"http://192.168.1.1:3142\"; >; «> /etc/apt/apt.conf.d/01proxy»
sudo apt-get update

Здесь мы предполагаем, что адрес 192.168.1.1 — это адрес консоли кластера во внутренней сети кластера.

После установки базовой операционной системы необходимо доустановить необходимое для функциониования кластера по: компиляторы, библиотеки и программы OpenMPI, SSH, NFS. Выполнить это можно с помощью следующих команд:

sudo apt-get install mc build-essential fort77 gfortran libstdc++5 libltdl7-dev
sudo apt-get install openssh-server nfs-kernel-server
sudo apt-get install openmpi-bin openmpi-doc

Данная последовательность команд устанавливает в систему OpenMPI и компиляторы из набора Gnu Compiller Collection (gcc). Компиляторы gcc обладают одним существенным (в некоторых случаях) недостатком. В них нет поддержки работы с типами данных REAL*16 и COMPLEX*32 (в терминологии Фортрана). Если для ваших задач необходима такая точность вычислений, то вы вместо стандартного набора компиляторов и пакета OpenMPI из состава дистрибутива должны будете установить компиляторы фирмы Intel и скомпилировать OpenMPI с поддержкой этих компиляторов. Как это сделать — рассказано в следующих двух параграфах этой статьи. Если же точность REAL*8 и COMPLEX*16 вас устраивает, то следующие два параграфа вы можете пропустить.

ВАЖНО! Если вы решили использовать компиляторы фирмы Intel, то не следует устанавливать OpenMPI из состава дистрибутива. То есть команду sudo apt-get install openmpi-bin openmpi-doc (см. выше) выполнять не следует.

*** УСТАНОВКА КОМПИЛЯТОРА INTEL FORTRAN

Скачать свежую версию компилятора можно с официального сайта компании Intel, с этой страницы. Получив и разархивировав в своем домашнем каталоге архив с компилятором, выполним процедуру установки, запустив скрипт install.sh, который находится в каталоге, получившимся после разархивации. При запуске скрипт спросит вас о том, в каком варианте произвести установку компилятора. Нужно выбрать вариант N3 — установку в пользовательский каталог. Для ответа на все дальнейшие вопросы программы следует выбирать вариант, предложенный программой по умолчанию.

После окончания установки, чтобы все заработало необходимо поправить некоторые переменные окружения. Для этого исправим файл .bashrc, находящийся в домашнем каталоге пользователя, используя следующую команду (не забыв после передодключиться в систему):

echo «. $HOME/intel/Compiler/11.1/046/bin/ifortvars.sh ia32″ >> $HOME/.bashrc

Эта команда построена в предоложении, что используется версия 11.1.046 компилятора. Если же к тому моменту, когда вы воспользуетесь данными рекомендациями, фирма Intel выпустит новую версию, то команду надо будет поправить соответствующим образом.

*** УСТАНОВКА OpenMPI ДЛЯ КОМПИЛЯТОРА INTEL

К сожалению пакет OpenMPI, имеющийся в дистрибутиве Ubuntu, не знает о существовании компилятора Intel. Поэтому его придется установить из исходников, которые можно загрузить с официального сайта проекта OpenMPI. Разархивировав загруженный файл, перейдем в полученный в результате этого каталог исходников и выполним процедуру установки, последовательно запустив на исполнение следующие команды:

./configure —prefix=$HOME/openmpi F77=ifort FC=ifort
make
make install

В случае, если вы намереваетесь использовать и установили кроме компилятора Intel Fortran, так же и Intel С++, то команда конфигурации должна будет выглядеть так:

./configure —prefix=$HOME/openmpi CC=icc CXX=icpc F77=ifort FC=ifort

По окончании процесса установки, как и в случае с компилятором, необходимо поправить некоторые переменные окружения. Делаем это с помощью следующих команд модифицируем файл .bashrc:

echo «PATH=$HOME/openmpi/bin:$PATH» >> $HOME/.bashrc
echo «export PATH» >> $HOME/.bashrc
echo «LD_LIBRARY_PATH=$HOME/openmpi/lib:$LD_LIBRARY_PATH» >> $HOME/.bashrc
echo «export LD_LIBRARY_PATH» >> $HOME/.bashrc

По окончании процедуры необходимо переподключиться в систему (перелогиниться).

*** НАСТРОЙКА СЕТИ КЛАСТЕРА

Для того, чтобы MPI имела возможность без дополнительных запросов запускать части параллельной прогаммы на вычислительных узлах кластера, вы должны будете организовать беспарольный доступ по протоколу SSH с консоли кластера на все вычислительные узлы. Как это сделать — читайте соответствующий раздел этого сайта.

Следующим нашим шагом будет организация общего для всех узлов кластера каталога, где будут храниться исходники параллельных программ, их исполняемые модули и файлы с данными. Сделать это можно, настроив сетевую файловую систему NFS. Для простоты общий каталог сделаем подкаталгом домашне директории пользователя. Назовем его к прмеру «mpi».

Предположим, что узлы кластера имеют адреса внутри сети 192.168.1.0/255.255.255.0, и консоль кластера имеет адрес 192.168.1.1.

На консоли кластера, выполнив следующую команду, добавляем строчку в файл /etc/exports для создания сетевого ресурса:

sudo sh -c «echo «$HOME/mpi 192.168.1.0/24(rw,insecure,nohide,all_squash,anonuid=1000,anongid=1000,no_subtree_check)» >> /etc/exports»

После этого необходимо перезапустить сервис NFS:

sudo /etc/init.d/nfs-kernel-server restart

На всех остальных узлах кластера мы должны будем поправить файл /etc/fstab, добавив туда запись для автоматического монтирования сетевого ресурса. Делается это командой:

sudo sh -c «echo «192.168.1.1:$HOME/mpi $HOME/mpi nfs rsize=8192,wsize=8192,rw,auto,exec 0 0″ >> /etc/fstab»

Теперь для проверки перезагрузим вычислительные узлы кластера. После перезагрузки каталог mpi в домашней директории пользователя должен быть смонтирован и его содержимое должно быть эквивалентно содержимому такого же каталога на консоли кластера.

Если вы решили использовать компилятор Intel Fortran/Intel C++ и, соответственно, на консоли кластера установили этот компилятор и OpenMPI, скомпиленный из исходников, то то же самое вы должны сделать на всех вычислительных узлах. Однако последнее — не обязательно. Вместо этого вы можете подключить по сети (через NFS) каталоги с установленными компилятором и OpenMPI (openmpi и intel) аналогично тому, как вы только что это сделали подключая рабочий каталог mpi. В дополнение к этому вам необходимо подкорректировать на всех вычислительных узлах кластера файл /etc/environment следующими командами:

sudo sed -i -e ‘s;PATH=»;PATH=»‘»$HOME»‘/openmpi/bin:'»$HOME»‘/intel/Compiler/11.1/046/bin/ia32:;’ /etc/environment
sudo sh -c «echo «LD_LIBRARY_PATH=\»$HOME/openmpi/lib:$HOME/intel/Compiler/11.1/046/lib/ia32:$HOME/intel/Compiler/11.1/046/lib/32\»» >> /etc/environment»

*** НАСТРОЙКА ПАРАЛЛЕЛЬНОЙ СРЕДЫ

Настройка OpenMPI максимально проста. Вы должны в любом удобно месте создать текстовый файл (назовем его например mpi.hosts), в который запишете список всех узлов вашего кластера, как вычислительных узлов, так и консоли. Для простоты будем считать, что вы перечислите там ip-адреса узлов. Один узел — одна строчка. В самом простом варианте конфигурации кластера этого будет достаточно для начала работы.

*** КОМПИЛЯЦИЯ ПАРАЛЛЕЛЬНОЙ ПРОГРАММЫ

Для примера и для проверки работоспособности кластера скачаем в каталог mpi тестовую программу вычисления числа flops.f. Для компиляции необходимо выполнить следующую простую команду:

mpif77 flops.f -o flops

В результате должен получится исполняемый файл с именем «flops». Для запуска его в локальном однопроцессорном режиме достаточно запустить этот файл на исполнение обычным образом, то есть выполнить команду ./flops. На выходе мы получим информацию о скорости работы программы. Если все прошло нормально, то можем переходить к тестированию кластера.

*** ЗАПУСК ПАРАЛЛЕЛЬНОЙ ПРОГРАММЫ

Для запуска нашей программы параллельно на нескольких процессорах (узлах кластера) необходимо использовать диспетчер задач MPI или менеджер очередей, например Torque. Про менеджер очередей и ресурсов Torque мы поговоирм позже. Пока же обойдемся без него. Нам понадобится созданный нами ранее файл-список узлов mpi.hosts. С помощью этого списка запуск нашей параллеььной программы осуществляется командой:

mpiexec -hostfile mpi.hosts -np 5 ./flops

Параметр -np 5 означает, что программа будет запущена на пяти узлах кластера. Отработав, программа выдаст на экран информацию о скоростных характеристаках кластера в целом и отдельных его узлов.

В случае, если ваша параллельная программа состоит из отдельных программных модулей, то имеется возможность запускать из вместе, как единый комплекс. Предположим, что ваша программа состоит из двух модулей — visio и calc. Модуль calc — это собственно параллельная программа, которая в многопроцессороном режиме обрабатывает большой массив данных, и которая занимает 5 процессоров кластера. Модуль visio — программа визуализации полученных данных. Программа visio должна работать на одном процессоре. Запуск такой комплексной программы будет выглядеть так:

Linux.yaroslavl.ru

2. Как,что и где.

4. Настройка

Теперь после перезапуска mosix ваша машина уже будет работать в кластере, что можно увидеть запустив монитор командой mon. В случае, если вы увидите в мониторе только свою машину или вообще не увидите никого, то, как говорится — надо рыть. Скорее всего у вас ошибка именно в /etc/mosix.map.
Ну вот, увидили, но не победили. Что дальше? А дальше очень просто 🙂 — нужно собрать утилиты для работы с измененным /proc из пакета mproc. В частности в этом пакете идет неплохая модификация top — mtop, в который добавили возможность отображения узла(node), сортировки по узлам, переноса процесса с текущего узла на другой и установления минимальной загрузки процессора узла, после которой процессы начинают мигрировать на другие MOSIX — узлы.
Запускаем mtop, выбираем понравившийся не спящий процесс (рекомендую запустить bzip) и смело давим клавишу «g» на вашей клавиатуре, после чего вводим на запрос PID выбранного в качестве жертвы процесса и затем — номер узла, куда мы хотим его отправить. А уже после этого внимательно посмотрите на результаты, отображаемые командой mon — та машина должна начать брать на себя нагрузку выбранного процесса.
А собственно mtop — в поле #N отображать номер узла, где он выполняется.
Но это еще не все — ведь вам правда не хочется отправлять на другие узлы процессы вручную? Мне не захотелось. У MOSIX есть неплохая встроенная балансировка внутри кластера, которая позволяет более-менее равномерно распределять нагрузку на все узлы. Ну а вот здесь нам придется потрудится. Для начала я расскажу, как сделать тонкую настройку (tune) для двух узлов кластера? в процессе которой MOSIX получает информацию о скоростях процессоров и сети:
Запомните раз и навсегда — tune можно выполнять только в single-mode. Иначе вы либо получите не совсем корректный результат, либо ваша машина может просто зависнуть.
Итак, выполняем tune. После перевода операционной системы в single — mode например командой init 1 или init S запускаем скрипт prep_tune, который поднимет cетевые
интерфейсы и запустит MOSIX. После этого на одной из машин запускаем tune, вводим ему номер другого узла для настройки и ждем результата — утилита должна выдать запрос на ввод шести чисел, полученных от выполнения команды tune -a на другом узле. Собственно операцию придется повторить на другом узле командой tune -a , а результат из шести чисел ввести на первый узел. После подобного тюнинга в вашей системе должен появится файл /etc/overheads, содержащий информацию для MOSIX в виде неких числовых данных. В случае, если по каким-то причинам tune не смог сделать его, просто скопируйте из текущего каталога файл mosix.cost в /etc/overheads. Это поможет ;-).
При тюнинге кластера из более чем двух машин нужно использовать утилиту, которая также поставляется с MOSIX — tune_kernel. Данная утилита позволяет
вам в более простом и привычном виде настроить кластер, ответив на несколько вопросов и проведя тюнинг с двумя машинами кластера.
Кстати, по собственному опыту могу сказать, что при настройке кластера я рекомендую вам не загружать сеть, а наоборот — приостановить все активные операции в локальной сети.

5. Управление кластером

mosctl — контроль над узлом. Позволяет изменять параметры узла — такие, как block, stay, lstay, delay и т.д
Давайте рассмотрим несколько параметров этой утилиты:
stay — позволяет останавливать миграцию процессов на другие узлы с текущей машины. Отменяется параметром nostay или -stay
lstay — запрещает только локальным процессам миграцию, а процессы с других машин могут продолжать это делать. Отменяется параметром nolstay или -lstay.
block — запрещает удаленным/гостевым процессам выполнятся на этом узле. Отменяется параметром noblock или -block.
bring — возвращает обратно все процессы с текущего узла выполняемые на других машинах кластера. Этот параметр может не срабатывать, пока мигрировавший процесс не получит прерывание от системы.
setdelay устанавливает время, после которого процесс начинает мигрировать.
Ведь согласитесь — в случае, если время выполнения процесса меньше секунды смысл переносить его на другие машины сети исчезает. Именно это время и выставляется утилитой mosctl с параметром setdecay. Пример:
mosctl setdecay 1 500 200
устанавливает время перехода на другие узлы 500 миллисекунд в случае, если процесс запущен как slow и 200 милисекунд для fast процессов. Обратите внимание, что параметр slow всегда должен быть больше или равен параметру fast.

mosrun — запускает приложение в кластере. например mosrun -e -j5 make запустит make на 5-ом узле кластера, при этом все его дочерние процессы будут также выполнятся на 5-ом узле. Правда здесь есть один нюанс, при чем довольно существенный:
в случае, если дочерние процессы выполняются быстрее чем установленная утилитой mosctl задержка (delay) то процесс не будет мигрировать на другие узлы кластера. у mosrun еще довольно много различных интересных параметров, но подробно узнать
о них вы сможете из руководства по этой утилите. (man mosrun)

mon — как мы уже знаем, это монитор кластера, который в псевдографическом виде отображает загрузку каждого рабочего узла вашего кластера, количество свободной и занятой памяти узлов и выдает много другой, не менее интересной информации.

mtop — модифицированная для использования на узлах кластера версия команды top. Отображает на экране динамическую информацию о процессах, запущенных на данном узле, и узлах, куда мигрировали ваши процессы.

mps — тоже модифицированная версия команды ps. Добавлено еще одно поле — номер узла, на который мигрировал процесс.

Вот на мой взгляд и все основные утилиты. На самом деле конешно можно обойтись даже без них. Например используя для контроля над кластером /proc/mosix.
Там кроме того, что можно найти основную информацию о настройках узла, процессах запущенных с других узлов и т.д.,а также поменять часть параметров.

6. Эксперементируем.

7. Использование

8. Заключение

В заключение хочу сказать, что в этой статье не рассмотрены все возможности MOSIX, т.к. я просто до них еще не добрался. Если доберусь — ждите продолжения. 🙂

Linux Exp Group

Построение двухузлового 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 в качестве первичного сервера. Старое и почти полностью вышедшее из употребления оборудование в отличном состоянии — прекрасный объект для экспериментов.

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

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

Сразу после запуска 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 близка к идеальной.

Построение высоко доступного web кластера с балансировкой нагрузки на базе linux

0. Intro

0.1 Почему кластер?

Хотя бы потому, что с ростом производительности системы цена на нее растет в несколько раз быстрее. В случае с кластером, практически линейная маштабируемость производительности за линейную маштабируемость денег. Мощность наращивается просто добавлением машины в кластер. Любая отдельная часть системы может быть отключена без потери доступности всего ресурса(например это может понадобиться при апгрэйде системы). Это не говоря уже об отказоустойчивости.

Прежде всего, давайте определимся с проблемой, которую будем решать.

1. Описание проблемы

«Мой сайт просто обязан быть доступен 24 часа в сутки, 7 дней в неделю. Система, обеспечивающая доступ к нему, должна позволять легко нарастить мощность без потери доступности.» Решение — HA/LB Cluster.

Вот некоторые понятия о которых мы будем говорить в этой статье:

Значит нас интересует набор программных продуктов который позволит построить высоко доступный web сервис на кластерной основе. Но:
а) мы хотим иметь действительно балансировку нагрузки, а не просто Round Robin.
б) система должна правильно вычислять «старых» пользователей и отправлять их на «старый» сервер, если он доступен. Например мы хостим книжный интернет магазин. Приобретая книгу мы кладем ее в корзину. Сервер запомнил что находится у нас в корзине. При следующем запросе оказывается что другой сервер в этот момент времени менее загружен и LB отправляет запрос на него. Этого никак нельзя допустить. Второй сервер ничего не знает о нашей корзине.
в) web сервер должен быть доступен при крахе любой отдельной части кластера.
г) наконец, мы люди любящие халяву, а значит коммерческое решение нас не устраивает.

После всех поставленных условий выбор оказывается не велик. Я остановился на mod_backhand в качестве балансировщика нагрузки и Wackamol в качестве основы для построения отказоустойчивой системы.

2. Mod_backhand

2.1 Установка

Установить mod_backhand проще простого. Я предпочитаю делать это во время сборки apache:

# cd /var/tmp
# ls
apache_1.3.28.tar.gz
mod_backhand-1.2.2.tar.gz
# gzip -d
SetHandler backhand-handler

Значит статистика будет доступна по адрессу http://имя_узла/backhand/.

2.3 Функция выбора кандидата.

Функция выбора кандидата определяет какие серверы являются кандидатами на выполнение запроса и сортирует их в соответствии с правилами описанными в настройке mod_backhand.
Например, в файле конфигурации apache мы можем указать что все файлы заканчивающиеся на .php будут обрабатываться наиболее доступными и наименее загруженным сервером:

Backhand byAge
Backhand byLoad

Когда кто нибудь попросит apache страницу заканчивающуюся на .php, сначала функция выбора кандидата byAge отсеет все сервера которые не отвечали в течении поледних 5 секунд, затем функция byLoad отсортирует этот список от менее загруженных к более загруженным. Так как больше не определенно функций выбора кандидата, обрабатывать запрос будет доверено первому серверу из списка т.е. наименее загруженному.

Встроенные функции выбора кандидата:

2.4 Настройка mod_backhand

[, ] — задает адрес на который сервер отправляет свое состояние. Может быть широковещательным, может уникальным. Разрешается использование нескольких адресов и/или сетей путем использования нескольких директив.
AcceptStats / — задает сеть из которой мы будем принимать информацию от других серверов.

2.5 Пример конфигурации

Давайте рассмотрим пример в котором у нас будет 5 серверов.
Один из них будет управляющим. Он не будет сам выполнять работу, а будет отдавать ее другим. Он будет иметь два интерфейса: eth0 — во внешний мир и eth1(ip — 195.5.3.183) — в сеть с кластером(ip — 192.168.10.1).
На остальные четыре сервера ложится основная нагрузка по обработке запросов. Они имеют ip адреса от 192.168.10.2 до 192.168.10.5.
Управляющий сервер будем называть Director, остальные www1 — www4.

Все системы имеют одинаковые настройки mod_backhand.

UnixSocketDir /usr/local/apache/backhand
MulticastStats 192.168.10.255:4445,1
AcceptStats 192.168.10.0/24

Director помимо всего прочего имеет зону покрытия:

backhand bySession
backhand byAge
backhand removeSelf
backhand byLoad

Все. Наш кластер с балансировкой нагрузки можно использовать.
Конечно если упадет Director то и весь наш кластер будет не доступен. Самое время рассмотреть Wackamole.

3. Wackamole

Wackamole позволяет сделать наш кластер высоко доступным.
Делается это за счет того что wackamole распределяет имеющийся пул виртуальных адресов между несколькими машинами. Таким образом если одна из машин «умрет» остальные тут же подхватят ее виртуальный IP, что позволяет быть каждому отдельному виртуальному IP быть доступным в любое время. Виртуальным IP называются потому что ни одна из машин не «владеют» этим адресом. Он может передоватся от одной к другой. В любой момент времени IP владеет не больше одной машины.

Это позволяет нам использовать множественные DNS RR записи, не беспокоясь о том что серверы могут быть недоступны. Если одна из машин «упадет» виртуальные IP адреса, которыми она владела, распределятся между другими машинами кластера.

3.1 Установка

Wackamole работает используя Spread toolkit. Взять его можно на http://www.pread.org/.
Собираем сначала Spread:

$ cd spread-src-3.17.1
$ ./configure —prefix=/usr/local/spread
$ make
# make install
Следует помнить, что для старта демона spread необходимо наличие пользователя и группы spread т.к. после старта он делает setuid, а также каталог /var/run/spread для chroot в целях безопасности.

А теперь wackamole:

$ cd ../wackamole-2.0.0
$ ./configure —prefix=/usr/local/wackamole —with-cppflags=-I/usr/local/spread/include
—with-ldflags=-L/usr/local/spread/lib
$ make all
# make install

Не забудьте, что вы должны обеспечить вызов динамических библиотек из /usr/local/spread/lib.

3.2 Настройка wackamole.conf

Spread — указывает где искать Spread демон. Значение 4803 означает что он будет искаться на локальной машине, на порту по умолчанию для spread.
SpreadRetryInterval — временной промежуток через который wackamole будет пытаться установить связь с Spread если она разорвалась.
Group — указывает Spread группу к которой wackamole присоединится. Эта группа должна быть своя для каждого кластера.
Control — указывает путь к Unix Domain сокету, используемый wackamole.
Arp-cache — указывает время через которое происходит обновление информации в ARP кэше.

Секция balance:
Interval — указывает длину раунда балансировки.
AcquisitionsPerRound — указывает количество виртуальных интерфейсов задействованных в раунде балансировки.

Секция VirtualInterfaces определяет все виртуальные интерфейсы, относящиеся к кластеру. Виртуальный интерфейс может иметь три вида:
1. ifname:ipaddr/mask
2. < ifname:ipaddr/mask >
3. <
ifname:ipaddr/mask
ifname:ipaddr/mask
.
>
ifname — имя интерфейса из ifconfig -a, без каких либо виртуальных номеров.

Директива Prefer позволяет указать ip адреса предпочитаемые для этой машины.

Секция Notify описывает каким машинам должны посылаться arp-spoof’ы когда IP адрес передается машине. IP адреса в секции задаются подобно секции VirtualInterfaces.

3.2 Пример настройки

У нас есть четыре Linux сервера с запущенным Apache, содержащим картинки для большого web сайта. У них ip от 192.168.100.183 до 192.168.100.186. Для них выделены 4 виртуальных IP, по которым и будет происходить доступ к картинкам — 192.168.100.200 — 192.168.100.203. Все они должны откликаться на images.example.com. Spread установлен на всех машинах и висит на порту 4803. Каждая машина имеет по одному интерфейсу — eth0. Default route для всех — 192.168.100.1
Wackamole.conf на каждой машине должен выглядеть следующим образом:
Spread = 4803
SpreadRetryInterval = 5s
Group = wack1
Control = /var/run/wack.it

4. А теперь все вместе

В заключение рассмотрим пример который объединяет все выше сказанное.
В нашем кластере будет участвовать 7 машин. Две из них будут:
1) распределять пул из четырех виртуальных IP (195.5.3.180 — 195.5.3.183) откликающихся на www.samplesite.com.
2) балансировать нагрузку между остальными пятью машинами, сами не выполняя запросов.
Остальные пять машин будут заниматься непосредственно предоставлением web ресурсов.

На первых двух машинах установлен и wackamole и apache+mod_backhand, шлюз по умалчанию 192.168.100.1, постоянные IP(привязанные к интерфейсу) — 192.168.100.101, 192.168.100.102. Файлы настроек для них выглядят следующим образом:
wackamole.conf:
Spread = 4803
SpreadRetryInterval = 5s
Group = wack1
Control = /var/run/wack.it

Notify <
eth0:192.168.100.1/32
arp-cache
>

UnixSocketDir /usr/local/apache/backhand
MulticastStats 192.168.100.255:4445,1
AcceptStats 192.168.100.0/24

backhand bySession
backhand byAge
backhand removeSelf
backhand byLoad

Остальные пять машин умеют ip 192.168.100.50 — 192.168.100.55. На них установлен только apache+mod_backhand cо следующими настройками:

UnixSocketDir /usr/local/apache/backhand
MulticastStats 192.168.100.255:4445,1
AcceptStats 192.168.100.0/24

Естественно все 5 машин должны предоставлять схожие web-ресурсы.

Все. Вам осталось, для проверки, только пощелкать кнопками выключения питания у некоторых компьютеров и посмотреть на результаты web-benchmark’а.

Читать еще:  Asp net linux
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector