Использование контейнеров OpenVZ с приватными IP

Понадобилось для одного проекта настроить  Linux-сервер. В качестве системы совместной работы для клиента и почтового сервера была выбрана Zimbra. Zimbra продукт замечательный, хотя и излишне тяжелый. Самое неприятное – это то, что  Zimbra все тащит с собой, включая свою версию apache, mysql, memcached, postfix, clamav, ldap, etc. Выделять мощнейший сервер только под  ZCS  с небольшой нагрузкой неразумно, а пытаться совмещать с другими системами – самоубийственно.

Поэтому было решено “завернуть” Zimbra в контейнер. В качестве системы контейнеров выбрана OpenVZ как достаточно простая и имеющая минимальные накладные расходы на виртуализацию. К тому же у меня есть некоторый опыт работы с этой системой.

Хост-система – Debian Linux 6.0.2 amd64, в контейнерах та же версия Debian.
Хост-система имеет публичный IP, виртуальные контейнеры OpenVZ – приватные из диапазона 192.168.0.0/24 (192.168.0.101, 192.168.0.102).

Установка и базовая настройка OpenVZ не должна вызывать никаких проблем. Хорошая инструкция по установке OpenVZ на Debian 6.0 amd64 есть на сайте Sourceforge: “Installing And Using OpenVZ On Debian Squeeze (AMD64)

После установки OpenVZ и старта контейнеров необходимо прописать им IP и настроить маршрутизацию на хост-системе. Предположим, что контейнер имеет ID 101, интерфейс хост-машины eth0, а Zimbra будет слушать порт 4000:

$ sudo vzctl set 101 --hostname zimbra.example.com --save
$ sudo vzctl set 101 --ipadd 192.168.0.101 --save
$ sudo vzctl set 101 --nameserver 80.232.230.242 --nameserver 8.8.8.8 --save
$ sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to hardware_node_ip
$ sudo iptables -t nat -A PREROUTING -p tcp -d hardware_node_ip --dport 4000 \
-i eth0 -j DNAT --to-destination 192.168.0.101:4000
$ sudo iptables -t nat -A POSTROUTING -s 192.168.0.101 -o eth0 -j SNAT --to hardware_node_ip

Доступ извне к остальным портам добавляется по аналогии.

Как сохранять настройки iptables, а затем восстанавливать их при старте интерфейса, я описывал здесь: “Домашний маршрутизатор и беспроводная точка доступа из старого ноутбука
Подробнее настройка контейнеров OpenVZ за NAT описана на сайте проекта OpenVZ: “Using NAT for container with private IPs

Share/Bookmark

2 Comments

lenzJuly 17th, 2012 at 10:25

Здравсвуйте, хотел поинтересоваться как Вы решили проблему с памятью в связке opnevz+java, сколько дали на откуп Зимбре?
Сейчас играюсь с Zimbra 7 в контейнере, и при каждой затратной операции типа переиндексирования почтовго ящика потребляемая память неумолимо растет, и что самое неприятное – по окончании операции занятая память не высвобождается.

Плюшевый КрысJuly 17th, 2012 at 23:06

Привет! Zimbra чудовищно прожорливый зверек, но под эту задачу клиентом был выделен отдельный сервер, так что с производительностью проблем нет. OpenVZ и Java никак друг другу не мешают, глaвное выделить достаточно ресурсов – под Zimbra 7 выделен контейнер с 8ГБ памяти, из которых 4 заняты постоянно. Остальные с небольшой нагрузкой и небольшими ресурсами неплохо уживаются с тем, что им досталось. Всего выделено 10ГБ из 8ГБ реальных. В своп машина лезет только когда делется еженедельный дамп контейнеров, а так все сидит в памяти.
То, что память не освобождается, не так страшно. Скорее всего, это кеши. Главное, чтобы не были исчерпаны лимиты контейнера.
Обычно память на хосте распределена так:
Memory by day

Leave a comment

Your comment