Установка серверов · 6 min read · Sep 28, 2025

Установка веб-, почтового и MySQL кластера на Debian 6.0 с ISPConfig 3

Установка веб-, почтового и MySQL кластера на Debian 6.0 с ISPConfig 3

Версия 1.0
Автор: Тилл Брем

Это руководство описывает установку кластерного веб-, почтового, базы данных и DNS сервера, который будет использоваться для резервирования, высокой доступности и балансировки нагрузки на Debian 6 с панелью управления ISPConfig 3. Репликация MySQL Master/Master будет использоваться для репликации клиентских баз данных MySQL между серверами, а Unison будет использоваться для синхронизации папок /var/www (вебсайты) и /var/vmail (данные учетных записей электронной почты).

1 Настройка двух базовых систем

В этой настройке будет один мастер-сервер (на котором работает интерфейс панели управления ISPConfig) и один слейв-сервер, который дублирует веб (apache), почтовые (postfix и dovecot) и базы данных (MySQL) службы мастер-сервера.

Чтобы установить кластерную настройку, нам нужны два сервера с минимальной установкой Debian 6.0. Базовая настройка описана в следующем руководстве в шагах 1 - 8:

https://www.howtoforge.com/perfect-server-debian-squeeze-with-bind-and-dovecot-ispconfig-3

Установите только шаги 1 - 8 из руководства по идеальному серверу и не устанавливайте другие шаги, так как они отличаются для кластерной настройки!

В моем примере я использую следующие имена хостов и IP-адреса для двух серверов:

Мастер-сервер

Имя хоста: server1.example.tld
IP-адрес: 192.168.0.105

Слейв-сервер

Имя хоста: server2.example.tld
IP-адрес: 192.168.0.106

Где бы ни встречались эти имена хостов или IP-адреса в следующих шагах установки, вам нужно будет изменить их, чтобы они соответствовали IP и именам хостов ваших серверов.

2 Установка двух серверов

Следующие шаги необходимо выполнить на мастер-сервере и на слейв-сервере. Если конкретный шаг предназначен только для мастера или слейва, я добавил примечание в описании красным цветом.

vi /etc/hosts
127.0.0.1       localhost
192.168.0.105   server1.example.tld
192.168.0.106   server2.example.tld

# Следующие строки желательны для хостов, поддерживающих IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Установите имя хоста сервера:

echo server1.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

Используйте server1.example.tld на первом сервере и server2.example.tld на втором сервере.

Отредактируйте файл sources.list…

vi /etc/apt/sources.list 

… и убедитесь, что ваш /etc/apt/sources.list содержит репозиторий squeeze-updates (это гарантирует, что вы всегда получаете самые новые обновления для вирусного сканера ClamAV - этот проект часто публикует релизы, и иногда старые версии перестают работать).

[...]  
deb http://ftp.de.debian.org/debian/ squeeze-updates main  
[...]  

Запустите

apt-get update
apt-get upgrade

чтобы установить последние обновления (если они есть).

Хорошей идеей будет синхронизировать системные часы с сервером NTP ( n etwork t ime p rotocol) через Интернет. Просто выполните

apt-get -y install ntp ntpdate

и ваше системное время всегда будет синхронизировано.

На сервере 1:

Теперь мы создаем пару закрытого/открытого ключа на server1.example.tld:

ssh-keygen -t dsa

root@server1:~# ssh-keygen -t dsa
Генерация пары открытого/закрытого ключа dsa.
Введите имя файла, в который сохранить ключ (/root/.ssh/id_dsa): <– ENTER
Создан каталог ‘/root/.ssh’.
Введите пароль (пусто для отсутствия пароля): <– ENTER
Введите тот же пароль еще раз: <– ENTER
Ваш идентификатор был сохранен в /root/.ssh/id_dsa.
Ваш открытый ключ был сохранен в /root/.ssh/id_dsa.pub.
Отпечаток ключа:
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 [email protected]
Случайное изображение ключа:
+–[ DSA 1024]—-+
| |
| o o |
| E * . . |
| o = o o |
| . S o . |
| + O + . |
| + + + |
| o . |
| .o |
+—————–+
root@server1:~#

Важно, чтобы вы не вводили пароль, иначе зеркалирование не будет работать без человеческого взаимодействия, поэтому просто нажмите ENTER!

Далее мы копируем наш открытый ключ на server2.example.tld:

ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]

root@server1:~# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
Аутентичность хоста ‘192.168.0.101 (192.168.0.101)’ не может быть установлена.
Отпечаток RSA ключа 25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e.
Вы уверены, что хотите продолжить подключение (yes/no)? <– yes (вы увидите это только в первый раз, когда подключаетесь к server2)
Предупреждение: ‘192.168.0.101’ (RSA) был навсегда добавлен в список известных хостов.
[email protected] ‘s password: <– пароль root для server2
Теперь попробуйте войти в машину, с помощью “ssh ‘ [email protected] ‘“ и проверьте в:

 .ssh/authorized_keys
чтобы убедиться, что мы не добавили лишние ключи, которых вы не ожидали.

Теперь проверьте на server2, был ли правильно передан открытый ключ server1:

server2:

cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAPhiAexgEBexnw0rFG8lXwAuIsca/V+lhmv5lhF3BqUfAbL7e2sWlQlGhxZ8I2UnzZK8Ypffq6Ks+lp46yOs7MMXLqb7JBP9gkgqxyEWqOoUSt5hTE9ghupcCvE7rRMhefY5shLUnRkVH6hnCWe6yXSnH+Z8lHbcfp864GHkLDK1AAAAFQDddQckbfRG4C6LOQXTzRBpIiXzoQAAAIEAleevPHwi+a3fTDM2+Vm6EVqR5DkSLwDM7KVVNtFSkAY4GVCfhLFREsfuMkcBD9Bv2DrKF2Ay3OOh39269Z1rgYVk+/MFC6sYgB6apirMlHj3l4RR1g09LaM1OpRz7pc/GqIGsDt74D1ES2j0zrq5kslnX8wEWSHapPR0tziin6UAAACBAJHxgr+GKxAdWpxV5MkF+FTaKcxA2tWHJegjGFrYGU8BpzZ4VDFMiObuzBjZ+LrUs57BiwTGB/MQl9FKQEyEV4J+AgZCBxvg6n57YlVn6OEA0ukeJa29aFOcc0inEFfNhw2jAXt5LRyvuHD/C2gG78lwb6CxV02Z3sbTBdc43J6y [email protected]

Установите postfix, dovecot и mysql одной командой:

apt-get -y install postfix postfix-mysql postfix-doc mysql-client mysql-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d sudo

Введите новый пароль для пользователя root MySQL, когда установщик запросит. Вы должны выбрать один и тот же пароль для обоих серверов. Затем ответьте на следующие вопросы, как описано ниже:

Общий тип конфигурации? <– Интернет-сайт
Имя почты? <– server1.mydomain.tld
Требуется SSL сертификат <– Ок

Используйте server1.example.tld на первом сервере и server2.example.tld на втором сервере.

Мы хотим, чтобы MySQL слушал на всех интерфейсах, а не только на localhost, поэтому редактируем /etc/mysql/my.cnf и закомментируем строку bind-address = 127.0.0.1:

vi /etc/mysql/my.cnf
[...]  
# Вместо skip-networking по умолчанию теперь слушает только на  
# localhost, что более совместимо и не менее безопасно.  
#bind-address           = 127.0.0.1  

[...]  

Затем перезапустите MySQL:

/etc/init.d/mysql restart

Теперь мы подготавливаем MySQL серверы для репликации mysql master/master.

На сервере 1:

Войдите в MySQL в оболочке с…

 mysql -u root -p

… и введите пароль root MySQL, который вы выбрали во время установки mysql. Затем выполните эту команду в оболочке MySQL:

GRANT REPLICATION SLAVE ON . TO ‘slaveuser’@’%’ IDENTIFIED BY ‘slave_user_password’;
FLUSH PRIVILEGES;
quit;

Замените ‘slave_user_password’ на надежный пароль, который вы хотите использовать для подключения слейва к мастер-серверу. Замените этот заполнитель в следующих шагах на пароль, который вы выбрали, где бы он ни встречался.

Теперь давайте настроим наши 2 узла MySQL:

На сервере 1:

vi /etc/mysql/my.cnf

Найдите раздел, который начинается с [mysqld], и добавьте в него следующие параметры (закомментировав все существующие конфликтующие параметры):

[...]  
[mysqld]  
server-id = 1  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 1  
 
master-host = 192.168.0.106  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60   
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Затем остановите MySQL:

/etc/init.d/mysql stop

Теперь сделайте почти то же самое на server2…

На сервере 2:

vi /etc/mysql/my.cnf

Найдите раздел, который начинается с [mysqld], и добавьте в него следующие параметры (закомментировав все существующие конфликтующие параметры):

[...]  
[mysqld]  
server-id = 2  
replicate-same-server-id = 0  
auto-increment-increment = 2  
auto-increment-offset = 2  
   
master-host = 192.168.0.105  
master-user = slaveuser  
master-password = slave_user_password  
master-connect-retry = 60  
 
expire_logs_days        = 10  
max_binlog_size         = 500M  
log_bin                        = /var/log/mysql/mysql-bin.log  
[...]  

Затем остановите MySQL:

/etc/init.d/mysql stop

Теперь нам нужно синхронизировать два mysql сервера. Мы сделаем это, скопировав каталог данных mysql с мастера на слейв, а также файл конфигурации debian, который содержит пользователя debian-sys-maint. Это можно сделать, так как мы остановили mysql на обоих серверах.

На сервере 1:

scp -pr /var/lib/mysql/* [email protected]:/var/lib/mysql/
scp -pr /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Теперь мы снова запускаем MySQL на мастер-сервере:

/etc/init.d/mysql start

Войдите в оболочку MySQL как пользователь root…

mysql -u root -p

… и выполните эту команду в оболочке MySQL…

 SHOW MASTER STATUS; 

… чтобы получить статус MySQL мастера:

mysql> SHOW MASTER STATUS;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 106 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

Информация, которая нам нужна для следующего шага, это файл binlog mysql-bin.000002 и позиция binlog 106. Нам нужны те же данные для server2 позже.

Теперь выполните эту команду в оболочке MySQL на мастере, чтобы подключить его к слейву:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.106’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Затем проверьте статус слейва:

SHOW SLAVE STATUS \G

Важно, чтобы и Slave_IO_Running, и Slave_SQL_Running имели значение Yes в выводе.

На сервере 2:

Войдите в оболочку MySQL как пользователь root…

mysql -u root -p

… и выполните эту команду в оболочке MySQL:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=’192.168.0.105’, MASTER_USER=’slaveuser’, MASTER_PASSWORD=’slave_user_password’, MASTER_LOG_FILE=’mysql-bin.000002’, MASTER_LOG_POS=106;
START SLAVE;

Затем проверьте статус слейва:

SHOW SLAVE STATUS \G

Важно, чтобы и Slave_IO_Running, и Slave_SQL_Running имели значение Yes в выводе

Конфигурация репликации mysql master/master завершена, и мы продолжаем установку других программных пакетов.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.