sql >> Database >  >> RDS >> MariaDB

Database Load Balancing met ProxySQL &AWS Aurora

ProxySQL is een beproefde oplossing die databasebeheerders helpt bij het omgaan met de vereisten voor hoge beschikbaarheid van hun databases. Omdat het SQL-bewust is, kan het ook worden gebruikt om het verkeer richting databases vorm te geven - u kunt query's naar de specifieke knooppunten routeren, u kunt query's herschrijven als dat nodig is, u kunt ook het verkeer afremmen, SQL-firewall implementeren, een spiegel van uw verkeer en stuur het naar een aparte hostgroep.

ProxySQL 2.0.5 ondersteunt standaard Galera Cluster, MySQL-replicatie en MySQL Group-replicatie. Helaas ondersteunt het standaard AWS Aurora niet; maar er is nog steeds een oplossing die u kunt gebruiken.

Je vraagt ​​je misschien af, waarom zou ik me bezighouden met ProxySQL als AWS me een eindpunt geeft dat de lees-schrijfsplitsing voor me doet? Dat is inderdaad het geval, maar het is slechts de r/w-splitsing. ProxySQL biedt u daarentegen de mogelijkheid om niet alleen lees- en schrijfbewerkingen te scheiden, maar ook om controle te krijgen over uw databaseverkeer. ProxySQL kan vaak voorkomen dat uw databases overbelast raken door slechts een enkele query te herschrijven.

ProxySQL 2.0.5 en AWS Aurora

Als je besluit om ProxySQL eens te proberen, dan zijn er een aantal stappen die je moet nemen. Ten eerste heb je een EC2-instantie nodig om de ProxySQL op te installeren. Zodra u de instantie in gebruik heeft, kunt u de nieuwste ProxySQL installeren. We raden aan om daarvoor de repository te gebruiken. U kunt het instellen door de stappen op de documentatiepagina te volgen:https://github.com/sysown/proxysql/wiki. Voor Ubuntu 16.04 LTS, die we gebruikten, moet je uitvoeren:

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

Dan is het tijd om ProxySQL te installeren:

apt-get update

apt-get install proxysql

Vervolgens moeten we verifiëren dat we de verbinding hebben van onze ProxySQL-instantie naar AWS Aurora-knooppunten. We zullen directe eindpunten gebruiken voor de connectiviteit.

We kunnen de connectiviteit eenvoudig testen met telnet naar het juiste eindpunt op poort 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.

Eerste ziet er goed uit. We gaan verder met het tweede Aurora-knooppunt:

[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.

Werkt ook prima. Als u geen verbinding kunt maken met Aurora-knooppunten, moet u ervoor zorgen dat alle beveiligingsbits correct zijn uitgelijnd:controleer de VPC-configuratie, kijk of ProxySQL-knooppunt toegang heeft tot VPC van Aurora, controleer of beveiligingsgroepen het verkeer doorlaten. AWS-netwerkbeveiligingslaag kan lastig te configureren zijn als u niet over de ervaring beschikt, maar uiteindelijk zou u het moeten kunnen laten werken.

Als de connectiviteit is geregeld, moeten we een gebruiker maken op Aurora. We zullen die gebruiker gebruiken voor het bewaken van Aurora-knooppunten in ProxySQL. Eerst moeten we mogelijk de MySQL-client op het ProxySQL-knooppunt installeren:

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

Vervolgens zullen we het eindpunt van het cluster gebruiken om verbinding te maken met de schrijver en er een gebruiker op te maken:

[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)

Als dit gedaan is, kunnen we inloggen op de ProxySQL-beheerdersinterface (standaard op poort 6032) om de monitorgebruiker en zijn wachtwoord te definiëren.

[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)

Nu is het tijd om Aurora-knooppunten in ProxySQL te definiëren:

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)

Zoals je kunt zien, gebruiken we hun directe eindpunten als hostnaam. Zodra dit is gebeurd, zullen we de tabel mysql_replication_hostgroup gebruiken om hostgroepen voor lezers en schrijvers te definiëren. We zullen ook het juiste controletype moeten doorstaan ​​- standaard zoekt ProxySQL naar de variabele 'read_only', terwijl Aurora 'innodb_read_only' gebruikt om onderscheid te maken tussen de schrijver en de lezers.

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)

Dit is het, we kunnen nu zien hoe ProxySQL de nodes heeft geconfigureerd in runtime-configuratie:

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)

Zoals je kunt zien, is dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com de schrijver. Laten we nu de failover proberen:

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)

Zoals je kunt zien, is de schrijver (hostgroep 10) veranderd naar het tweede knooppunt.

Conclusie

Dit is het eigenlijk - zoals je kunt zien is het opzetten van AWS Aurora-knooppunten in ProxySQL een vrij eenvoudig proces.


  1. PLS-00428:er wordt een INTO-clausule verwacht in deze SELECT-instructie

  2. Voorbeeld externe tabel van Oracle

  3. Hoe krijg ik ForeignCollection Field in Cursor in Ormlite

  4. Oracle SQL - REGEXP_LIKE bevat andere tekens dan a-z of A-Z