Готовый Web Сервер
Содержание статьи. Обычно, когда встает задача поднять среднестатистический веб-сервер, администратор выбирает одну достаточно производительную виртуальную или физическую машину, которая способна справиться с ожидаемой нагрузкой, и поднимает на ней стек LAMP, включающий в себя Apache, PHP, MySQL, а также, возможно, memcached, nginx и реверс-прокси. Однако это далеко не самый эффективный и безопасный сценарий, лучшим решением будет разнести все компоненты стека по разным виртуальным машинам. Во-вторых, классический LAMP-сервер очень плохо масштабируется. В случае повышения нагрузок придется менять всю архитектуру, вводя в нее новые веб-серверы, базы данных, прикручивать балансировщик нагрузки, изменять конфигурацию. Система не обладает модульностью, которая бы позволила вводить в строй новые сервисы и подсистемы, не ломая архитектуру.
В-третьих, по мере роста в ходе наращивания мощности классическая конфигурация будет постоянно усложняться, что затруднит ее сопровождение и понимание архитектуры. По тем же причинам появятся серьезные проблемы с мониторингом. В общем и целом, классический LAMP в перспективе неэффективен, но все его проблемы можно решить за счет разнесения всех компонентов сервера по отдельным виртуальным машинам, которые станут высокоуровневыми логическими единицами, более удобными для управления. Виртуальный LAMP Идея виртуализации LAMP состоит в том, чтобы разнести Apache, MySQL, memcached в отдельные виртуальные серверы и добавить к ним еще один виртуальный сервер с реверс-прокси в лице nginx. За счет разделения сервисов такая конфигурация будет на порядок безопаснее, масштабируемее и удобнее в управлении.
Современные системы виртуализации позволят легко клонировать и создавать новые виртуальные окружения, которые можно прозрачно переносить на другие физические машины с целью создания дополнительных нод при повышении нагрузки. Интерфейс управления ВМ позволит наглядно видеть всю конфигурацию и управлять ей. Реверс-прокси на отдельной виртуальной машине одновременно выполнит функции сетевого экрана и балансировщика нагрузки, в случае введения в строй новых инстанций Apache или MySQL.
Далее я пошагово опишу, как создать такую схему с использованием стандартных средств управления виртуализацией в Linux на базе libvirt и QEMU/KVM. Система управления ВМ libvirt используется во многих высокоуровневых облачных платформах, поэтому в будущем читатель сам сможет выбрать более подходящий для него инструмент управления и мониторинга.
Готовый VPS веб-сервер из шаблонов Ubuntu и CentOS. Что такое 64 разрядный кодек для powerpoint.
Установка libvirt и создание шаблонов ВМ Итак, у нас есть машина под управлением Debian/Ubuntu Linux (на самом деле подойдет и Fedora, но придется учесть нюансы в различиях системы инициализации, конфигурирования и установки пакетов). Мы должны создать на ней инфраструктуру, с помощью которой сможем быстро и легко подготовить ферму виртуальных серверов требуемой конфигурации. Для этого необходимо сделать три вещи: создать виртуальный сетевой мост, который будет использоваться для коммуникации ВМ друг с другом и доступа реверс-прокси во внешний мир, установить и настроить libvirt и подготовить набор шаблонов ВМ.
Поднимаем MySQL Теперь следует использовать наш готовый шаблон для создания всех необходимых серверов из связки LAMP. Напомню, что нам нужны будут отдельные серверы для nginx, выступающего в роли реверс-прокси, для Apache/PHP, MySQL и memcached, если таковой необходим. Начнем с настройки Apache/PHP. Чтобы создать новую ВМ на базе уже существующей, используем команду virt-clone: $ sudo virt-clone -o temp -n mysql -f /var/lib/libvirt/images/mysql.img Так мы получим новую ВМ, аналогичную уже существующей. Теперь наша задача — запустить эту машину, зайти на нее с помощью все того же virt-viewer, а дальше — установить и запустить на ней связку Apache/PHP. Запускаем и входим: $ sudo virsh start mysql $ virt-viewer -c qemu+ssh://root@IP-сервера/system mysql Вторую команду следует выполнять опять же с удаленной машины, имеющей графический интерфейс.
Первое, что делаем, войдя на машину, — это изменяем ее IP-адрес, который достался в наследство от шаблонной ВМ: $ vi /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.11 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 Теперь устанавливаем и настраиваем MySQL: $ sudo apt-get install mysql mysql-server $ sudo vi /etc/my.cnf. bind bind-address=192.168.0.11. Также сразу добавляем в файл необходимые строки конфигурации (обсуждение того, какие именно, выходит за рамки данной статьи) и перезапускаем сервер: $ sudo service mysqld restart Теперь можно создать пользователей и базы данных. В качестве завершающего шага сконфигурируем iptables так, чтобы он пропускал только пакеты для MySQL: $ sudo iptables -A INPUT -j DROP $ sudo iptables -A INPUT -m state -state NEW -m tcp -p tcp -dport 3306 -j ACCEPT Чтобы настройки вступили в силу после перезагрузки, эти строки следует добавить в /etc/rc.local (без sudo, естественно). Перед использованием libvirt следует проверить возможности виртуализации машины с помощью команды virsh capabilities.
Поднимаем memcached Теперь создадим и поднимем сервер memcached. Возможно, он и не понадобится в твоей конкретной конфигурации, но преднастроенный сервер определенно стоит держать про запас. Если в какой-то момент потребуется использование агрессивного кеширования, все необходимое для этого уже будет в твоем арсенале, останется только запустить готовый сервер и подключить кеширование на стороне Apache/PHP.
Как и в случае с сервером MySQL, перво-наперво клонируем заранее подготовленный шаблон, запускаем виртуальный сервер и подключаемся к нему: $ sudo virt-clone -o temp -n memcached -f /var/lib/libvirt/images/memcached.img $ sudo virsh start memcached $ virt-viewer -c qemu+ssh://root@IP-сервера/system memcached Меняем IP-адрес, как показано выше, на этот раз можно использовать адрес 192.168.0.12 или любой другой на твой вкус. Главное — запомнить, что где находится. Далее устанавливаем сам сервер: $ sudo apt-get install memcached Открываем настройки и пишем: PORT='11211'; USER='memcached'; MAXCONN='1024'; CACHESIZE='512'; OPTIONS='-l 192.168.0.12 -L' Перезапускаем сервер: $ sudo service restart memcached Добавляем правило iptables, закрывающее все порты, кроме порта memcached: $ sudo iptables -A INPUT -j DROP $ sudo iptables -A INPUT -m state -state NEW -m tcp -p tcp -dport 11211 -j ACCEPT Добавляем аналогичные строки в /etc/rc.local. Если в данный момент memcached не нужен, можно его остановить: $ sudo virsh stop memcached Когда сервер понадобится, достаточно будет отдать команду на запуск, и он появится в виртуальной сети. Поднимаем Apache/PHP Предпоследний и самый важный шаг — это установка и настройка Apache/PHP. К сожалению, разнести эти два сервиса по разным серверам мы не можем в силу архитектуры PHP, выполненного в виде Apache-модуля.
Поэтому они будут на одной виртуальной машине. Хотя если бы речь шла о Python, мы могли бы легко вынести uwsgi-сервер на отдельную машину. Вновь клонируем и запускаем сервер: $ sudo virt-clone -o temp -n apache -f /var/lib/libvirt/images/apache.img $ sudo virsh start apache $ virt-viewer -c qemu+ssh://root@IP-сервера/system apache Правим сетевые конфиги. Пусть Apache будет у нас находиться по адресу 192.168.0.13. Далее ставим Apache/PHP и необходимые модули: $ sudo apt-get install apache2 $ sudo apt-get install php5 libapache2-mod-php5 php5-mysql php5-memcache Здесь мы устанавливаем только самые необходимые PHP-модули, нужные в нашей голой конфигурации: MySQL и memcache.
Понадобятся ли другие модули, будет зависеть от потребностей конкретного веб-сайта. Далее создаем минимально необходимый конфиг веб-сервера: $ sudo vi /etc/httpd/conf/httpd.conf Listen 192.168.1.13:80 DocumentRoot '/var/www/html' Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all Настройки PHP5 оставляем пока как есть. Размещаем наш сайт в каталоге /var/www/html, перезапускаем Apache: $ sudo service restart apache Последним шагом добавляем правило iptables для пропуска трафика на 80-й порт: $ sudo iptables -A INPUT -j DROP $ sudo iptables -A INPUT -m state -state NEW -p tcp -dport 80 -j ACCEPT. Дальнейшие шаги Теперь у нас есть готовая инфраструктура, состоящая как минимум из четырех виртуальных серверов: MySQL с адресом 192.168.0.11, memcached — 192.168.0.12, Apache — 192.168.0.13, nginx — 192.168.0.14. Чтобы проверить, что все виртуальные машины корректно функционируют, воспользуемся virsh: $ sudo virsh list Или с удаленной машины: $ sudo virsh -connect qemu+ssh://root@192.168.0.10/system list Повторюсь, что это лишь базовая конфигурация, которая на данном этапе обеспечивает только работоспособность связки nginx + Apache. Далее следует корректным образом отконфигурировать Apache и PHP и поднять сайт, указав в его настройках адреса и порты серверов MySQL и memcached (если он будет использован). После проверки работоспособности всей связки следует настроить маскарадинг пакетов, пришедших на порт 80 внешнего шлюза, так, чтобы они перенаправлялись на адрес 192.168.0.14, то есть на адрес nginx.
Он и будет точкой входа на сайт. Кроме того, рекомендую подправить настройки iptables всех серверов так, чтобы каждый из них мог общаться только с тем, с которым действительно необходимо. Например, nginx должен принимать пакеты только с адреса внешнего шлюза, а отдавать только на адрес сервера Apache, порт 80. Таким образом ты полностью изолируешь серверы друг от друга и в случае, если будет взломан, например, тот же nginx, его взломщик, не получив права root, вообще не сможет выбраться из песочницы. Дополнительным уровнем защиты станет настройка правил брандмауэра на стороне самого сервера, тогда взломщику не помогут даже права root, он окажется замкнут внутри виртуального сервера.
INFO Живая миграция с помощью libvirt выполняется в одну команду: sudo virsh migrate —live имявм qemu+ssh://host2.com/system. Для libvirt есть прекрасный графический инструмент управления под названием virt-manager.
Он позволяет выполнить все описанное в статье, просто кликая мышкой. Чтобы защититься от возможных проблем с конфигурацией и прочих сбоев, сразу после настройки окончательной конфигурации следует сделать клоны всех серверов. В этом случае сбойный сервер можно будет быстро восстановить из априори работоспособной копии. Apache и MySQL таким образом, конечно, не восстановишь, так как они содержат динамически генерируемые данные; эти данные можно заранее расположить на втором виртуальном диске, который достаточно будет подключить после восстановления рабочей копии. Сделать это можно с помощью все того же virt-clone, указав дополнительный диск с помощью опции -f.
Например (apachebase — заранее сохраненная рабочая копия): $ sudo virt-clone -o apachebase -n apache -f /var/lib/libvirt/images/apache.img -f /var/lib/libvirt/images/www-data.img Естественно, следует заранее внести необходимые строки в /etc/fstab. Кстати, идею с вынесением данных виртуальных машин на отдельные диски можно использовать для шаринга данных между несколькими виртуальными машинами, например в конфигурации с использованием дополнительного сервера nginx для отдачи статики. В таком случае доступ к данным веб-сервера должны иметь сразу две виртуальные машины: Apache и nginx. Чтобы это организовать, можно использовать отдельный диск для данных и подключать его к обеим ВМ. Правда, в этом случае придется настроить блокировку диска; как это сделать, описано. Что касается ресурсов виртуальных машин, а точнее, их правильного распределения между ВМ, то здесь ситуация следующая.
Два главных ресурса — это память и используемые ядра процессора. Libvirt позволяет гибко управлять ими и изменять без необходимости пересоздавать и перезапускать ВМ. Например, для изменения количества выделенной виртуальной машине памяти можно использовать такую команду: $ virsh setmem memcached 1048576 -live -config Она установит количество выделенной памяти для ВМ memcached равным 1 Гб и запишет это значение в конфиг ВМ (флаг ‘—config’). Количество выделенных процессоров можно изменить так: $ virsh setvcpus apache 2 -live -config Правильный выбор количества ресурсов для каждой виртуальной машины в нашей конфигурации будет зависеть от ситуации, однако следует иметь в виду, что это лишь ограничение, поэтому вполне возможно выделить, например, по 6 Гб каждой ВМ на сервере с 6 Гб физической памяти и положиться на подсистему VM, которая сама распределит ресурсы между машинами. Далее останется только мониторить работу виртуальных окружений и подстраивать ограничения для достижения лучшего баланса. Virsh — мощнейший инструмент управления ВМ VNC-клиент.
Автор: Артемьев Сергей Игоревич ICQ: 438856621 email: Выбор Web-сервера, наверное, самая простая для нас задача. Для Windows есть всего 2 серьёзные альтернативы: 'Internet Information Server (IIS)' или Apache. IIS - разработка Microsoft и легко интегрируется в Windows, но нормально настраивается и работает только в семействе Windows Server.
Кроме того, для качественной настройки IIS нужно иметь определённый опыт и знания. Остановим своё внимание на втором сервере. Apache (читается - 'апач') - это веб-сервер с открытым исходным кодом, популярный во всём мире. Причин популярности несколько. Первая и основная - кроссплатформенность. Apache может быть установлен практически на любой ОС и на любом 'железе'. Сейчас Apache ставится как на обычных персоналках, так и на крупных серверах.
Готовый Веб Сервер Linux
Вторая причина популярности - простая расширяемость. Для Apache уже создано огромное число стандартных библиотек, позволяющих решать практически любые стандартные (и не очень) задачи. Третья причина - простота начальной установки и настройки. Все параметры конфигурации хранятся в соответствующих конфигурационных файлах. Пользователь может по своему усмотрению менять даже самые тонкие настройки сервера.
Локальный Сервер
Правда, есть в таком подходе существенный недостаток - после сохранения изменений в файле, нужно перезапустить службу сервера. Оригинальную версию Apache можно скачать c официального сайта. Но для персональных нужд лучше использовать готовые пакеты типа. Например, Денвер при установке сам устанавливает все необходимые элементы: Apache, PHP, Perl и некоторые другие компненты. После установки разрабочику достаточно положить в нужный каталог свои скрипты и они заработают. И лучшее решение на сегодняшний день -.
Готовый Образ Веб Сервера
Этот пакет не только устанавливает Apache и PHP, но и предоставляет очень удобный интерфейс для настройки и управления сервером. Все скрипты и описания в данном руководстве проверены на работоспособность именно на этой платформе.