Имеется сайт на 1c bitrix. App и DB на одном хосте — все как разворачивает 1c bitrix окружение. Для того, что бы обезопасить себя от проблем с одним хостом был поднят второй аналогичный хост, а между DB была настроена master-master репликация. Однако, это временное решение и пришло время выносить DB на отдельные хосты.
Исходные данные
Для наглядности.
Существует следующая схема:
В результате должно получиться следующее:
Подготовка новых хостов
На два хоста установлена и обновлена CentOS 6.
Подключаю репозиторий percona
# yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.x86_64.rpm
Этого вполне достаточно. Перехожу к установке Percona Server.
Установка Percona Server
После подключения репозитория Percona делаю
# yum update
Будет предложено заменить бибилиотеки mysql:
Installing: Percona-Server-shared-51 replacing mysql-libs.x86_64 5.1.73-3.el6_5
Соглашаюсь, затем устанавливаю Percona-Server-55:
newdb1# yum install Percona-Server-shared-55 Percona-Server-client-55 Percona-Server-server-55
Того же самого результата можно было добиться, выполнив после подключения репозитория:
newdb1# yum install Percona-Server-shared-51 Percona-Server-shared-55 Percona-Server-client-55 Percona-Server-server-55
Устанавливаю Percona-Server на обоих узлах.
Подготовка к переключению
Теперь самое интересное. Погдотовка к переключению сайта на 1c-bitrix к успользованию новых узлов.
Общий план у меня такой:
1. Снятие текущего дампа с резервного узла, фиксирование позиции bin-log в этот момент.
2. Отключение репликации между текущими боевыми узлами.
3. Подключение нового отдельного узла БД в качестве master-passive к текущему боевому.
4. Переключение трафика на отдельный узел БД.
5. Организация master-master репликации для новых узлов.
Итак, обо все по порядку.
Снятие дампа с резервного узла
Еще раз повторюсь, что между текущими узлами для БД настроена master-master репликация, поэтому я просто снимаю дамп с резервного в данный момент узла.
db1# mysqldump db_name > db_name.sql
Не забываю на нагруженном узле посмотреть позицию бинарного лога на момент снятия дампа:
db2# echo "show master status;" | mysql
Получаю
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000103 | 85631983| | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Отключение репликации между текущими боевыми узлами
В теории, можно этого не делать, если использовать на новых узлах server-id, отличный от двух текущих.
Но я решил, на новых узлах использовать так же server-id=1 и server-id=2.
Отключаю репликацию между боевыми узлами — на обоих:
db1# echo "stop slave;" | mysql
Подключение нового узла в репликацию к текущему
Необходимо, что бы server-id нового и старого узлов, между которыми надо настроить репликацию отличались. (логично!)
Например, у меня под нагрузкой находилась db2(server-id=2), поэтому я ее дружил в newdb1(server-id=1).
Сначала восстанавливаю на новом узле дамп, полученный на первом шаге.
newdb1# cat db_name.sql | mysql db_name
Затем на подключаю этот узел как slave к основному
Не забываю перед этим создать пользователя для репликации.
newdb1# mysql
mysql> CHANGE MASTER TO MASTER_HOST = 'db1', MASTER_USER = 'repl', MASTER_PASSWORD = 'p@ssword', MASTER_LOG_FILE = 'mysql-bin.000103', MASTER_LOG_POS = 85631983; start slave;
Проверяю лог, статус slave( mysql> show slave status\G;
), сами данные в базе.
Убеждаюсь, что все хорошо, данные реплицируются, ошибок нет, значит могу переходить к переключению mysql трафика на новые узлы.
Переключение трафика на отдельный узел БД
Перед тем, как что-то менять, надо убедиться, что это заработает.
Создаю нового пользователя на newdb1, проверяю, что могу подключиться к новому узлу БД.
db2# mysql -h newdb1 -u user -p db_name
mysql> show databases;
Как я понял, в 1c-bitrix настройки базы данных храняться в 2х файлах:
/home/bitrix/www/bitrix/.settings.php (этого файла может не быть)
/home/bitrix/www/bitrix/php_interface/dbconn.php
(Кроме этого стоит посмотреть еще в /home/bitrix/ext_www/ доплнительные сайты, у котороых могут быть свои настройки БД)
Дальше я подготовил новые .settings.php и dbconn.php и в час наименьшей загрузки их подставил приложению. Трафик пошел на новый узел БД.
Погасил mysql для надежности на db1 и db2.
Завершающим этапом идет настройка master-master (active-passive) между новыми узлами
Не забываю убрать за собой — удалить временных пользователей репликации (между newdb1 и db2), дампы баз и т.д.
P.S. Получилось обобщенно, без конкретики, и к тому же не раскрыт вопрос балансировки. AS IS, друзья, но я стараюсь =)