|
||
Ответить |
|
#1
|
|
Вес репутации:
0
Регистрация: 27.02.2009
Адрес: Москва
Сообщений: 7,302
Сказал(а) спасибо: 578
Спасибок 2,623
в 1,832 сообщениях |
Синхронизация двух серверов Apache + MySQL на FreeBSD -
11.01.2011, 12:50
В данной статье речь пойдет о реализации кластера состоящего из двух нод с резервированием популярной связки для веб сервера Apache + MySQL + FreeBSD (или любой Linux).
Коротко о серверах. В каждом сервере находится по две сетевые карты. Одной они подключены — к свитчу, между вторыми короткий патчкорд, чтобы не нагружать наш свитч лишним трафиком. Соответственно два сетевых интерфейса em0 – для внешки, rl0 – для репликации. На первом сервере для интерфейса rl0 ставим IP 192.168.0.1 на втором 192.168.0.2. 1. APACHE Задача — синхронизация файлов виртуальных хостов. Будем использовать rsync в связке с ssh. Для этого на первом сервере в файле /etc/ssh/sshd_config пишем: PHP код:
PHP код:
Далее разрешим доступ root без пароля, для этого сгенерируем пару ключей: ssh-keygen -t rsa scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys2 ssh-keygen -t rsa scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys2 /usr/local/bin/rsync -e 'ssh -l root -i /root/.ssh/id_rsa' --progress -lzuogthvr --compress-level=9 --delete-after /opt/vhosts/sitename.ru/ [email protected]:/opt/vhosts/sitename.ru/ >> /root/logs/sync.sitename Разрешим запуск: chmod +x /root/scripts/sync.sh PHP код:
2. MySQL На первом сервере в файле my.cnf пишем следующее: PHP код:
На втором сервере в my.cnf: PHP код:
На первом сервере выполняем: mysql> FLUSH TABLES WITH READ LOCK; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000031 | 2073 | base | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) mysqldump -u root -p base > /root/base.db mysql> UNLOCK TABLES; На втором сервере: mysql>CREATE DATABASE base; mysql> USE base; mysql> SOURCE /root/base.db (путь к нашему дампу) mysql> CHANGE MASTER TO MASTER_LOG_FILE='srv011-bin.000813'; Query OK, 0 rows affected (0.05 sec) srv011-bin.000813 — то что писали в текстовый файлик mysql> CHANGE MASTER TO MASTER_LOG_POS=1156293; Query OK, 0 rows affected (0.05 sec) 1156293 — оттуда же mysql> start slave; Query OK, 0 rows affected (0.00 sec) mysql> SHOW SLAVE STATUS\G; Реализация кластера. Т. к. способом обновления ядра первоначально было выбрано — бинарное обновление, самый удобный вариант CARP отпадал. CARP отличный инструмент, к сожалению, не доступный без пересборки ядра. Значит выбираем heartbeat – довольно известное ПО, к сожалению портированное с linux, из-за чего тянет уйму не нужных зависимостей, но это не так страшно. cd /usr/ports/sysutils/heartbeat make && make install && make clean или portmaster sysutils/heartbeat /usr/local/etc/ha.d/authkeys: PHP код:
PHP код:
/usr/local/etc/ha.d/hareresources: srv1.sitename.ru 212.212.212.212/28/em0 Аналогично на втором сервере, за исключением IP адреса в /usr/local/etc/ha.d/ha.cf: PHP код:
/usr/local/etc/ocf/resources.d/heartbeat/IPaddr Ищем строку PHP код:
PHP код:
Hearbeat можно управлять командами: Сделать ноду принудительно основной: /usr/local/lib/heartbeat/hb_takeover /usr/local/lib/heartbeat/hb_standby <!-- Вопросы задаем на форуме, не в ЛС --> |
Ответить |
Опции темы | |
Опции просмотра | |
|
|