0

Переезд 1c bitrix на отдельный percona server

Имеется сайт на 1c bitrix. App и DB на одном хосте — все как разворачивает 1c bitrix окружение. Для того, что бы обезопасить себя от проблем с одним хостом был поднят второй аналогичный хост, а между DB была настроена master-master репликация. Однако, это временное решение и пришло время выносить DB на отдельные хосты.

Исходные данные

Для наглядности.
Существует следующая схема:
percona-bitrix-01

В результате должно получиться следующее:
percona-bitrix-02

Подготовка новых хостов

На два хоста установлена и обновлена 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, друзья, но я стараюсь =)

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.