MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Penyeimbangan Beban Basis Data dengan ProxySQL &AWS Aurora

ProxySQL adalah solusi terbukti yang membantu administrator database menangani persyaratan ketersediaan database yang tinggi. Karena SQL-aware, itu juga dapat digunakan untuk membentuk lalu lintas menuju database - Anda dapat merutekan kueri ke node tertentu, Anda dapat menulis ulang kueri jika diperlukan, Anda juga dapat membatasi lalu lintas, menerapkan firewall SQL, membuat cermin lalu lintas Anda dan mengirimkannya ke grup host terpisah.

ProxySQL 2.0.5 secara native mendukung Galera Cluster, MySQL Replication dan MySQL Group Replication. Sayangnya, secara default, tidak mendukung AWS Aurora; tetapi masih ada solusi yang dapat Anda gunakan.

Anda mungkin bertanya pada diri sendiri, mengapa saya harus repot dengan ProxySQL ketika AWS memberi saya titik akhir yang akan melakukan pemisahan baca-tulis untuk saya? Itu memang kasusnya tapi itu hanya r/w split. ProxySQL, di sisi lain, memberi Anda kesempatan untuk tidak hanya memisahkan pembacaan dari penulisan, tetapi juga untuk mengendalikan lalu lintas basis data Anda. ProxySQL sering kali dapat menyelamatkan database Anda dari kelebihan beban hanya dengan menulis ulang satu kueri.

ProxySQL 2.0.5 dan AWS Aurora

Jika Anda memutuskan untuk mencoba ProxySQL, ada beberapa langkah yang harus Anda ambil. Pertama, Anda memerlukan instans EC2 untuk menginstal ProxySQL. Setelah instance aktif dan berjalan, Anda dapat menginstal ProxySQL terbaru. Kami akan merekomendasikan untuk menggunakan repositori untuk itu. Anda dapat mengaturnya dengan mengikuti langkah-langkah di halaman dokumentasi:https://github.com/sysown/proxysql/wiki. Untuk Ubuntu 16.04 LTS, yang kami gunakan, Anda harus menjalankan:

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

Maka saatnya menginstal ProxySQL:

apt-get update

apt-get install proxysql

Kemudian kami harus memverifikasi bahwa kami memiliki konektivitas dari instans ProxySQL kami ke node AWS Aurora. Kami akan menggunakan titik akhir langsung untuk konektivitas.

Kita dapat dengan mudah menguji konektivitas menggunakan telnet ke titik akhir yang benar pada port 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.

Yang pertama terlihat bagus. Kami akan melanjutkan dengan simpul Aurora kedua:

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

Bekerja dengan baik juga. Jika Anda tidak dapat terhubung ke node Aurora, Anda perlu memastikan bahwa semua bit keamanan disejajarkan dengan benar:periksa konfigurasi VPC, lihat apakah node ProxySQL dapat mengakses VPC Aurora, periksa apakah grup keamanan mengizinkan lalu lintas untuk melewatinya. Lapisan keamanan jaringan AWS mungkin sulit untuk dikonfigurasi jika Anda tidak memiliki pengalaman, tetapi pada akhirnya Anda harus dapat membuatnya berfungsi.

Setelah konektivitas beres, kita perlu membuat pengguna di Aurora. Kami akan menggunakan pengguna itu untuk memantau node Aurora di ProxySQL. Pertama, kita mungkin harus menginstal klien MySQL pada node ProxySQL:

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

Kemudian kita akan menggunakan titik akhir cluster untuk terhubung ke penulis dan membuat pengguna di atasnya:

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

Setelah ini selesai, kita dapat masuk ke antarmuka admin ProxySQL (secara default pada port 6032) untuk menentukan pengguna monitor dan kata sandinya.

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

Sekarang saatnya mendefinisikan node Aurora di 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)

Seperti yang Anda lihat, kami menggunakan titik akhir langsungnya sebagai nama host. Setelah ini selesai, kita akan menggunakan tabel mysql_replication_hostgroup untuk mendefinisikan hostgroup pembaca dan penulis. Kami juga harus melewati jenis pemeriksaan yang benar - secara default ProxySQL mencari variabel 'read_only' sementara Aurora menggunakan 'innodb_read_only' untuk membedakan antara penulis dan pembaca.

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)

Ini dia, sekarang kita dapat melihat bagaimana ProxySQL mengonfigurasi node dalam konfigurasi runtime:

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)

Seperti yang Anda lihat, dbtest-instance-1.cqb1vho43rod.eu-central-1.rds.amazonaws.com adalah penulisnya. Mari kita coba failover sekarang:

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)

Seperti yang Anda lihat, penulis (hostgroup 10) telah berubah ke node kedua.

Kesimpulan

Ini pada dasarnya - seperti yang Anda lihat, menyiapkan node AWS Aurora di ProxySQL adalah proses yang cukup sederhana.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gambar Docker Populer untuk Server MySQL dan MariaDB

  2. Operator MariaDB MINUS Dijelaskan

  3. Bagaimana WEEKOFYEAR() Bekerja di MariaDB

  4. Perbedaan Antara SYSDATE() dan SEKARANG() di MariaDB

  5. Bagaimana FROM_UNIXTIME() Bekerja di MariaDB