MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Балансиране на натоварването на базата данни с ProxySQL &AWS Aurora

ProxySQL е доказано решение, което помага на администраторите на бази данни да се справят с изискванията за висока наличност на техните бази данни. Тъй като е наясно с SQL, може да се използва и за оформяне на трафика, насочен към бази данни - можете да насочвате заявки към конкретни възли, можете да пренаписвате заявки, ако е необходимо, можете също така да ограничите трафика, да внедрите SQL защитна стена, да създадете огледало на вашия трафик и го изпратете до отделна хостгрупа.

ProxySQL 2.0.5 поддържа първоначално Galera Cluster, MySQL репликация и MySQL групова репликация. За съжаление той не поддържа по подразбиране AWS Aurora; но все още има решение, което можете да използвате.

Може би се питате защо трябва да се занимавам с ProxySQL, когато AWS ми предоставя крайна точка, която ще направи разделянето на четене и запис вместо мен? Това наистина е така, но това е просто r/w разделението. ProxySQL, от друга страна, ви дава възможност не само да отделяте четене от запис, но и да поемете контрола върху трафика на вашата база данни. ProxySQL често може да спаси вашите бази данни от претоварване само чрез пренаписване на една заявка.

ProxySQL 2.0.5 и AWS Aurora

Ако решите да опитате ProxySQL, трябва да предприемете няколко стъпки. Първо, ще ви трябва екземпляр EC2, за да инсталирате ProxySQL. След като инсталирате и стартирате екземпляра, можете да инсталирате най-новата версия на ProxySQL. Препоръчваме ви да използвате хранилище за това. Можете да го настроите, като следвате стъпките в страницата с документация:https://github.com/sysown/proxysql/wiki. За Ubuntu 16.04 LTS, който използвахме, трябва да стартирате:

apt-get install -y lsb-release

wget -O - 'https://repo.proxysql.com/ProxySQL/repo_pub_key' | apt-key add -

echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/$(lsb_release -sc)/ ./ \

| tee /etc/apt/sources.list.d/proxysql.list

Тогава е време да инсталирате ProxySQL:

apt-get update

apt-get install proxysql

След това трябва да проверим дали имаме връзка от нашия ProxySQL екземпляр към възлите на AWS Aurora. Ще използваме директни крайни точки за свързване.

Можем лесно да тестваме свързаността чрез telnet към правилната крайна точка на порт 3306 :

[email protected]:~# telnet dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306

Trying 10.0.0.53...

Connected to dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com.

Escape character is '^]'.

J

5.7.12_2>ZWP-&[Ov8NzJ:H#Mmysql_native_password^CConnection closed by foreign host.

Първият изглежда добре. Ще продължим с втория възел Aurora:

[email protected]:~# telnet dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com 3306

Trying 10.0.1.90...

Connected to dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com.

Escape character is '^]'.

J

tr3'3rynMmysql_native_password^CConnection closed by foreign host.

Също така работи чудесно. Ако не можете да се свържете с възлите на Aurora, трябва да се уверите, че всички защитни битове са подравнени правилно:проверете конфигурацията на VPC, вижте дали ProxySQL възелът може да има достъп до VPC на Aurora, проверете дали групите за сигурност позволяват преминаването на трафика. Слоят за мрежова сигурност на AWS може да бъде труден за конфигуриране, ако нямате опит, но накрая трябва да можете да го накарате да работи.

След като изчистим връзката, ще трябва да създадем потребител на Aurora. Ще използваме този потребител за наблюдение на възлите на Aurora в ProxySQL. Първо, може да се наложи да инсталираме MySQL клиент на ProxySQL възел:

[email protected]:~# apt install mysql-client-core-5.7

След това ще използваме крайната точка на клъстера, за да се свържем със записващото устройство и да създадем потребител на него:

[email protected]:~# mysql -h dbtest.cluster-cqb1vho43rod.eu-central-1.rds.amazonaws.com -u root -ppassword

mysql> CREATE USER 'monuser'@'10.0.0.191' IDENTIFIED BY 'mon1t0r';

Query OK, 0 rows affected (0.02 sec)

mysql> GRANT REPLICATION CLIENT ON *.* TO 'monuser'@'10.0.0.191';

Query OK, 0 rows affected (0.00 sec)

След като направим това, можем да влезем в администраторския интерфейс на ProxySQL (по подразбиране на порт 6032), за да дефинираме потребителя на монитора и неговата парола.

[email protected]:~# mysql -P6032 -u admin -padmin -h127.0.0.1

mysql> SET mysql-monitor_username='monuser';

Query OK, 1 row affected (0.00 sec)



mysql> SET mysql-monitor_password='mon1t0r';

Query OK, 1 row affected (0.00 sec)

mysql> LOAD MYSQL VARIABLES TO RUNTIME;

Query OK, 0 rows affected (0.00 sec)

mysql> SAVE MYSQL VARIABLES TO DISK;

Query OK, 116 rows affected (0.00 sec)

Сега е време да дефинирате възлите на Aurora в ProxySQL:

mysql> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (10, 'dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com'), (20, 'dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com');

Query OK, 2 rows affected (0.01 sec)

Както можете да видите, ние използваме техните директни крайни точки като име на хост. След като това бъде направено, ще използваме таблицата mysql_replication_hostgroup, за да дефинираме хостгрупи за четене и записване. Ще трябва също да предадем правилния тип проверка – по подразбиране ProxySQL търси променлива „read_only“, докато Aurora използва „innodb_read_only“, за да прави разлика между записващия и четците.

mysql> SHOW CREATE TABLE mysql_replication_hostgroups\G

*************************** 1. row ***************************

       table: mysql_replication_hostgroups

Create Table: CREATE TABLE mysql_replication_hostgroups (

    writer_hostgroup INT CHECK (writer_hostgroup>=0) NOT NULL PRIMARY KEY,

    reader_hostgroup INT NOT NULL CHECK (reader_hostgroup<>writer_hostgroup AND reader_hostgroup>=0),

    check_type VARCHAR CHECK (LOWER(check_type) IN ('read_only','innodb_read_only','super_read_only')) NOT NULL DEFAULT 'read_only',

    comment VARCHAR NOT NULL DEFAULT '', UNIQUE (reader_hostgroup))

1 row in set (0.00 sec)



mysql> INSERT INTO mysql_replication_hostgroups VALUES (10, 20, 'innodb_read_only', 'Aurora');

Query OK, 1 row affected (0.00 sec)

mysql> LOAD MYSQL SERVERS TO RUNTIME;

Query OK, 0 rows affected (0.00 sec)

Това е всичко, сега можем да видим как ProxySQL конфигурира възлите в конфигурацията по време на изпълнение:

mysql> SELECT hostgroup_id, hostname, port  FROM runtime_mysql_servers;

+--------------+-----------------------------------------------------------------------------+------+

| hostgroup_id | hostname                                                                    | port |

+--------------+-----------------------------------------------------------------------------+------+

| 10           | | 3306 |

| 20           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com               | 3306 |

+--------------+-----------------------------------------------------------------------------+------+

3 rows in set (0.00 sec)

Както можете да видите, писателят е dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com. Нека сега да опитаме преминаването при отказ:

mysql> SELECT hostgroup_id, hostname, port  FROM runtime_mysql_servers;

+--------------+-----------------------------------------------------------------------------+------+

| hostgroup_id | hostname                                                                    | port |

+--------------+-----------------------------------------------------------------------------+------+

| 10           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1-eu-central-1a.cqb1vho43rod.eu-central-1.rds.amazonaws.com | 3306 |

| 20           | dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com               | 3306 |

+--------------+-----------------------------------------------------------------------------+------+

3 rows in set (0.00 sec)

Както можете да видите, writer (хостгрупа 10) се промени на втория възел.

Заключение

Това е основно всичко - както можете да видите, настройката на AWS Aurora възли в ProxySQL е доста прост процес.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB JSON_TYPE() Обяснено

  2. ClusterControl CMON HA за висока наличност на разпределена база данни – част втора (настройка на GUI достъп)

  3. Проектиране на база данни 101:Дялове в MySQL

  4. Как работи FLOOR() в MariaDB

  5. Използване на MyRocks Storage Engine с MariaDB сървър