Статьи

MaxScale для остальных, часть 2: кластер MariaDB

Первый пост в блогеВ этой серии было краткое введение в MaxScale, но теперь пришло время запачкать руки. Мы получим более практический взгляд на MaxScale и начнем применять его. Следующее основано на простом Доказательстве Концепции, которое я сделал недавно. Приложение представляет собой интернет-магазин среднего размера, в котором масштабируемость становится проблемой. Они используют PHP и со старой и довольно негибкой структурой, поэтому, хотя изменение способа использования базы данных возможно, это нелегко, и маршрутизация базы данных в коде приложения также не очень хорошая идея.

Проблемы масштабируемости влияют на чтение, но, поскольку весь трафик направляется на один сервер базы данных, когда этот сервер работает медленно, запись, как и при вводе заказа, идет очень медленно, и это недопустимо. Поэтому нам нужен был способ перенаправления чтения одному или нескольким ведомым и сохранения всех записей на одном сервере. То, что ведомые устройства могут быть слегка задержаны из-за асинхронного характера репликации MariaDB, не было определено как проблема, но одной из задач этого POC было получить систему, в которой это можно было бы протестировать. Но прежде чем мы зайдем так далеко, нам нужно настроить MaxScale.

Этот пост действительно предназначен для того, чтобы показать, как настроить кластер MariaDB с помощью репликации MariaDB. Если вы уже знаете все это, то вы можете просто взглянуть на это и подождать, пока часть 3 этой серии, где я настраиваю MaxScale для запуска на кластере, который мы здесь настраиваем. Даже если вы знаете, как настроить MariaDB и Replication, и все такое, посмотрите здесь, чтобы узнать настройки сервера, IP-адреса и тому подобное, если вы хотите перейти к части 3.

Настройка серверов

Все серверы, которые мы собираемся использовать, работают под управлением CetnOS 6.5, и он настроен как базовый сервер . После того, как это сделано, я захожу в root и запускаю несколько дополнительных вещей, чтобы облегчить тестирование. Сначала я обновляю все пакеты CentOS до последней версии.

 # yum update 

После этого я настроил все серверы на использование статического IP. Для этого мне нужно настроить два файла:
/ etc / sysconfig / network :

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.0.1

Полагаю, вы понимаете, что здесь происходит и как настроить это для своих собственных целей, единственное, что затронуло это то, что я добавил шлюз. Второй сетевой файл, который нужно настроить, настроит сеть на сетевом адаптере eth0:
/ etc / sysconfig / network-scripts / ifcfg-eth0:

DEVICE=eth0
HWADDR=08:00:27:9F:C8:48
TYPE=Ethernet
UUID=5dba1546-197d-4a82-8606-7a9f05e9bb44
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.0.160

Здесь я изменил BOOTPROTO и NETMASK добавил IPADDR. Конечно, IPADDR отличается для каждого сервера. Чтобы использовать эти новые настройки сети, мне нужно перезапустить сеть CentOS:

 # /etc/init.d/network restart

После этого нужно сделать только один более общий параметр CentOS, который заключается в добавлении репозитория MariaDB в конфигурацию менеджера пакетов yum. Это путем добавления файла репозитория MariaDB:

 # vi /etc/yum.repos.d/MariaDB.repo

И затем сделайте этот файл похожим на это:

# MariaDB 5.5 CentOS repository list - created 2014-02-02 09:27 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Прежде чем мы закончим настройку сервера, убедитесь, что брандмауэр Linux iptables не запущен и не запущен при перезагрузке, выполнив команды:

# /etc/init.d/iptables stop
# chkconfig iptables off 

На этом настройка общего сервера завершена, теперь мы готовы установить первый сервер, который будет выполнять роль главного.

Настройка главного сервера MariaDB

Следуя общей настройке сервера, как описано выше, установив IPADDR на 192.168.0.160 в моем случае, мы готовы выполнить конкретную настройку. Для начала нам нужно установить сервер MariaDB и клиент:

# yum install MariaDB-server
# yum install MariaDB-client

Затем нам нужно настроить MariaDB как мастер, прежде чем мы его запустим, мы делаем это путем изменения файла конфигурации сервера MariaDB:

# vi /etc/my.cnf.d/server.cnf

А в разделе [mysqld] добавьте:

[mysqld]
server_id=1
log-bin

На этом мы завершаем начальную основную настройку, поэтому теперь мы можем запустить сервер, чтобы мы могли выполнить более простую настройку:

 # /etc/init.d/mysql start

Мы собираемся добавить ведомые устройства в 192.168.0.162 и 192.168.0.163, и мы должны запустить MaxScale на узле 192.168.0.165, поэтому нам нужно создать пользователя, который может обращаться к мастеру соответствующим образом:

# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.35-MariaDB-log MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> grant replication slave on *.* to 'repl'@'192.168.0.162' identified by 'repl';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant replication slave on *.* to 'repl'@'192.168.0.163' identified by 'repl';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on *.* to 'maxuser'@'192.168.0.165' identified by 'maxpwd';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> show master status;
+----------------------+----------+--------------+------------------+
| File  | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| localhost-bin.000001 |  245 |  |  |
+----------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

На этом настройка мастера завершена, теперь мы готовы приступить к настройке подчиненных устройств.

Настройка подчиненных серверов MariaDB

Подчиненные серверы будут установлены на узлах 192.168.0.162 и 192.168.0.163. Начнем с того, что они имеют ту же базовую настройку, что и мастер выше, за исключением того, что IPADDR, конечно, отличается. Затем мы устанавливаем сервер MariaDB и клиент:

# yum install MariaDB-server
# yum install MariaDB-client

Затем нам нужно выполнить некоторую базовую настройку сервера, в этом случае нам нужно установить server_id подчиненных устройств, для этого теста они будут установлены соответственно на 11 и 12:

 # vi /etc/my.cnf.d/server.cnf 

И в 192.168.0.162 мы установили раздел [mysqld] на:

[mysqld]
server_id=11

И 192.168.0.163:

[mysqld]
server_id=12 

После этого мы можем запустить MariaDB на обоих серверах:

 # /etc/init.d/mysql start

и затем мы настраиваем эти серверы как ведомые устройства мастера, который мы настроили выше, выполняя следующие действия как 192.168.0.162, так и 192.168.0.163:

# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.35-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> change master to master_host = '192.168.0.160', master_user = 'repl', master_password = 'repl', master_log_file = 'localhost-bin.000001', master_log_pos = 245;
Query OK, 0 rows affected (0.04 sec)

MariaDB [(none)]> slave start;
Query OK, 0 rows affected (0.00 sec)

Теперь у нас есть главный сервер и два подчиненных. Прежде чем мы закончим это и перейдем к настройке самого MaxScale, давайте проверим эту работу репликации. На мастере сделайте это:

# mysql test
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.35-MariaDB-log MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [test]> create table t1(c1 int);
Query OK, 0 rows affected (0.02 sec)

MariaDB [test]> insert into t1 values(1);
Query OK, 1 row affected (0.01 sec)

Это означает, что теперь у нас есть таблица в тестовой базе данных, которая должна быть реплицирована на два ведомых устройства. Запустите эту команду на двух ведомых, чтобы проверить;

# mysql test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.35-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [test]> select * from t1;
+------+
| c1  |
+------+
|  1 |
+------+
1 row in set (0.00 sec)

MariaDB [test]> exit
Bye

На этом завершается настройка главного / подчиненного кластера, который мы будем использовать с MaxScale, в следующем блоге этой серии, и это именно то, что мы должны сделать: настройте MaxScale, наконец!

/ Karlsson