MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Równoważenie obciążenia bazy danych z ProxySQL i AWS Aurora

ProxySQL to sprawdzone rozwiązanie, które pomaga administratorom baz danych radzić sobie z wymaganiami dotyczącymi wysokiej dostępności ich baz danych. Ponieważ jest świadomy SQL, może być również wykorzystywany do kształtowania ruchu w kierunku baz danych - możesz kierować zapytania do poszczególnych węzłów, możesz przepisywać zapytania w razie potrzeby, możesz także dławić ruch, wdrażać zaporę SQL, tworzyć zwierciadło twojego ruchu i wyślij je do oddzielnej grupy hostów.

ProxySQL 2.0.5 natywnie obsługuje Galera Cluster, MySQL Replication i MySQL Group Replication. Niestety domyślnie nie obsługuje AWS Aurora; ale nadal istnieje obejście, którego można użyć.

Możesz zadać sobie pytanie, po co mam zawracać sobie głowę ProxySQL, skoro AWS zapewnia mi punkt końcowy, który wykona dla mnie podział odczytu i zapisu? Rzeczywiście tak jest, ale to tylko podział r/w. Z drugiej strony ProxySQL daje możliwość nie tylko oddzielenia odczytów od zapisów, ale także przejęcia kontroli nad ruchem w bazie danych. ProxySQL często może uchronić Twoje bazy danych przed przeciążeniem, po prostu przepisując pojedyncze zapytanie.

ProxySQL 2.0.5 i AWS Aurora

Jeśli zdecydujesz się wypróbować ProxySQL, musisz wykonać kilka kroków. Po pierwsze, będziesz potrzebować instancji EC2, aby zainstalować ProxySQL. Po uruchomieniu instancji możesz zainstalować najnowszą wersję ProxySQL. Zalecamy skorzystanie z repozytorium do tego. Możesz to skonfigurować, wykonując czynności opisane na stronie dokumentacji:https://github.com/sysown/proxysql/wiki. W przypadku Ubuntu 16.04 LTS, którego używaliśmy, musisz uruchomić:

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

Nadszedł czas na instalację ProxySQL:

apt-get update

apt-get install proxysql

Następnie musimy sprawdzić, czy mamy łączność z naszej instancji ProxySQL do węzłów AWS Aurora. Do połączenia użyjemy bezpośrednich punktów końcowych.

Możemy łatwo przetestować łączność za pomocą telnetu z właściwym punktem końcowym na porcie 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.

Pierwszy wygląda dobrze. Przejdziemy do drugiego węzła 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.

Działa również świetnie. Jeśli nie możesz połączyć się z węzłami Aurora, musisz upewnić się, że wszystkie bity bezpieczeństwa są odpowiednio wyrównane:sprawdź konfigurację VPC, sprawdź, czy węzeł ProxySQL może uzyskać dostęp do VPC Aurora, sprawdź, czy grupy bezpieczeństwa zezwalają na przepływ ruchu. Warstwa bezpieczeństwa sieci AWS może być trudna do skonfigurowania, jeśli nie masz odpowiedniego doświadczenia, ale w końcu powinieneś być w stanie sprawić, by działała.

Po uporządkowaniu łączności będziemy musieli utworzyć użytkownika na Aurorze. Użyjemy tego użytkownika do monitorowania węzłów Aurora w ProxySQL. Po pierwsze, być może będziemy musieli zainstalować klienta MySQL na węźle ProxySQL:

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

Następnie użyjemy punktu końcowego klastra, aby połączyć się z pisarzem i utworzyć na nim użytkownika:

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

Po wykonaniu tej czynności możemy zalogować się do interfejsu administratora ProxySQL (domyślnie na porcie 6032), aby zdefiniować użytkownika monitora i jego hasło.

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

Nadszedł czas na zdefiniowanie węzłów Aurora w 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)

Jak widać, używamy ich bezpośrednich punktów końcowych jako nazwy hosta. Po wykonaniu tej czynności użyjemy tabeli mysql_replication_hostgroup do zdefiniowania grup hostów odczytujących i zapisujących. Będziemy musieli również przekazać poprawny typ sprawdzenia — domyślnie ProxySQL szuka zmiennej „tylko do odczytu”, podczas gdy Aurora używa „innodb_read_only”, aby odróżnić program zapisujący od czytników.

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)

To jest to, teraz możemy zobaczyć, jak ProxySQL skonfigurował węzły w konfiguracji wykonawczej:

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)

Jak widać, autorem jest dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com. Wypróbujmy teraz przełączanie awaryjne:

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)

Jak widać, pisarz (grupa hostów 10) zmienił się na drugi węzeł.

Wniosek

To w zasadzie to - jak widać, konfiguracja węzłów AWS Aurora w ProxySQL jest dość prostym procesem.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nasze najpopularniejsze posty na blogu o bazach danych w 2017 r.

  2. MariaDB JSON_ARRAY_APPEND() Objaśnienie

  3. MariaDB ROUND() a OBCIĄŻENIE()

  4. Jak zainstalować i zabezpieczyć MariaDB 10 w CentOS 6?

  5. Wybierz wszystko przed lub po określonej postaci w MariaDB