- PVSM.RU - https://www.pvsm.ru -
Использование среды виртуализации Proxmox, а именно контейнеров OpenVZ, для создания виртуального ни для кого не станет новостью. Сервер, арендованный на площадке Hetzner, достаточно долго успешно справлялся со своими обязанностями.
Но время шло, количество данных увеличивалось, клиенты множились, рос LA…Арендован новый сервер, установлен и настроен Proxmox, администратор рвется в бой настроить кластер, чтобы мигрировать нагруженные контейнеры на новый сервер. В google найдены залежи инструкций, да и на wiki самого проекта Proxmox есть необходимая информация.
Сервера находятся в разных подсетях. Proxmox использует для синхронизации настроек узлов кластера corosync. При добавлении узла в кластер — ошибка:
Waiting for quorum… Timed-out waiting for cluster [FAILED]
Администратор в панике

Настроить синхронизацию узлов Proxmox, расположенных в любом датацентре, и имеющих внешний IP-адрес. Организовать «кластер» в понимании Proxmox.
Итак, что у нас есть:
Выясняем, что синхронизация не работает из-за того, что мультикаст-запросы хоть и отправляются, но режутся оборудованием. Узлы просто не видят друг друга. Также для синхронизации пытаются использоваться IP-адреса доступных сетевых интерфейсов. Т.е. или внешний IP, или IP подсети для ВМ.
Мы заставим мультикаст-запросы, которые отправляет corosync, ходить внутри одной сети для всех узлов кластера. Поднимем свою частную подсеть с OpenVPN и маршрутизацией.
Для начала нужно откатить все изменения, внесенные неудачной попыткой добавить узел в кластер. Предполагается, что на «node2» не было настроено еще ничего, и не было ВМ.
pvecm nodes
service pve-cluster restart
pvecm expected 1
pvecm delnode node2
pvecm cman restart
service pve-cluster stop
service cman stop
rm /etc/cluster/cluster.conf
rm -rf /var/lib/pve-cluster
rm -rf /var/lib/corosync
service pve-cluster start
service cman start
Для некоторой унификации настроек согласуем следующие параметры для сетей внутри нашего будущего кластера:
Я не буду сильно вдаваться в настройку OpenVPN, т.к. статей написано много. В том числе и на хабре [2]. Опишу только основные особенности и настройки:
apt-get install openvpn
# Для работы мульткаста используем tap
dev tap
proto udp
# Сделаем буфер UDP побольше
sndbuf 393216
rcvbuf 393216
# Подсеть сервера
server 10.0.0.0 255.255.255.0
# Пробросим мультакаст-запросы на подсеть этого узла
# corosync иногда любит использовать адрес vmbr0
route 224.0.0.0 240.0.0.0 10.1.0.1
# Пробросим трафик до подсетей узлов через VPN
route 10.2.0.0 255.255.255.0 10.0.0.2
route 10.3.0.0 255.255.255.0 10.0.0.3
# и так для каждого нового узла...
# Настройки для клиентов-узлов
client-config-dir clients
client-to-client
/etc/openvpn/clients/node2:
# На узле 1 — обычные ВМ
push "route 10.1.0.0 255.255.0.0"
# А, например, на узле 3 — системные ВМ
# push "route 10.3.0.0 255.255.0.0"
# multicast — через VPN на master-узел
push "route 224.0.0.0 240.0.0.0"
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DOMAIN hosting.lan"
push "sndbuf 393216"
push "rcvbuf 393216"
# Для tap-устройства — IP + NetMask
ifconfig-push 10.0.0.2 255.255.0.0
service openvpn restart
Еще нужно будет поставить пакет resolvconf. В отличие от master-узла. Иначе магия с доменами для внутренней сети может не сработать. Мне так же пришлось скопировать файлик original в tail внутри каталога /etc/resolvconf/resolv.conf.d/. Иначе name-сервера от hetzher терялись.
В зависимости от настроек сервера, создаем файл настроек для клиента, в котором должны быть следующие параметры:
/etc/openvpn/master.conf:
client
dev tap
proto udp
remote <внешний IP или домен master>
service openvpn restart
xxxx:xxx:xxx:xxxx::2 ipv6.node1.example.com ipv6.node1
#
# VPN
10.0.0.1 node1 master cluster
10.0.0.2 node2
# и так для каждого нового узла…
Указывая отдельно IP-адреса из подсети VPN для узлов, мы форсируем их использование, т.к. сервисы Proxmox пользуются короткими доменными именами.
<cman keyfile="/var/lib/pve-cluster/corosync.authkey">
<multicast addr="224.0.2.1"/>
</cman>
Если файл не может сохраниться, то пробуем перезапустить сервис:
cd /etc
service pve-cluster restart
и снова пытаемся редактировать.
После редактирования:
cd /etc
service pve-cluster restart
service cman restart
pvecm status
В итоге должно быть видно следующее:
…
Node ID: 1
Multicast addresses: 224.0.2.1
Node addresses: 10.0.0.1
Этих настроек уже должно быть достаточно, чтобы кластер заработал. Добавляем узел в кластер по инструкции из wiki:
pvecm add master
Отвечаем на вопросы, ждем. Видим, что кворум достигнут.
pvecm status
…
Node ID: 2
Multicast addresses: 224.0.2.1
Node addresses: 10.0.0.2
Увы, не всё так хорошо, как хотелось бы.
habrahabr.ru/post/233971/ [2] — Руководство по установке и настройке OpenVPN
pve.proxmox.com/wiki/Proxmox_VE_2.0_Cluster [3]
pve.proxmox.com/wiki/Multicast_notes [4]
www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet [5]
Автор: SergeyD
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/84038
Ссылки в тексте:
[1] хостинга: https://www.reg.ru/?rlink=reflink-717
[2] хабре: http://habrahabr.ru/post/233971/
[3] pve.proxmox.com/wiki/Proxmox_VE_2.0_Cluster: https://pve.proxmox.com/wiki/Proxmox_VE_2.0_Cluster
[4] pve.proxmox.com/wiki/Multicast_notes: https://pve.proxmox.com/wiki/Multicast_notes
[5] www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet: http://www.nedproductions.biz/wiki/configuring-a-proxmox-ve-2.x-cluster-running-over-an-openvpn-intranet
[6] Источник: http://habrahabr.ru/post/251541/
Нажмите здесь для печати.