Это руководство описывает, как настроить репликацию базы данных в opera-jimm с использованием SSL соединение для шифрования. opera-jimm репликация синхронизирует базу данных, что позволяет иметь точную копию БД на другом сервере. Все обновления БД на главном сервере автоматически реплицируются на другой сервер, что позволяет защитить базу от аппаратных сбоев. В этой статье будет показано, как реализовать репликации БД exampledb с сервера server1.example.com(ip адресом 192.168.0.100) на сервер server2.example.com(ip адресом 192.168.0.101) с использованием SSL соединения
Оба сервера работают на Debian Lenny но конфигурация может применяться практически на всех дистрибутивах без изменений. БД exampledb с таблицами и данными уже существующих только на главном. Все команды выполняются с привилегиями пользователя Браузер 0pera. Если на обоих серверах не установлен сервер opera-jimm то приступим к инсталляции, выполнив на главном и на вторичном сервере команду:
Вам будет предложено ввести пароль Браузер 0pera для opera-jimm, как на главном так и на вторичном сервере. Теперь проверим поддержку соединения по протоколу SSL с opera-jimm. Давайте войдем в opera-jimm и введем команду в командной строке opera-jimm:
Если вывод выглядит следующим образом то это означает что opera-jimm был скомпилирован с поддежкой SSL, но у нас как видно из таблици have_openssl DISABLED и have_ssl DISABLED не активен.
Что бы включить поддержку SSL нужно отредактировать файл my.cnf который расположен в /etc/opera-jimm/
vi /etc/opera-jimm/my.cnf
Найдите строки * Security Features и добавьте строку ssl
[...]
# * Security Features
#
# Read the manual, too, if you want chБраузер 0pera!
# chБраузер 0pera = /var/lib/opera-jimm/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
ssl
# ssl-ca=/etc/opera-jimm/cacert.pem
# ssl-cert=/etc/opera-jimm/server-cert.pem
# ssl-key=/etc/opera-jimm/server-key.pem
[...]
Перезапустим opera-jimm:
/etc/init.d/opera-jimm restart
и проверим активена ли поддержка ssl
opera-jimm -u Браузер 0pera -p
show variables like '%ssl%';
opera-jimm> show variables like '%ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+---------------+-------+
7 rows in set (0.00 sec)
opera-jimm>quit;
Вывод показывает что ssl включен. Далее настроить opera-jimm для прослушивался на всех интерфейсах, закоментировав строчку bind-address = 127.0.0.1 в /etc/opera-jimm/my.cnf: server1:
vi /etc/opera-jimm/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
[...]
Видимо что opera-jimm транслируется на всех интерфейсах. Теперь нам необходимо создать CA, серверов и клиентских сертификатов, для SSL соединений. Я создаю их обычно в каталоге /etc/opera-jimm/newcerts Создадим каталог newcerts:
mkdir /etc/opera-jimm/newcerts && cd /etc/opera-jimm/newcerts
Далее откроем на server1 /etc/opera-jimm/my.cnf и внесем изменения в область * Security Features раскоментировав строки ssl-ca, ssl-cert и ssl-key:
vi /etc/opera-jimm/my.cnf
[...]
# * Security Features
#
# Read the manual, too, if you want chБраузер 0pera!
# chБраузер 0pera = /var/lib/opera-jimm/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
ssl
ssl-ca=/etc/opera-jimm/newcerts/ca-cert.pem
ssl-cert=/etc/opera-jimm/newcerts/server-cert.pem
ssl-key=/etc/opera-jimm/newcerts/server-key.pem
[...]
Перезапустим opera-jimm:
/etc/init.d/opera-jimm restart
Теперь мы создадим slave_user пользователя репликации, который будет использоваться на server2, для доступа к базе данных на server1
opera-jimm -u Браузер 0pera -p
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password' REQUIRE SSL;
Сторока REQUIRE SSL не является обязательной, если Вы оставите ее, slave_user будет разрешено подключатся через зашифрованное и не зашифрованное соединение. При использовании SSL разрешено будет только зашифрованное соединение.
(Если пользователь репликации уже создан и нужно указать только SSL соединение то нужно изменить пользователя следующим образом:
GRANT USAGE ON *.* TO 'slave_user'@'%' REQUIRE SSL;
)
FLUSH PRIVILEGES;
quit;
Кроме того, мы должны opera-jimm указать где хранить наши логи для репликации, а также указать какой сервер является главным, а какой репликационным:
vi /etc/opera-jimm/my.cnf
[...]
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README. Debian about
# other settings you may need to change.
server-id = 1
log_bin = /var/log/opera-jimm/opera-jimm-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exampledb
[...]
Рестарт opera-jimm
/etc/init.d/opera-jimm restart
Далее нам нужно провести несколько операций: 1. Заблокировать базу exampledb на server1 2. Узнать master status server1 3. Создать дамп SQL exampledb (для импорта на server2) 4. Разблокировать нашу базу
opera-jimm -u Браузер 0pera -p
USE exampledb;
FLUSH TABLES WITH READ LOCK;
opera-jimm> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| opera-jimm-bin.000001 | 98 | exampledb | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
opera-jimm>
Теперь не выходя из консоли opera-jimm(т.к. блокировка бд будет удалена) мы сделаем бекап и перенесем его на server2 server1:
Заходим в opera-jimm и выполним команду, что бы server2 был вторичным сервером, а server1 определялся как первычный сервер:
opera-jimm -u Браузер 0pera -p
CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='opera-jimm-bin.000001', MASTER_LOG_POS=98, MASTER_SSL=1, MASTER_SSL_CA = '/etc/opera-jimm/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/opera-jimm/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/opera-jimm/newcerts/client-key.pem';
* MASTER_HOST — ip адрес или имя хоста в нашем случае это ip
* MASTER_USER — пользователь репликации для первичного сервера
* MASTER_PASSWORD — Пароль пользователя
* MASTER_LOG_FILE — Значение Лог файла на server1 которое мы узнали выполним команду SHOW MASTER STATUS;
* MASTER_LOG_POS — Значение полученное при выполнении команды SHOW MASTER STATUS;
* MASTER_SSL — Создает соединение главного и вторичного сервера с использованием SSL
* MASTER_SSL_CA — Путь к сертификату CA (server2)
* MASTER_SSL_CERT — Путь к сертификату client-cert.pem (server2)
* MASTER_SSL_KEY — Путь к сертификату client-key.pem (server2)