Има различни причини за добавяне на балансьор на натоварването между вашето приложение и вашата база данни. Ако имате голям трафик (и искате да балансирате трафика между различни възли на базата данни) или искате да използвате балансира на натоварването като единична крайна точка (така че в случай на отказ, този балансьор на натоварване ще се справи с този проблем, изпращайки трафика към наличен/здрав възел.) Възможно е също така да искате да използвате различни портове за запис и четене на данни от вашата база данни.
Във всички тези случаи ще ви бъде полезен балансьор на натоварването и ако имате MariaDB клъстер, една от опциите за това е използването на MaxScale, който е прокси за база данни за MariaDB бази данни.
В този блог ще ви покажем как да го инсталирате и конфигурирате ръчно и как ClusterControl може да ви помогне в тази задача. За този пример ще използваме MariaDB репликационен клъстер с 1 главен и 1 подчинен възел и CentOS8 като операционна система.
Как да инсталирате MaxScale
Ще приемем, че имате стартирана и работеща база данни MariaDB, както и машина (виртуална или физическа) за инсталиране на MaxScale. Препоръчваме ви да използвате друг хост, така че в случай на повреда на главния, MaxScale може да премине при отказ към подчинения възел, в противен случай MaxScale не може да предприеме никакви действия, ако сървърът, на който работи, се повреди.
Има различни начини за инсталиране на MaxScale, в този случай ще използваме хранилищата на MariaDB. За да го добавите към сървъра MaxScale, трябва да изпълните:
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Сега инсталирайте пакета MaxScale:
$ yum install maxscale
Сега имате инсталиран вашият MaxScale възел, преди да започнете, трябва да го конфигурирате.
Как да конфигурирате MaxScale
Тъй като MaxScale изпълнява задачи като удостоверяване, наблюдение и други, трябва да създадете потребител на база данни с някои специфични привилегии:
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
Имайте предвид, че MariaDB версии от 10.2.2 до 10.2.10 също изискват:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Сега имате готов потребител на базата данни, нека да видим конфигурационните файлове. Когато инсталирате MaxScale, файлът maxscale.cnf ще бъде създаден под /etc/. Има няколко променливи и различни начини да го конфигурирате, така че нека видим пример:
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
В тази конфигурация имаме 2 възела на базата данни, 192.168.100.126 (главен) и 192.168.100.127 (подчинен), както можете да видите в раздела „Определяне на сървъри“.
Имаме също 2 различни услуги, една за четене, където има подчинен възел, и друга за четене-запис, където има главния възел.
Накрая имаме 2 слушателя, по един за всяка услуга. Слушателят само за четене, слушащ през порт 4008, и този за четене и запис, слушащ в порт 4006.
Това е основен конфигурационен файл. Ако имате нужда от нещо по-конкретно, можете да следвате официалната документация на MariaDB.
Сега сте готови да го стартирате, така че просто стартирайте:
$ systemctl start maxscale.service
И проверете:
$ maxctrl list services
ff $ maxctrl list servers
Тук можете да намерите списък с maxctrl команди или дори да използвате maxadmin за да го управлявате.
Сега нека тестваме връзката. За това можете да опитате да получите достъп до вашата база данни, като използвате MaxScale IP адреса и порта, който искате да тествате. В нашия случай трафикът на порт 4006 трябва да бъде изпратен към сървър 1, а трафикът на порт 4008 към сървър 2.
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
Работи!
Как да разположите MaxScale с ClusterControl
Нека сега да видим как можете да използвате ClusterControl, за да опростите тази задача. За това ще приемем, че вашият MariaDB клъстер е добавен към ClusterControl.
Отидете на ClusterControl -> Изберете клъстера MariaDB -> Действия на клъстера -> Добавяне на Load Balancer -> MaxScale.
Тук можете да разположите нов възел MaxScale или можете също да импортирате съществуващ един. Ако го разгръщате, трябва да добавите IP адрес или име на хост, идентификационни данни на администратора и потребителя MaxScale, количество нишки и портове (само за запис и четене). Можете също да посочите кой възел на базата данни искате да добавите към конфигурацията на MaxScale.
Можете да наблюдавате задачата в секцията ClusterControl Activity. Когато приключи, ще имате нов възел MaxScale във вашия MariaDB клъстер.
И изпълнение на командите MaxScale от потребителския интерфейс на ClusterControl, без да е необходимо достъп до сървър чрез SSH.
Изглежда по-лесно, отколкото да го внедрявате ръчно, нали?
Заключение
Наличието на Load Balancer е добро решение, ако искате да балансирате или разделите трафика си, или дори за действия при отказ, а MaxScale, като продукт на MariaDB, е добър вариант за бази данни на MariaDB.
Инсталацията е лесна, но конфигурацията и използването може да са трудни, ако е нещо ново за вас. В този случай можете да използвате ClusterControl, за да го разгръщате, конфигурирате и управлявате по по-лесен начин.