Серверы · 9 min read · Sep 10, 2025
Идеальный балансированный и высокодоступный веб-кластер с 2 серверами, работающими под Xen на Ubuntu 8.04 Hardy Heron
Идеальный балансированный и высокодоступный веб-кластер с 2 серверами, работающими под Xen на Ubuntu 8.04 Hardy Heron
Введение
Это копия с моего сайта: blogama.org
В этом руководстве мы создадим балансированный и высокодоступный веб-кластер на 2 реальных серверах с Xen, heartbeat и ldirectord. Кластер будет выполнять http, почту, DNS, базу данных MySQL и будет полностью мониториться. В настоящее время это используется на производственном сервере с парой веб-сайтов.
Цель этого учебника - достичь балансировки нагрузки и высокой доступности с как можно меньшим количеством реальных серверов и, конечно, с использованием программного обеспечения с открытым исходным кодом. Большее количество серверов означает большие затраты на оборудование и хостинг.
Большинство информации, которую вы найдете здесь, было скопировано/вставлено из десятка руководств, многие из них с howtoforge.com, но некоторые важные детали были изменены, чтобы это стало возможным и чтобы все собрать вместе.
Вот краткий список услуг и приложений, которые будут установлены:
- Apache
- MySQL + phpmyadmin
- Postfix (SMTP) с веб-конфигурацией пользователей и Spamassassin
- Courier (IMAP и POP) и squirrelmail
- Bind (DNS сервер)
- Munin и monit для веб-мониторинга
- Самодельные скрипты для мониторинга
Что вам нужно
2 сервера с двойным LAN, как минимум 7 IP-адресов. IP-адреса будут использоваться следующим образом:
- dom01.example.com : 192.168.1.100
- dom02.example.com : 192.168.1.101
- lb1.example.com : 192.168.1.102
- lb2.example.com : 192.168.1.103
- web1.example.com : 192.168.1.104
- web2.example.com : 192.168.1.105
- example.com : 192.168.1.106
- yousite.com (по желанию) : 192.168.1.107
Dom0 будет отделен от балансировщиков нагрузки и веб-серверов. Я не пробовал это, но я верю, что было бы возможно разместить балансировщики нагрузки на Dom0.
Я предлагаю как минимум 2 ГБ оперативной памяти и жесткие диски RAID 1 или 10 для производственного сервера.
Ограничения
Это сработало для меня. Это не значит, что это сработает для вас, но будьте уверены, что руководство на 100% протестировано на производственном и тестовом сервере!
Эта настройка масштабируема на 2 серверах, но вам нужно будет найти другой способ для репликации MySQL, если вы это сделаете.
Нет панели управления, такой как ISPConfig, CPanel и т. д.
Некоторые веб-сайты могут сломать репликацию MySQL Master to Master. Это случилось со мной с Drupal, но я исправил это, либо отключив кэш, либо установив минимальное время жизни кэша. Пожалуйста, прочитайте это, прежде чем продолжить:
A: Репликация MySQL в настоящее время не поддерживает никакой протокол блокировки между мастером и слейвом для гарантии атомарности распределенного (межсерверного) обновления. Другими словами, возможно, что клиент A делает обновление на со-мастере 1, и в это время, прежде чем оно распространится на со-мастера 2, клиент B может сделать обновление на со-мастере 2, которое делает обновление клиента A работать иначе, чем это было на со-мастере 1. Таким образом, когда обновление клиента A достигает со-мастера 2, оно производит таблицы, которые отличаются от того, что у вас есть на со-мастере 1, даже после того, как все обновления со-мастера 2 также распространились. Это означает, что вы не должны связывать два сервера вместе в двусторонней репликационной связи, если вы не уверены, что ваши обновления могут безопасно происходить в любом порядке, или если вы не позаботитесь о неправильно упорядоченных обновлениях каким-либо образом в коде клиента.
1. Установка Ubuntu
Выполните базовую установку Ubuntu 8.04 LTS серверной версии.
Если вы хотите установить с программным RAID 1, пожалуйста, прочитайте это руководство, которое я написал:
Установка Ubuntu 8.04 с программным RAID 1
2. Установка Xen
Вы можете запускать Xen из образов файлов или из выделенного раздела. У обоих есть свои плюсы и минусы.
С образами файлов ввод-вывод диска медленнее, но проще делать резервные копии и управлять ими. Все наоборот, когда вы работаете на разделе.
Что я предлагаю сделать, так это начать с образа файла и закончить разделом, когда ваша настройка будет завершена. Таким образом, вы можете делать резервные копии своих образов файлов и откатиться, если это необходимо при тестировании.
Чтобы установить на образах файлов, пожалуйста, обратитесь к этому отличному учебнику от мастера howto Фалко:
Установка Xen на сервер Ubuntu 8.04 (Hardy Heron) из репозиториев Ubuntu
Чтобы установить непосредственно на раздел (моя модифицированная версия руководства Фалко):
Высокопроизводительный XEN на серверной системе Ubuntu Hardy Heron (8.04) AMD64 или i386
Вам нужно сделать 2 домена Xen на каждом сервере (dom01 и dom02 являются Dom0 или контроллером ВМ):
сервер #1 - dom01.example.com
lb1.example.com (256MB RAM - 5GB HD достаточно)
ip : 192.168.1.102
web1.example.com
(чем больше RAM, тем лучше, оставьте 512MB для Dom0)
ip : 192.168.1.104
сервер #2 - dom02.example.com
lb2.example.com (256MB RAM - 5GB HD достаточно)
ip : 192.168.1.103
web2.example.com (чем больше RAM, тем лучше, оставьте 512MB для Dom0)
ip : 192.168.1.105
3. Создание мостов Xen для локальных передач данных (по желанию)
По умолчанию только одна сетевая карта включена на виртуальной машине с Xen. Для локальной передачи, такой как rsync, репликация MySQL и резервные копии, я использую гигабитный кроссоверный кабель между 2 серверами. Это не обязательно, но это сэкономит затраты на пропускную способность, и репликация будет быстрее.
Пожалуйста, обратитесь к этому руководству, чтобы создать мост Xen:
Создание новых мостов Xen на Ubuntu 8.04
В этом руководстве IP, используемый на второй сетевой карте (кроссовер), будет следующим:
- dom01.example.com : 192.168.0.100
- dom02.example.com : 192.168.0.101
- lb1.example.com : 192.168.0.102
- lb2.example.com : 192.168.0.103
- web1.example.com : 192.168.0.104
- web2.example.com : 192.168.0.105
4. Подготовка узлов (dom01, dom02, lb1, lb2, web1, web2)
4.1 Установка openssh сервера и VIM
Запустите:
sudo su apt-get install vim ssh openssh-server
4.2 Обновление репозиториев
mv /etc/apt/sources.list /etc/apt/sources.list.bak
vi /etc/apt/sources.list
Сделайте sources.list выглядеть так:
#
# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
deb http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## 'partner' repository. This software is not part of Ubuntu, but is
## offered by Canonical and the respective vendors as a service to Ubuntu
## users.
# deb http://archive.canonical.com/ubuntu hardy partner
# deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverseТеперь выполните:
apt-get update
apt-get upgrade
4.3 Модификации
/bin/sh является символической ссылкой на /bin/dash, однако нам нужен /bin/bash, а не /bin/dash. Поэтому мы делаем следующее:
ln -sf /bin/bash /bin/sh
Мы отключим AppArmor (на dom01 и dom02), сделав следующее:
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
5. Конфигурация сети (dom01, dom02, lb1, lb2, web1, web2)
5.1 Настройка IP-адресов
Чтобы отредактировать конфигурацию сети в Ubuntu, выполните:
vi /etc/network/interfaces
Теперь мы сделаем каждую конфигурацию сети по очереди. Я предполагаю, что вы используете 2 сетевые карты, eth0 - это та, которая подключена к интернету, а eth1 - та, которая с кроссоверным кабелем. Я не буду писать конфигурационный файл индивидуально, только для dom01.example.com, пожалуйста, измените соответственно этот список:
dom01.example.com
eth0 : 192.168.1.100
eth1 : 192.168.0.100
dom02.example.com
eth0 : 192.168.1.101
eth1 : 192.168.0.101
lb1.example.com
eth0 : 192.168.1.102
eth1 : 192.168.0.102
lb2.example.com
eth0 : 192.168.1.103
eth1 : 192.168.0.103
web1.example.com
eth0 : 192.168.1.104
eth1 : 192.168.0.104
web2.example.com
eth0 : 192.168.1.105
eth1 : 192.168.0.105
Пример конфигурации сети dom01.example.com:
Сделайте файл /etc/network/interfaces выглядеть так:
# Этот файл описывает сетевые интерфейсы, доступные на вашей системе
# и как их активировать. Для получения дополнительной информации смотрите interfaces(5).
# Циклический сетевой интерфейс
auto lo
iface lo inet loopback
# Основной сетевой интерфейс, подключенный к интернету
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# Вторичный сетевой интерфейс, подключенный к кроссоверному кабелю на другом сервере
auto eth1
iface eth1 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255Теперь сохраните файл и выполните:
/etc/init.d/networking restart
5.2 Имя хоста
vi /etc/hosts
и сделайте его выглядеть так, иначе у вас будут проблемы с ldirectord позже:
dom01.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho dom01.example.com > /etc/hostname
/etc/init.d/hostname.sh start
dom02.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom02.example.com dom02
192.168.1.100 dom01.example.com dom01
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho dom02.example.com > /etc/hostname
/etc/init.d/hostname.sh start
lb1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb1.example.com lb1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho lb1.example.com > /etc/hostname
/etc/init.d/hostname.sh start
lb2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb2.example.com lb2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho lb2.example.com > /etc/hostname
/etc/init.d/hostname.sh start
web1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web1.example.com web1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.105 web2.example.com web2
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho web1.example.com > /etc/hostname
/etc/init.d/hostname.sh start
web2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web2.example.com web2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
# Следующие строки желательны для хостов, поддерживающих 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-allhostsecho web2.example.com > /etc/hostname
/etc/init.d/hostname.sh start
6. Установка программного обеспечения (dom01, dom02, lb1, lb2, web1, web2)
Запустите:
apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential
Get new posts in your inbox
No spam. Unsubscribe anytime.