Арендуя очередной сервер в дата-центре, каждый задумывается о рациональности его использования.
Ведь ни для кого не секрет, что хорошо настроенный сервер не должен быть слишком нагружен и в нем должно быть достаточно ресурсов для выполнения другой работы. Кроме вышесказанного, важна отказоустойчивость и поэтому держать несколько копий одного и того же сервера в качестве 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 или других ненужных служб, если ее каким то образом взломают, то не смогут получить доступ к вамиш данным
Вы создаете CM с образом 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 1 > /proc/sys/net/ipv4/ip_forward 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
Дальше будет, надеюсь, еще много и много статей по этой теме! Спасибо за внимание
ссылка на оригинал статьи http://habrahabr.ru/post/204190/
Добавить комментарий