Сделать так, чтобы сервис тянул большую нагрузку, — задача, с которой однажды сталкивается любой сисадмин. И лучше всего позаботиться о создании механизма отказоустойчивости заранее, до того, как важные узлы сети начнут выходить из строя или вовсе прекращать работу. В этой статье я расскажу о двух бесплатных и открытых решениях, которые позволят тебе создать кластер и не сойти при этом с ума от объемов документации.
Рассмотрим несколько возможных решений.
Я же хочу рассказать, как создать кластеризацию на уровне приложений с высокой отказоустойчивостью в сжатые сроки, с ограниченным бюджетом и без глубоких познаний в построении кластеров. Оптимальным решением, на мой взгляд, будет использование Corosync и Pacemaker. Эта связка бесплатна, ее легко освоить, и на развертывание не уйдет много времени.
Corosync — программный продукт, который позволяет создавать единый кластер из нескольких аппаратных или виртуальных серверов. Corosync отслеживает и передает состояние всех участников (нод) в кластере.
Этот продукт позволяет:
Pacemaker — менеджер ресурсов кластера. Он позволяет использовать службы и объекты в рамках одного кластера из двух или более нод. Вот вкратце его достоинства:
Идея заключается в том, что с помощью Corosync мы построим кластер, а следить за его состоянием будем с помощью Pacemaker.
Попробуем решить следующие задачи.
Перед началом любых работ настоятельно советую нарисовать схему взаимодействия узлов сети. Это упростит понимание и принципы взаимодействия и работы узлов.
Настала пора реализовать намеченные задачи. Я в своем примере использовал дистрибутив Red Hat Enterprise Linux 7. Ты можешь взять любой другой Linux, принципы построения кластера будут те же.
Для начала установим пакеты, которые требуются для нормальной работы ПО на обеих нодах (ставим пакеты на обе ноды).
$ sudo yum install -y python3-devel ruby-devel gcc libffi-devel libffi-dev fontconfig coreutils rubygems gcc-c++ wget
Следующую команду тоже нужно исполнять с правами рута, но если использовать sudo
, то скрипт установщика отработает неверно и не создастся пользователь hacluster.
$ yum install -y pacemaker pcs resource-agents corosync
Проверяем пользователя hacluster (Pacemaker) и меняем пароль:
$ sudo cat /etc/passwd | grep hacluster
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin
Авторизуемся на нодах под именем пользователя hacluster. Если выходит ошибка доступа к ноде (Error: Unable to communicate with ha-node1
), то, скорее всего, из-под Linux-УЗ наложены запреты на использование удаленных оболочек. Необходимо снять ограничение SUDO
на время установки.
Когда увидишь следующее, можешь двигаться дальше:
$ sudo -l
User may run the following commands on ha-node1:
(ALL) NOPASSWD: ALL
Теперь проверяем на обеих нодах установленные пакеты corosync, pacemaker и pcs, добавляем в автозагрузку и запускаем службу конфигурации pacemaker.
$ sudo yum info pacemaker pcs resource-agents corosync $ sudo systemctl enable pcsd.service; sudo systemctl start pcsd.service
Авторизуемся на нодах под пользователем hacluster:
$ sudo pcs cluster auth ha-node1 ha-node2 -u hacluster
Создаем кластер из двух нод:
$ sudo pcs cluster setup --force --name HACLUSTER ha-node1 ha-node2
Включаем и запускаем все кластеры на всех нодах:
$ sudo pcs cluster enable --all; sudo pcs cluster start --all
При использовании двух нод включаем stonith. Он нужен для «добивания» серверов, которые не смогли полностью завершить рабочие процессы. Игнорируем кворум.
$ sudo pcs property set stonith-enabled=true $ sudo pcs property set no-quorum-policy=ignore
Запрашиваем статус на обеих нодах ($ sudo pcs status
) и видим:
Cluster name: HACLUSTER
Stack: corosync
Current DC: ha-node2 (version 1.1.18-11.el7_5.3-2b07d5c5a9) — partition with quorum
Last updated: Wed Oct 17 13:12:00 2018
Last change: Wed Oct 17 13:10:47 2018 by root via cibadmin on ha-node1
2 nodes configured
0 resources configured
Online: [ ha-node1 ha-node2 ]
No resources
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Добавляем виртуальный сетевой адрес и nginx как ресурсы (надеюсь, ты помнишь про тайм-аут в 30 секунд) и запрашиваем статус кластера.
$ sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=10.10.10.1 cidr_netmask=24 op monitor interval=30s $ sudo pcs resource create nginx ocf:heartbeat:nginx op monitor interval=30s timeout=60s $ sudo pcs status
Full list of resources:
virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node1
nginx (ocf::heartbeat:nginx): Started ha-node1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Выключаем первую ноду на несколько минут. Запрашиваем статус второй ноды, чтобы убедиться, что первая недоступна.
Full list of resources:
virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node2
nginx (ocf::heartbeat:nginx): Started ha-node2
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Как только первая нода будет доступна, вручную переключаем на нее виртуальный IP и nginx командой
$ sudo pcs resource move virtual_ip ha-node1; sudo pcs resource move nginx ha-node1
Осталось запросить статус кластера и убедиться, что адрес присвоен первой ноде.
$ sudo pcs resource show
virtual_ip (ocf::heartbeat:IPaddr2): Started ha-node1
Список всех поддерживаемых сервисов можно посмотреть c помощью команды $ sudo crm_resource --list-agents ocf
.
На обеих нодах должен быть установлен и настроен nginx. Подключаемся к кластеру и создаем следующий ресурс:
$ sudo pcs cluster auth ha-node1 ha-node2 -u hacluster $ sudo pcs resource create nginx ocf:heartbeat:nginx op monitor interval=30s timeout=30s
Здесь мы создаем ресурс из службы, которая будет каждые 30 секунд проверяться, и в случае минутного тайм-аута ресурс будет включен на другой ноде.
Чтобы удалить ноду из кластера, воспользуйся командой $ sudo pcs cluster node remove <node_name>
.
Мы построили простой, но очень отказоустойчивый кластер для фронтенда приложения. Помни, что построение кластера — задача творческая и все зависит только от твоих смекалки и воображения. Невыполнимых задач для системного администратора не бывает!
Читайте также
Последние новости