Green-sell.info

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

Кластеризация серверов linux

Кластеризация серверов 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 должна работать на одном процессоре. Запуск такой комплексной программы будет выглядеть так:

Читать еще:  Установка red hat enterprise linux server

Кластеризация серверов 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.

Развертывание отказоустойчивого кластера Elasticsearch в Linux

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

Статья является переводом и адаптацией англоязычной статьи.

Что такое кластер Elasticsearch

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

Узлы в кластере Elasticsearch имеют различные роли:

  • Узел данных (Data node) хранит данные и выполняет связанные с ними операции, такие как поиск и агрегация;
  • Главный узел (Master node) отвечает за действия по управлению и настройке всего кластера, такие как добавление и удаление узлов;
  • Клиентский узел (Client node) перенаправляет запросы кластера на главный узел, а запросы, связанные с данными, на узлы данных;
  • Выделенный узел вставки данных (Ingest node) служит для предварительной обработки документов перед индексацией.

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

После первоначальной установки Elasticsearch, формируется новый одноузловой кластер под названием «elasticsearch». В этой статье мы познакомимся с тем, как его настроить для присоединения к кластеру.

Установка кластера Elasticsearch

Как правило, существует несколько способов настройки кластера Elasticsearch. Для автоматизации процесса можно использовать инструмент управления конфигурациями, например, Puppet или Ansible. В данной статье мы рассмотрим, как вручную настроить кластер, состоящий из одного главного узла и двух узлов данных в Ubuntu 16.04, 18.04 или Debian 9.

Установка Java

Elasticsearch реализован с использованием Java и требует для запуска Java 8 или Java 9. Первым делом необходимо установить Java на всех узлах кластера. На всех узлах Elasticsearch в кластере должна быть установлена одна и та же версия Java.

Повторите следующие шаги на всех серверах кластера.

Проверьте, что установлена корректная версия Java. Вы должны увидеть подобный ответ:

Установка Elasticsearch

Следующий шаг — установка Elasticsearch. Повторите указанные ниже шаги на всех серверах.

Добавьте ключ цифровой подписи Elastic, чтобы загружаемый пакет был принят системой без предупреждения:

Для Debian установите пакет apt-transport-https :

Следующим шагом добавьте определение репозитория в систему:

Осталось только обновить репозитории и установить Elasticsearch:

Настройка кластера Elasticsearch с одним главным узлом и двумя узлами данных

Следующий шаг — настройка кластера таким образом, чтобы узлы могли подключаться и устанавливать соединение друг с другом.

Для каждого узла откройте файл конфигурации Elasticsearch:

Этот файл довольно длинный и содержит ряд настроек для разных разделов. Просмотрите файл и измените его содержимое для каждого узла, как указано далее.

es-node-1:

es-node-2:

es-node-3:

Запуск кластера Elasticsearch

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

На каждом сервере выполните следующую команду:

Если все настроено правильно, кластер Elasticsearch должен запуститься. Чтобы убедиться, что все работает корректно, запросите Elasticsearch с любого из узлов:

Ответ должен вернуть информацию о кластере и его узлах:

Дополнительные настройки для обеспечения высокой доступности и производительности кластера Elasticsearch

Предотвращение ситуации split brain

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

Чтобы избежать данной ситуации, необходимо изменить директиву discovery.zen.minimum_master_nodes в файле конфигурации Elasticsearch, которая определяет, сколько узлов должно объединиться друг с другом (создать кворум) для выбора главного узла.

Чтобы определить это число, рекомендуется использовать следующую формулу: ОКРУГЛЕНИЕ_ВНИЗ [N / 2] + 1, где N — это общее число главных узлов в кластере.

Например, для кластера с тремя узлами:

Настройка размера JVM heap

Чтобы снизить риск появления ошибки в работе кластера Elasticsearch по причине недостаточности ресурсов, необходимо изменить размер кучи (JVM heap), заданный по умолчанию (минимум/максимум 1 Гбайт).

Как правило, максимальный размер кучи должен составлять не более 50% оперативной памяти, и не более 32 Гбайт (из-за неэффективности указателя Java в больших кучах). Elastic также рекомендует, чтобы значение для максимального и минимального размера было одинаковым.

Эти значения можно настроить с помощью параметров Xmx и Xms в файле jvm.options :

Отключение подкачки

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

Чтобы не использовать подкачку, можно либо полностью отключить ее (рекомендуется, если Elasticsearch — единственная служба, работающая на сервере), либо использовать mlockall для блокировки оперативной памяти процесса Elasticsearch.

Для этого откройте файл конфигурации Elasticsearch на всех узлах кластера:

Затем откройте файл /etc/default/elasticsearch :

Настройка виртуальной памяти

Чтобы избежать ситуации, при которой виртуальной памяти становится недостаточно, увеличьте количество ограничений на счетчики mmap :

Обновите соответствующие настройки:

Увеличение предела количества дескрипторов открытых файлов

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

Рекомендуемое значение для этого параметра — 65536 и выше. Настройки по умолчанию уже заданы в соответствии с этим требованием, но, конечно, их можно уточнить.

API кластера Elasticsearch

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

Далее приведен список полезных методов API, которые часто полезны при администрировании кластера Elasticsearch.

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

Данный API можно использовать для просмотра общей информации о кластере и оценки его работоспособности:

Проверка состояния кластера

Данный API можно использовать для просмотра подробного отчета о состоянии всего кластера. Результаты можно отфильтровать, указав нужные параметры в URL вызова.

Получение статистики кластера

Чрезвычайно полезный метод API для мониторинга показателей производительности всего кластера:

Статистика узлов

Используйте данный метод API, если нужно проверить показатели для определенных узлов в кластере. Вы можете просмотреть информацию обо всех узлах, конкретном узле или запросить просмотр статистики по индексу или ОС/процессу.

Для конктретного узла:

Статистика только по индексу:

Больше методов API можно найти в официальной документации API кластера.

Заключение

Из статьи вы узнали как настроить кластер Elasticsearch и получили ряд рекомендаций по настройке его для продуктового использования. Тем не менее, очевидно, что практически невозможно описать универсальное решение, подходящее для каждой отдельной среды и варианта использования.

Более подробные инструкции можно найти в официальной документации и на основании опыта использования данного продукта.

Как установить MySQL Cluster на Ubuntu 16.04

На этой странице

  1. Шаг 1 – Установка и настройка узла управления
  2. Шаг 2 – Установка и настройка узла данных
  3. Шаг 3 – Установка и настройка SQL Node
  4. Шаг 4 – Тестирование
  5. Шаг 5 – Дополнительные советы
  6. Справка

M ySQL Cluster представляет собой технологию для обеспечения высокой доступности для баз данных MySQL. Он использует NDB (Network DataBase) или NDB кластер в качестве двигателя для хранения базы данных. MySQL Cluster разработан как мульти-мастер ACID архитектуры без единой точки отказа, он использует автоматический шардинг (секционирование) для масштабирования чтения и записи процессов.

Для реализации кластера MySQL, нам нужно 3 различных типов узлов:

  • Узел управления ( ndb_mgmd )
    • Используется для мониторинга и настройки кластера.
  • Узел данных ( NDBD )
    • Эти узлы используются для хранения данных, они обеспечивают автоматический шардинг и может обрабатывать репликацию.
  • SQL Node ( mysqld )
    • интерфейсы MySQL сервер для подключения ко всем узлам.

На этом уроке мы покажем вам, как установить “MySQL Cluster” на Ubuntu 16.04 LTS (Xenial Xerus).

Предпосылки

  • 4 узла с сервером Ubuntu 16.04
  1. 192.168.2.21 – управление узлами
  2. 192.168.2.22 – узел данных
  3. 192.168.2.23 – узел данных
  4. 192.168.2.24 – SQL-узел
  • Root привилегии на узлах.

Шаг 1 – Установка и настройка узла управления

На этом шаге мы установим узел управления для нашего кластера с IP адресом 192.168.2.21. Мы устанавливаем программное обеспечение кластера MySQL и настроем его в качестве узла управления для кластера.

Войти на узел управления с SSH:

A. Установка управление узла кластера MySQL

Откроем сайт кластера MySQL здесь и выберем опцию ” Linux-generic” и загрузим 64-битный пакет, нажав кнопку ” Download“.

Загрузим пакет кластера MySQL с помощью wget и извлечем его.

Переименуем директорию для MySQL:

Перейдем в каталог mysql и скопируем 2 двоичных файла для команды управления кластером ” ndb_mgmd и ndb_mgm ‘к директории ‘/usr/local/bin/’, а затем сделаем их исполняемым с помощью команды chmod.

B. Настройка MySQL Cluster Node Management

Настройте узел управления путем создания нового каталога ‘MySQL-cluster” для конфигурационных файлов в каталоге ‘/var/lib/’.

Создание каталог ‘MySQL-cluster” и создайте новую конфигурацию “config.ini” в каталоге:

Вставьте ниже конфигурацию:

Изменение IP-адреса ndb_mgmd для управления, NDBD для узла данных и mysqld для узла SQL, чтобы соответствовать вашим настройкам.

Сохраните файл и выйдите.

Затем запустите процесс узла управления с командой ниже:

Запускаться будет во время загрузки, добавив команду ‘/etc/rc.local ‘:

Вы увидите результат:

MySQL Cluster Management Server MySQL-5.6.31 NDB-7.4.12

Проверьте узел управления с помощью следующей команды:

Шаг 2 – Установка и настройка узла данных

На этом шаге мы установим программное обеспечение кластера MySQL и настроем его в качестве узла данных. Мы будем использовать 2 сервера Ubuntu 16.04 в качестве узлов данных: узел с IP-адресом 192.168.2.22 и узел данных с IP-адреса 192.168.2.23.

Войдите на первый сервер данных с помощью SSH:

A. Установите MySQL Cluster на узле

Перед тем , как установить программное обеспечение кластера MySQL, мы должны установить новый пакет ‘ libaio1‘ и создадим нового пользователя и группу MySQL. Выполните команду ниже в качестве root:

Теперь загрузите пакет кластера MySQL ‘Linux-Generic ‘, разархивируйте и переименуйте каталог в MySQL.

Переместите каталог ‘MySQL’ в ‘/usr/local/’ и перейдите в этот каталог.

Запустите скрипт для создания системных баз данных:

Если нет ошибок, скопируйте файл службы MySQL в каталог ‘/etc/init.d‘ и добавьте MySQL сценарий запуска для запуска во время загрузки.

Затем переместите все MySQL двоичные команды в директорию ‘/usr/local/bin‘ и создайте новую символическую ссылку.

Изменение владельца каталога mysql в каталоге на пользователя root и группу MySQL, а также изменить каталог данных в MySQL в качестве владельца.

B. Настройка MySQL Cluster Data Node

Создание новый конфигурационный файл MySQL ‘ my.cnf ‘ с помощью vim:

Вставьте конфигурацию в файл:

Сохраните и выйдите.

Создайте новый каталог для узла данных и измените владельца на пользователя MySQL.

C. Запуск MySQL на узле Data

Запустите службу MySQL с командой ниже:

Убедитесь, что нет никакой ошибки, и результаты приведены ниже (data-node2):

MySQL на узле данных запускается. Теперь вы можете установить пароль MySQL с помощью следующей команды:

или получить доступ к оболочке MySQL.

Примечание :
Повторить этот шаг на “data-node2” IP – адрес сервера 192.168.2.23.

Шаг 3 – Установка и настройка SQL Node

На этом этапе мы будем устанавливать программное обеспечение кластера MySQL и настроем его в качестве SQL Node. Этот узел используется для доступа к базам данных на узлах данных. Процесс установки такой же, как узел данных, но мы не должны запускать службу NDBD в SQL Node.

Войдите в SQL Node с SSH:

A. Установите MySQL Cluster на узле SQL

Установите пакет libaio1 и создайте нового пользователя и группу MySQL:

Загрузите пакет MySQL Cluster с сайта, разархивируйте и переименуйте его:

Переместите каталог MySQL:

Запустите скрипт mysql_install_db:

Скопируйте файл службы и добавьте его в автозагрузку:

Переместите все бинарные файлы MySQL на каталог ‘/usr/local/bin‘:

Измените владельца всех файлов и директории:

B. Настройка MySQL Cluster Node SQL

Создайте новый конфигурационный файл my.cnf с помощью vim:

Вставьте конфигурацию в файл:

Сохраните и выйдите.

C. Запустите SQL Node

Запустите узел SQL, запустив службу MySQL с помощью команды systemctl:

SQL Узел запускается, теперь вы можете настроить пароль для MySQL.

Шаг 4 – Тестирование

Тест, чтобы создать новую базу данных для узла SQL.

Убедитесь, что база данных реплицируется на серверах данных узлов.
И когда узел выключен, другой узел будет обрабатывать соединение с узлом SQL.

Проверка состояния кластера из узла управления:

Шаг 5 – Дополнительные советы

Выполнение безопасную перезагрузку и выключения кластера.

Перейдите к узлу управления кластером и введите приведенную ниже команду для выключения кластера:

Команда завершит работу всех услуг NDB по узлам данных.

Если вы хотите запустить кластер снова, вы можете запустить команду ниже на узле управления:

Выполните команду ниже на всех узлах данных:

Затем запустите MySQL службы на узле (ы) SQL:

Теперь ваш MySQL Cluster работает снова.

Справка

  • http://dev.mysql.com/downloads/cluster/
  • https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Предложение от 8host.com

Настройка кластера Serf на серверах Ubuntu

Serf – это отказоустойчивый децентрализованный инструмент для обнаружения и оркестровки сервисов. Serf позволяет вызвать любое событие в кластере систем и настроить мониторинг. Этот инструмент основан на протоколе децентрализованной коммуникации Gossip. Чтобы подключиться к кластеру Serf, ноду необходимо заранее знать адрес одного из нодов кластера. После подключения к кластеру новый нод получает все необходимые для работы данные. Благодаря протоколу Gossip кластер Serf очень прост в настройке.

Кратко о нодах кластера

Serf предназначен для кластеризации нескольких VPS и совместим с системами Mac OS, windows, nix. Данное руководство поможет настроить кластер Serf из двух серверов Ubuntu.

Эти серверы будут условно называться SerfNode1 и SerfNode2. Для настройки кластера нужны IP-адреса этих серверов. В данном руководстве используются условные адреса:

Установка Serf

Примечание: Этот раздел нужно выполнить на всех серверах кластера, в данном случае – на SerfNode1 и SerfNode2.

Загрузите пакеты Serf:

Установите инструмент unzip, если он не был установлен ранее:

apt-get install unzip

Распакуйте полученный архив Serf:

Добавьте Serf в каталог bin:

mv serf /usr/local/bin

Создание кластера

Запустите первый нод кластера Serf на сервере SerfNode1.

serf agent -node=**SerfNode1** -bind=1.1.1.1:7496

На экране появится следующий результат:

==> Starting Serf agent.
==> Starting Serf agent RPC.
==> Serf agent running!
Node name: ‘**SerfNode1**’
Bind addr: ‘1.1.1.1:7496’
RPC addr: ‘127.0.0.1:7373’
Encrypted: false
Snapshot: false
Profile: lan
==> Log data will now stream in as it occurs:
2014/01/18 21:57:57 [INFO] Serf agent starting
2014/01/18 21:57:57 [WARN] Binding to public address without encryption!
2014/01/18 21:57:57 [INFO] serf: EventMemberJoin: **SerfNode1** 1.1.1.1
2014/01/18 21:57:58 [INFO] agent: Received event: member-join

Примечание: Параметр Node name задаёт имя нода, а Bind – IP-адрес и порт, к которым нужно подключиться.

Перейдите на сервер SerfNode2 и запустите Serf agent в фоновом режиме.

serf agent -node=**SerfNode2** -bind=2.2.2.2:7497 -rpc-addr=127.0.0.1:7373 &

Примечание: Амперсанд (&) запускает команду в фоновом режиме.

Подключите SerfNode2 к SerfNode1:

serf join 1.1.1.1:7496

На экране появится вывод:

.
2014/01/18 22:03:04 [INFO] serf: EventMemberJoin: **SerfNode2** 2.2.2.2
2014/01/18 22:03:05 [INFO] agent: Received event: member-join1922
.

Кластер Serf готов. Чтобы добавить в кластер дополнительные ноды, просто повторите инструкции, предназначенные для SerfNode2. Чтобы подключиться к кластеру Serf, нужно подключить серверы к запущенным агентам Serf. Протокол Gossip автоматически уведомляет всех агентов Serf о появлении нового VPS в кластере.

События и управление событиями

Serf позволяет управлять событиями в кластере. Для примера попробуйте отправить событие.

Отправка простого пользовательского события

Выполните следующую команду на сервере SerfNode2:

serf event hello

На сервере SerfNode1 появится:

2014/01/16 15:48:05 [INFO] agent: Received event: user-event: hello

Как видите, всё работает очень просто. Теперь попробуйте настроить пользовательский обработчик событий.

Создание обработчика событий

Serf может вызывать пользовательские события в кластере, чтобы инициировать такие задачи, как развертывание, обновление безопасности конфигурации системы и т.д. Любое событие на машине Linux, которое можно добавить в скрипт, может быть вызвано при помощи Serf.

Рассмотрим простой пример.

На сервере SerfNode1 остановите Serf agent (клавиши Ctrl + C). Вывод выглядит так:

2014/01/16 15:58:54 [INFO] agent: requesting serf shutdown
2014/01/16 15:58:54 [WARN] Shutdown without a Leave
2014/01/16 15:58:54 [INFO] agent: shutdown complete

Теперь создайте пользовательский сценарий событий, который будет записывать фразу «written to file» в текстовый файл в каталоге /usr/src. Скрипт будет запускаться, когда пользователь отправляет событие «write».

Для начала нужно создать обработчик событий. Это может быть исполняемый файл; в данном случае используется файл bash.

Откройте каталог /usr/src:

Откройте текстовый редактор nano:

Используйте для обработчика событий такой код:

Примечание: Параметр $ задаёт имя отправляемого события. Обратите внимание на оператор if, который позволяет задавать различные события.

Чтобы закрыть nano и сохранить файл, нажмите Ctrl + X, Y и Enter.

Сделайте файл исполняемым:

chmod +x handler.sh

Перезапустите Serf agent при помощи нового обработчика событий:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496

Дополнительные рекомендации

Каждый отдельный Serf agent может использовать индивидуального обработчика событий. Чтобы добавить пользовательский обработчик событий для сервера SerfNode2, просто повторите инструкции предыдущего раздела на этом сервере. Можно даже просто скопировать готовый скрипт обработки событий на сервер SerfNode2 в каталог /usr/src. Выполните следующие команды:

  • На сервере SerfNode2 выйдите из кластера Serf:
  • Перейдите в каталог /usr/src:
  • Запустите Serf agent в фоновом режиме при помощи пользовательского обработчика событий:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 &

Тестирование обработчика событий

Снова подключите SerfNode2 к SerfNode1.

serf join 1.1.1.1:7496

serf event write

На сервере SerfNode1 перейдите в каталог /usr/src:

В каталоге должен быть файл test.txt. Этот файл был создан во время запуска события Serf на сервере SerfNode2.

Настройка мониторинга свободной памяти

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

На сервере SerfNode1 нажмите Ctrl+C, чтобы покинуть кластер Serf.

Затем откройте каталог /usr/src:

Откройте скрипт handler.sh:

Замените код скрипта следующим кодом:

#!/bin/bash
if [ «$» = «mem» ]; then
serf event memresponse «$(awk ‘/MemTotal/ ‘ /proc/meminfo) MB from $(wget -qO- http://ipecho.net/plain ; echo) at $(date)»
fi

Чтобы закрыть nano и сохранить файл, нажмите Ctrl + X, Y и Enter.

Этот скрипт будет запускать событие Serf, которое будет возвращать объём свободной памяти на виртуальном сервере в таком формате:

490 MB from 1.1.1.1 at Sun Jan 19 00:37:22 EST 2014

На сервере SerfNode2 закройте кластер Serf:

Откройте каталог /usr/src:

Создайте скрипт обработчика:

Вставьте в файл следующий код:

#!/bin/bash
if [ «$» = «memresponse» ]; then
cat >> mem.txt
echo «n» >> mem.txt
fi

Чтобы закрыть nano и сохранить файл, нажмите Ctrl + X, Y и Enter.

Сделайте скрипт исполняемым.

chmod +x handler.sh

Запустите агент на сервере SerfNode1:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496

Запустите агент на сервере SerfNode2:

serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 &

Снова подключите сервер SerfNode2 к SerfNode1:

serf join 1.1.1.1:7496

Запустите событие mem:

Затем проверьте файл mem.txt:

Теперь на сервере есть инструмент для мониторинга свободной памяти, который можно распространить между другими виртуальными серверами.

Переменные событий Serf

Ниже приведён список переменных, которые могут пригодиться во время написания скрипта обработчика событий.

Примечание: Также о переменных можно прочитать на сайте Serf.

  • SERF_EVENT: определяет тип события (member-join, member-leave, member-failed или user).
  • SERF_SELF_NAME: задаёт имя нода, который использует обработчик событий.
  • SERF_SELF_ROLE: роль нода, использующего обработчик событий.
  • SERF_USER_EVENT: определяет имя пользовательского события, если тип события в SERF_EVENT – user.
  • SERF_USER_LTIME: логические часы пользовательского события, если SERF_EVENT – user.

После запуска события используется следующий шаблон команды:

serf event [SERF_EVENT_NAME] [PAYLOAD]

Примечание: PAYLOAD — полезная нагрузка, интерпретируется скриптом как стандартный ввод.

При запуске пользовательского события нужно использовать переменную SERF_USER_EVENT вместо SERF_EVENT.

Заключение

Serf – простой и быстрый способ создания событий в кластере машин. Кроме того, инструмент Serf легковесный и устойчивый к ошибкам. Serf можно использовать для настройки системы, развертывания, обновления безопасности, транслирования сообщений и мониторинга серверов. Благодаря гибкости настроек Serf можно адаптировать для решения широкого круга задач.

Более подробную информацию об этом инструменте можно найти на официальном сайте.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector