Поиск по сайту:

Как настроить и поддерживать высокую доступность/кластеризацию в Linux


Высокая доступность (HA) просто означает способность системы работать непрерывно и без сбоев в течение длительного периода времени. Решения высокой доступности могут быть реализованы с использованием аппаратного и/или программного обеспечения, и одним из распространенных решений реализации высокой доступности является кластеризация.

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

Кластеры делятся на четыре основных типа:

  • Хранилище: обеспечивает согласованный образ файловой системы на всех серверах в кластере, позволяя серверам одновременно читать и записывать в одну общую файловую систему.
  • Высокая доступность: устранение единых точек отказа и переключение служб с одного узла кластера на другой в случае, если узел выйдет из строя.
  • Балансировка нагрузки: отправляйте запросы сетевых служб на несколько узлов кластера, чтобы сбалансировать нагрузку запросов между узлами кластера.
  • Высокая производительность: выполняйте параллельную или параллельную обработку, помогая тем самым повысить производительность приложений.

Еще одним широко используемым решением для обеспечения HA является репликация (в частности, репликация данных). Репликация — это процесс, с помощью которого одна или несколько (вторичных) баз данных могут синхронизироваться с одной первичной (или главной) базой данных.

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

  • Узел 1: 192.168.10.10
  • Узел 2: 192.168.10.11

В этой статье мы продемонстрируем основы развертывания, настройки и поддержания высокой доступности/кластеризации в Ubuntu 16.04/18.04 и CentOS 7. Мы покажем, как добавить HTTP-сервис Nginx в кластер.

Настройка локальных настроек DNS на каждом сервере

Чтобы два сервера могли обмениваться данными друг с другом, нам необходимо настроить соответствующие локальные параметры DNS в файле /etc/hosts на обоих серверах.

Откройте и отредактируйте файл с помощью вашего любимого редактора командной строки.

sudo vim /etc/hosts  

Добавьте следующие записи с фактическими IP-адресами ваших серверов.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Сохраните изменения и закройте файл.

Установка веб-сервера Nginx

Теперь установите веб-сервер Nginx, используя следующие команды.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

После завершения установки запустите службу Nginx и включите ее автоматический запуск во время загрузки, а затем проверьте, работает ли она, с помощью команды systemctl.
В Ubuntu служба должна запускаться автоматически сразу после завершения предварительной настройки пакета, ее можно просто включить.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

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

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Установка и настройка Corosync и Pacemaker

Далее нам нужно установить Pacemaker, Corosync и Pcs на каждом узле следующим образом.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

После завершения установки убедитесь, что демон pcs запущен на обоих серверах.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

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

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

sudo passwd hacluster

Затем на одном из серверов (Node1) выполните следующую команду, чтобы настроить аутентификацию, необходимую для pcs.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Теперь создайте кластер и заполните его несколькими узлами (имя кластера не может превышать 15 символов, в этом примере мы использовали examplecluster) на сервере Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Теперь включите кластер при загрузке и запустите службу.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Теперь проверьте, запущена ли служба кластера, используя следующую команду.

sudo pcs status
OR
sudo crm_mon -1

Из вывода приведенной выше команды видно, что имеется предупреждение об отсутствии устройств STONITH, однако STONITH все еще включен в кластере. Кроме того, не настроены ресурсы/службы кластера.

Настройка параметров кластера

Первый вариант — отключить STONITH (или Shoot The Other Node In The Head), реализацию ограждения в Pacemaker.

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

Чтобы отключить STONITH, выполните следующую команду:

sudo pcs property set stonith-enabled=false

Затем также проигнорируйте политику Quorum, выполнив следующую команду:

sudo pcs property set no-quorum-policy=ignore

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

sudo pcs property list

Добавление службы ресурсов/кластеров

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

В этом случае он будет использоваться для поддержки аварийного переключения в кластере высокой доступности. Имейте в виду, что плавающие IP-адреса предназначены не только для аварийного переключения, у них есть несколько других вариантов использования. Нам необходимо настроить кластер таким образом, чтобы только активный член кластера «владел» плавающим IP-адресом или реагировал на него в любой момент времени.

Мы добавим два ресурса кластера: ресурс плавающего IP-адреса под названием «floating_ip» и ресурс для веб-сервера Nginx под названием «http_server».

Сначала начните с добавления float_ip следующим образом. В этом примере наш плавающий IP-адрес — 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

где :

  • floating_ip: имя службы.
  • “ocf:heartbeat:IPaddr2”: сообщает Pacemaker, какой сценарий использовать, в данном случае IPaddr2, в каком пространстве имен он находится (pacemaker) и какому стандарту он соответствует ocf.
  • «op Monitor Interval=60s»: предписывает Pacemaker проверять работоспособность этой службы каждую минуту, вызывая действие мониторинга агента.

Затем добавьте второй ресурс с именем http_server. В данном случае агент ресурсов службы — ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

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

sudo pcs status resources

Глядя на выходные данные команды, можно увидеть два добавленных ресурса: “floating_ip” и “http_server”. Служба float_ip отключена, поскольку основной узел работает.

Если в вашей системе включен брандмауэр, вам необходимо разрешить весь трафик Nginx и всем службам высокой доступности через брандмауэр для правильной связи между узлами:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Тестирование высокой доступности/кластеризации

Последний и важный шаг — проверить, работает ли наша настройка высокой доступности. Откройте веб-браузер и перейдите по адресу 192.168.10.20. Вы должны увидеть страницу Nginx по умолчанию с node2.example.com, как показано на снимке экрана.

Чтобы смоделировать сбой, выполните следующую команду, чтобы остановить кластер на node2.example.com.

sudo pcs cluster stop http_server

Затем перезагрузите страницу по адресу 192.168.10.20. Теперь вы должны получить доступ к веб-странице Nginx по умолчанию с node1.example.com.

В качестве альтернативы вы можете смоделировать ошибку, указав службе остановиться напрямую, не останавливая кластер на каком-либо узле, используя следующую команду на одном из узлов:

 
sudo crm_resource --resource http_server --force-stop 

Затем вам нужно запустить crm_mon в интерактивном режиме (по умолчанию), в течение интервала мониторинга в 2 минуты вы сможете увидеть уведомление кластера о сбое http_server и переместить его. его на другой узел.

Для эффективной работы кластерных служб вам может потребоваться установить некоторые ограничения. Список всех команд использования можно найти на странице руководства pcs (man pcs).

Для получения дополнительной информации о Corosync и Pacemaker посетите: https://clusterlabs.org/

Краткое содержание

В этом руководстве мы показали основы развертывания, настройки и поддержания высокой доступности/кластеризации/репликации в Ubuntu 16.04/18.04 и CentOS 7. Мы продемонстрировали, как добавить HTTP-сервис Nginx в кластер. Если у вас есть какие-либо мысли или вопросы, воспользуйтесь формой обратной связи ниже.