
Хочу отметить, что эта инструкция родилась в процессе проведения экспертизы различных систем виртуализации в стенах компании 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
Дальше будет, надеюсь, еще много и много статей по этой теме! Спасибо за внимание