Использование cPanel (WHM) для управления кластером
WHM - неплохой инструмент управления сервером. Хоть он и платный, но разработчки постарались на славу. Довольно распространенным является установка WHM/cPanel на один сервер, который будет содержать и базы данных, и файлы сайтов, и учетные записи пользователей. Но что же делать, если у Вас есть несколько серверов и отдельный сервер для баз данных?
На первый взгляд все до безобразия просто - поставить WHM/cPanel на несколько серверов и радоваться жизни. Но это только на первый взгляд.В этой статье хочу описать подход к настройке кластера серверов, в котором используется WHM/cPanel для управления конфигурацией.
На первом /главном сервере:
- Устанавливаем cPanel на главный сервер.
- Настраиваем на нем nfs server
- Монтируем папки home и
/usr/local/apache/conf
на второй сервер.
Генерируем ключи 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
На втором сервере
Создаем симлинки:
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-го и т.д серверов делается по аналогии. Довольно важно подредактировать все хуки, что бы при внесении изменений на главном сервере, они реплицировались на зависимые.