|
|
|||||||||||||||||||||||||||||
|
Linux-vserver или каждому сервису по песочницеИсточник: habrahabr datacompboy
Для целей размещения проектов я применяю такую схему: каждый сервис запускается в изолированной среде: боевой - отдельно, тестовый - отдельно, телефония - отдельно, веб - отдельно. Это снижает риски взлома систем, позволяет бакапить всё и вся одним rsync'ом на соседний сервер по крону, а в случае слёта железа просто поднять на соседнем железе. (А использование drbd + corosync позволяет это делать еще и автоматически) Для создания изолированной среды есть два подхода, именуемые VDS (виртуализация аппаратуры) и VPS/jail (виртуализация процессного пространства). Для создания VDS изоляций применяют XEN, VirtualBox, VMWare и прочие виртуальные машины. Плюсы VDS: система внутри может быть совершенно любой, можно держать разные версии ядер, можно ставить другую ОС. Плюсы VPS: крайне низкая потеря производительности, только на изоляцию, запускаются только те сервисы, которые реально необходимы. Так как мне не нужны разные ОС, то всюду применяю linux-vserver (так уж сложилось исторически, применяю с 2004го года, а openvz вышел в открытый доступ в 2005м), а lxc в моём понимании еще не дорос до продакшена (хотя и очень близок уже). Приведу цитату из FAQ: Ниже я опишу базовые операции по запуску LAMP сервера в изолированном окружении.
Настройка корневой системы для запуска linux-vserverecho "deb http://repo.psand.net/ wheezy main" > /etc/apt/sources.list.d/psand.list wget -O - http://repo.psand.net/pubkey.txt / sudo apt-key add - aptitude update aptitude search linux-image-vserver # Ищем тут последнюю версию ядра aptitude install linux-image-vserver-3.13-beng util-vserver curl bzip2 # заменить 3.13 на актуальную для вас версию curl http://dev.call2ru.com/vs/nss_vserver_64.tar.bz2 / tar xfj - cd nss_vserver_64 make make install ln -s var/lib/vservers / curl http://dev.call2ru.com/vs/vserverauth.tar.gz / tar xfz - cd vserverauth/vslogin/ make cp vslogin /sbin/ chmod u+s /sbin/vslogin echo /sbin/vslogin >> /etc/shells echo -e "auto dummy0\niface dummy0 inet static\n\taddress 192.168.1.250\n\tnetmask 255.255.255.0\n" >> /etc/network/interfaces echo -e "\tpre-up /sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE\n" >> /etc/network/interfaces echo -e "\tpost-down /sbin/iptables -t nat -D POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE\n" >> /etc/network/interfaces После установки - ребут в новое ядро. Что мы сделали:
Это позволяет использовать один IP сервера для запуска различных сервисов, разделяя их по логину (например, чтобы войти рутом в виртуальную машину web надо просто логиниться как web-root либо как root@web). После этого на сервере можно запускать новые сервера, привязывая их к dummy0 интерфейсу. Для решения этого, на руте нам понадобится еще nginx: Это позволяет все приходящие запросы на 80й порт раскидывать по разным виртуальным машинам в зависимости от имени. Теперь нам надо создать новую виртуальную машину (номер 57, имя web) в которой установим LAMP.
Создание нового vserver'аMIRROR=http://ftp.de.debian.org/debian NAME=web DOMAIN=mydom.ru CONTEXT=57 vserver $NAME build -m debootstrap --context $CONTEXT --hostname $NAME.$DOMAIN --interface dummy0:192.168.1.$CONTEXT/24 -- -d squeeze -m $MIRROR echo default > /etc/vservers/$NAME/app/init/mark vserver $NAME start vserver $NAME enter aptitude update aptitude install locales echo -e "en_US.UTF-8 UTF-8\nru_RU.UTF-8 UTF-8\n" >> /etc/locale.gen locale-gen echo -e "127.0.0.1 localhost.localdomain localhost vhost\n192.168.1.250 vroot\n" > /etc/hosts Это устанавливает базовую систему, делает её автозапускаемой при ребуте корневой системы. Теперь виртуалка готова к установке в неё необходимого софта. Например, обычный LAMP: Всё! Теперь у вас на сервере работает апач в совершенно изолированной среде.
К проблемам этого подхода относятся:1. Прямой вход внутрь виртуальных серверов возможен только по паролю. 2. На корневой системе никому нельзя давать доступа, поэтому на корневой системе должен стоять только проверенный минимум софта (ssh, nginx, iptables и больше ничего). 3. При необходимости прямого доступа до каких-либо портов внутри виртуальных машин, проброс нужно делать с помощью iptables.
Моменты, оставленные за кадром для простоты статьи1. /var/lib/vservers/* желательно размещать на lvm, чтобы иметь возможность управлять выделением места для виртуальных машин независимо. 2. Управление ресурсами: просто созданная виртуальная машина может съесть все ресурсы машины. Подробнее о настройке лимитов linux-vserver.org/Resource_Limits 3. /tmp/. Внутри виртуалок по умолчанию /tmp/ создаётся как ramdisk в 16m размером. Либо сразу перед "vserver $NAME start" исправить /etc/vservers/$NAME/fstab 4. Полезные сведения, информацию и прочее про linux-vserver можно найти на linux-vserver.org/ Если будут полезные вопросы, развернутые ответы на них буду выносить в топик. Ссылки по теме
|
|