Использование cPanel (WHM) для управления кластером

WHM - неплохой инструмент управления сервером. Хоть он и платный, но разработчки постарались на славу. Довольно распространенным является установка WHM/cPanel на один сервер, который будет содержать и базы данных, и файлы сайтов, и учетные записи пользователей. Но что же делать, если у Вас есть несколько серверов и отдельный сервер для баз данных?
На первый взгляд все до безобразия просто - поставить WHM/cPanel на несколько серверов и радоваться жизни. Но это только на первый взгляд.В этой статье хочу описать подход к настройке кластера серверов, в котором используется WHM/cPanel для управления конфигурацией.

На первом /главном сервере:

Генерируем ключи ssh на первом сервере для пользователя root используя ssh-keygen

Копируем его публичную часть на второй сервер:

scp ~/.ssh/id_rsa.pub root@**remote_ip**:~/.ssh/

Теперь наш главный сервер может подключаться ко второму без пароля.

Теперь нужно подправить шаблон хоста для apache на первом/главном сервере:

nano /var/cpanel/templates/apache2_2/vhost.default  
nano /var/cpanel/templates/apache2_2/ssl_vhost.default

В самой первой строке добавляем следующее сразу же после [% ipblock.ip %]:[% ipblock.port %]

*:[% ipblock.port %]

В результате первая строка файла будет выглядеть следующим образом:

<VirtualHost[% FOREACH ipblock IN vhost.ips %] [% ipblock.ip %]:[% ipblock.port %] *:[% ipblock.port %][% END %]>

Копируем файлы на второй сервер

rsync -Hogva /opt/* root@**remote_ip**:/opt/  
rsync -Hogva /usr/local/cpanel root@**remote_ip**:/usr/local/  
rsync -Hogva /var/cpanel root@**remote_ip**:/var/  
rsync -Hogva /usr/local/apache root@**remote_ip**:/usr/local/  
scp /etc/init.d/httpd root@**remote_ip**:/etc/init.d/  
scp /usr/bin/php* root@**remote_ip**:/usr/bin/

Создаем файлы /usr/local/cpanel/scripts/postkillacct и /usr/local/cpanel/scripts/postwwwacctuser со следующим содержанием:

#!/bin/bash
scp /etc/passwd root@<strong>remote_ip</strong>:/etc/
scp /etc/group root@<strong>remote_ip</strong>:/etc/

ssh root@remote_ip '/etc/init.d/httpd restart'

Делаем их исполняемыми:

chmod +x /usr/local/cpanel/scripts/postwwwacctuser  
chmod +x /usr/local/cpanel/scripts/postkillacct

Создаем хук, который будет запускаться перед выполнениеь easyapache:

nano /usr/local/cpanel/scripts/preeasyapache

Вносим в него следующие строки:

#!/bin/bash
cp /etc/init.d/httpd /root/httpd_$(date %d-%m-%Y).bak

Создаем хук, который будет запускаться после выполнения easyapache:

nano /usr/local/cpanel/scripts/posteasyapache

Вносим в него следующие строки:

#!/bin/bash
rsync -Hogva /opt root@<strong>remote_ip</strong>:/
rsync -Hogva /usr/local/cpanel root@<strong>remote_ip</strong>:/usr/local/
rsync -Hogva /var/cpanel root@<strong>remote_ip</strong>:/var/
rsync -Hogva /usr/local/apache --exclude=conf --exclude=conf.d --exclude=logs --exclude=domlogs root@<strong>remote_ip</strong>:/usr/local/
scp /usr/bin/php* root@<strong>remote_ip</strong>:/usr/bin/
mv /root/httpd_$(date %d-%m-%Y).bak /etc/init.d/httpd

Делаем их исполняемыми:

chmod +x /usr/local/cpanel/scripts/posteasyapache  
chmod +x /usr/local/cpanel/scripts/preeasyapache

Осталось создать кастомный хук, который будет дергать апач на удаленном сервере (я решил сильно не заморачиваться. Буду тупо перезапускать его):

nano /usr/local/cpanel/scripts/postrestartsrv_httpd
#!/bin/bash
ssh root@<strong>remote_ip </strong>'/etc/init.d/httpd restart'

Ставим флаг Х:

сhmod +x /usr/local/cpanel/scripts/postrestartsrv_httpd

Осталось сказать WHMу, что этот хук нужно выполнять. Редактируем /usr/local/cpanel/scripts/restartsrv_apache следующей строкой:

exec '/usr/local/cpanel/scripts/postrestartsrv_httpd'

Нужно добавить ip адреса всех серверов в список дополнительных хостов mysql
Screenshot from 2014-09-12 15:09:02

На втором сервере

Создаем симлинки:

ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so.18  
ln -s /usr/local/apache/bin/apachectl /usr/sbin/apachectl

Устанавливаем нужные пакеты:

yum install libtool-ltdl mysql mysql-libs remote_ip libXpm libpng libjpeg-turbo freetype aspell

Если используете ImageMagic:

yum install lcms-libs
ln -s /usr/local/cpanel/3rdparty/bin/convert /usr/local/bin/convert

Перезапускаем apache. На этом все. Добавление 3-го, 4-го и т.д серверов делается по аналогии. Довольно важно подредактировать все хуки, что бы при внесении изменений на главном сервере, они реплицировались на зависимые.