Pull to refresh
0

«Идеальный» кластер. Часть 2.1: Виртуальный кластер на hetzner

Reading time 7 min
Views 39K


Хочу отметить, что эта инструкция родилась в процессе проведения экспертизы различных систем виртуализации в стенах компании Acronis.
Proxmox показал себя с хорошей стороны, возможно наш опыт окажется полезным для решения Ваших задач.


Арендуя очередной сервер в дата-центре, каждый задумывается о рациональности его использования.
Ведь ни для кого не секрет, что хорошо настроенный сервер не должен быть слишком нагружен и в нем должно быть достаточно ресурсов для выполнения другой работы. Кроме вышесказанного, важна отказоустойчивость и поэтому держать несколько копий одного и того же сервера в качестве hot swap, кажется отличной идеей.
Для решения этих задач и нужна виртуализация.

Сейчас я расскажу, как можно быстро сделать из одного сервера целый кластер серверов на базе linux и windows.
В дальнейших статьях я попытаюсь объяснить, как поднять безопасный web-кластер и использовать все прелести современных технологий виртуализации.
В этой инструкции речь пойдет о бесплатной системе виртуализации Proxmox, она находится в свободном доступе, но за поддержку требует плату. Мы попробуем обойтись без поддержки и коммерческого репозитория Proxmox. Вот что говорит о об этом продукте википедия

Proxmox Virtual Environment (Proxmox VE) — система виртуализации с открытым исходным кодом, основанная на Debian GNU/Linux. Разрабатывается австрийской фирмой Proxmox Server Solutions GmbH, спонсируемой Internet Foundation Austria.
В качестве гипервизоров использует KVM и OpenVZ. Соответственно, способна выполнять любые поддерживаемые KVM ОС (Linux, *BSD, Windows и другие) с минимальными потерями производительности и Linux без потерь.
Управление виртуальными машинами и администрирование самого сервера производятся через веб-интерфейс либо через стандартный интерфейс командной строки Linux.
Для создаваемых виртуальных машин доступно множество опций: используемый гипервизор, тип хранилища (файл образа или LVM), тип эмулируемой дисковой подсистемы (IDE, SCSI или VirtIO), тип эмулируемой сетевой карты, количество доступных процессоров и другие.

Ключевые возможности

  • Простое управление через веб-интерфейс;
  • Мониторинг нагрузки в реальном времени;
  • Библиотека установочных образов (в локальном или удаленном хранилище);
  • Подключение к «физической» консоли гостевых систем непосредственно из браузера (по VNC);
  • Объединение серверов в кластер с возможностью живой миграции виртуальных машин (без остановки гостевой системы);
  • Быстрое развертывание гостевых систем из шаблонов (доступно только для OpenVZ);
  • Автоматическое резервное копирование виртуальных машин.





Первым делом нужно заказать сервер с debian 7 64 на борту, чем больше памяти тем лучше! побеспокойтесь о сохранности своих данных, RAID 1 совсем не будет лишним, хотя сам по себе он несет ряд рисков. Мы оптимисты, берем с RAID1.
Как только у нас есть root доступ к нашему новому серверу, приступаем к работе:

# До установки самого proxmox нужно определиться с hostname и указать его

 nano /etc/hosts 


127.0.0.1 localhost
x.x.x.x  test.xxxx.info test
#
# IPv6
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
x:x:x:4105::2  test.xxxx.info


nano /etc/hostname

test


# Меняем временную зону

echo "Europe/Moscow" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata


# Создаем папку для репозиториев

mkdir -p /etc/apt/sources.list.d/


# Скачиваем репозитории

cd /etc/apt/sources.list.d/ 
wget http://sycraft.info/share/debian7/sources.list.d/debian7.list
wget http://sycraft.info/share/debian7/sources.list.d/dotdeb7.list
wget http://sycraft.info/share/debian7/sources.list.d/neurodebian.sources7.list
wget http://sycraft.info/share/debian7/sources.list.d/proxmox7.list


# Устанавливаем ключи

cd /root/
wget http://www.dotdeb.org/dotdeb.gpg 
cat dotdeb.gpg | apt-key add -
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A040830F7FAC5991
apt-key adv --recv-keys --keyserver pgp.mit.edu 2649A5A9
wget -O- "http://download.proxmox.com/debian/key.asc" | apt-key add -
rm *.gpg


# Обновляем систему

apt-get update && apt-get upgrade -f -y


# Ставим необходимый минимум

apt-get install ntp screen mc git ntpdate sudo zip unzip pigz locales tzdata nano aptitude htop iotop sysstat rkhunter chkrootkit nscd lsof strace subversion multitail -y -f


# Устанавливаем ядро от proxmox

apt-get install pve-firmware pve-kernel-2.6.32-26-pve -y -f

apt-get install pve-headers-2.6.32-26-pve -y -f


# Зачистка системы от старых ядер

apt-get remove linux-image-amd64 linux-image-3.2.0-4-amd64 -y -f


# Генерация grub

update-grub


# Перезагрузка

reboot


# Нам повезло, наш сервер загрузился и теперь можно ставить сам proxmox

apt-get install proxmox-ve-2.6.32 ntp ssh lvm2 postfix ksm-control-daemon vzprocps open-iscsi bootlogd -y


# Удаляем репозиторий для платного proxmox

rm -fr /etc/apt/sources.list.d/pve-enterprise.list


# Добавляем модули iptables на все случаи жизни

nano /etc/vz/vz.conf


IPTABLES="ipt_owner ipt_REDIRECT ipt_recent ip_tables iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ipt_state iptable_nat ip_nat_ftp"


# Добавляем модули при загрузке ядра (лишний шаг, но на всякий случай)

nano /etc/modules


ipt_MASQUERADE
ipt_helper
ipt_REDIRECT
ipt_state
ipt_TCPMSS
ipt_LOG
ipt_TOS
tun
iptable_nat
ipt_length
ipt_tcpmss
iptable_mangle
ipt_limit
ipt_tos
iptable_filter
ipt_helper
ipt_tos
ipt_ttl
ipt_REJECT
loop


Дальше пару слов о предполагаемой архитектуре:

  • Мы заказываем вместе с сервером 2 внешних (публичных) IP адреса, на первом находится служебный порт web-панели proxmox, ssh, mysql и другие служебные порты о которых никто лишний не должен знать
  • Второй адрес обслуживает порты, которые должны быть доступны всем. Например 80 и 443 и все. Кроме того, этот адрес поднят на пустой, лишенной лишних сервисов виртуальной машине. Остальное будет разруливать пробросами портов.


# Сохраняем текущие правила iptables

iptables-save > /etc/iptables.up.rules


# Дописываем правила в раздел *nat для нашего внешнего служебного адреса

nano /etc/iptables.up.rules


*nat
:PREROUTING ACCEPT [2164:136969]
:POSTROUTING ACCEPT [58:3659]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d x.x.16.182/32 -p tcp -m tcp --dport 22 -j DNAT --to-destination 192.168.8.2:22
-A POSTROUTING -o vmbr0 -j MASQUERADE
-A POSTROUTING -d x.x.16.182 -p tcp -s 192.168.8.0/24 --dport 22 -j SNAT --to-source x.x.16.182
COMMIT


# Проверяем правила, ошибок быть не должно

iptables-restore < /etc/iptables.up.rules 


Очень важное правило POSTROUTING, Если вы захотите изнутри одной из виртуальных маших обратится по проброшенному порту внешнего адреса, без этого правила ничего не будет работать!


# Загружаем образы контейнеров openvz

cd /var/lib/vz/template/cache/
wget http://download.openvz.org/template/precreated/debian-7.0-x86_64.tar.gz
wget http://download.openvz.org/template/precreated/centos-6-x86_64.tar.gz
wget http://download.openvz.org/template/precreated/ubuntu-13.10-x86_64.tar.gz


# Драйвера на случай если нам понадобиться windows

cd /var/lib/vz/template/iso/
wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/virtio-win-0.1-74.iso


# Далее переходим по внешнему адресу нашего сервера x.x.16.182:8006/
После авториации видим сообщение об использовании бесплатной версии, она нам и нужна. Просто привыкаем нажимать ОК или покупаем подписку


Настройка сети для Hetznet



# Приступаем к перенастройке сети, настройка сетевых мостов может показаться странной, но в Hetzner есть ограничение количество MAC адресов на порту коммутатора, те все внешние адреса у нас будет обеспечивать 1 MAC
Это настройка одинаково хорошо работает и в ДЦ без таких ограничений, просто универсальный вариант
Так же тут есть приватная сеть 192.168.8.0/16 — ее используем для внутренней сети между нашими виртуальными машинами




# Далее, перезагружаем наш сервер и смотрим наши настройки сети

cat /etc/network/interfaces


auto lo
iface lo inet loopback

auto  eth0
iface eth0 inet static
       address   x.x.16.182
       netmask   255.255.255.224
       pointopoint   x.x.16.129
       gateway    x.x.16.129
dns-nameservers 8.8.8.8
auto vmbr0
iface vmbr0 inet static
       address   x.x.16.182
       netmask   255.255.255.224
       bridge_ports none
       bridge_stp off
       bridge_fd 0
pre-up iptables-restore < /etc/iptables.up.rules
       up ip route add x.x.150/32 dev vmbr0
#
auto vmbr1
iface vmbr1 inet static
       address   192.168.8.100
       netmask   255.255.0.0
       bridge_ports none
       bridge_stp off
       bridge_fd 0


# Пишем шлюз внешнего служебного IP в pointopoint и gateway, в vmbr0 указываются теже самые адреса но без gateway, ко второму адресу на котором будут публичные порты должен быть прописан маршрут up ip route add и правила фаервола pre-up iptables-restore

Для общего развития, вот пример настройки сети для ДЦ без ограничений на количество адресов MAC



nano /etc/network/interfaces

# network interface settings
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto vmbr0
iface vmbr0 inet static
        address  x.x.16.182
        netmask  255.255.255.0
        gateway  x.x.16.1
        dns-nameservers 8.8.8.8
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        pre-up iptables-restore < /etc/iptables.up.rules

auto vmbr1
iface vmbr1 inet static
        address  192.168.8.100
        netmask  255.255.0.0
        bridge_ports none
        bridge_stp off
        bridge_fd 0


# Вот пример того как мы можем устанавливать нашу Windows (если это нужно)




В настройках видеокарты я указываю SPICE а вот и клиент для него www.spice-space.org/download.html
Сеть и диск — virtio, для установки драйверов сразу же делаю второй cd-rom для скачанной virtio iso


Ну и последнее в этой статье — настройка gw. виртуальной машины, которая будет пробрасывать нам публичные порты. На этой виртуальной машине не будет SSH или других слушающих сеть служб — она узел фаервол
Вы создаете CT с образом debian c сетью Network Device



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

nano /etc/network/interfaces


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address   x.x.x.150
       netmask   255.255.255.255
pointopoint  x.x.16.182
        gateway  x.x.16.182
pre-up iptables-restore < /etc/iptables.up.rules


auto eth1
iface eth1 inet static
       address   192.168.8.1
       netmask   255.255.0.0


# Обратите внимание на маску, gateway и pointopoint для этого интерфейса — адрес нашей публичной служебной сети.

# Дописываем правила в раздел *nat для нашего внешнего публичного адреса

nano /etc/iptables.up.rules


*nat
:PREROUTING ACCEPT [2164:136969]
:POSTROUTING ACCEPT [58:3659]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d x.x.x.150/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.8.5:22
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -d x.x.x.150 -p tcp -s 192.168.8.0/24 --dport 80 -j SNAT --to-source x.x.x.150
COMMIT


# Разрешаем пробросс трафика при маскарадинге

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p


# В этом контейнере удалите все ненужное!

apt-get purge -y -f openssh-server postfix ssh samba bind9 sendmail apache2*apt-get autoremove -y 


Если у вас возникнут трудности или потребуется специальный человек чтобы сделать сказку былью — всегда буду рад помочь! мои контакты — welcome

В продолжение темы моя статья «Идеальный» www кластер. Часть 1. Frontend: NGINX + Keepalived (vrrp) на CentOS
Дальше будет, надеюсь, еще много и много статей по этой теме! Спасибо за внимание
Tags:
Hubs:
+10
Comments 22
Comments Comments 22

Articles

Information

Website
www.acronis.com
Registered
Founded
Employees
1,001–5,000 employees
Location
Сингапур