Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cân bằng tải với ProxySQL cho Percona XtraDB Cluster

Chúng ta nên xem xét cài đặt ProxySQL trên các nút máy khách để quản lý khối lượng công việc hiệu quả trên toàn cụm mà không có bất kỳ thay đổi nào đối với các ứng dụng tạo truy vấn. Đây là giải pháp có tính khả dụng cao được đề xuất cho Percona XtraDB Cluster.
Một số tính năng phổ biến của ProxySQL là:

  • Hiệu suất cao
  • Quản lý khối lượng công việc hiệu quả
  • Bộ nhớ đệm truy vấn
  • Định tuyến truy vấn
  • Hỗ trợ chuyển đổi dự phòng
  • Cấu hình nâng cao với 0 thời gian chết
  • Proxy lớp ứng dụng
  • Đa nền tảng
  • Hỗ trợ cấu trúc liên kết nâng cao
  • Tường lửa
Đặc điểm kỹ thuật môi trường:

192.168.56.115
xu

Điều kiện tiên quyết:

Chúng tôi cần mở các cổng bên dưới trên tất cả máy chủ

firewall-cmd --zone=public --add-service=mysql --permanent

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd --zone=public --add-port=4567/udp --permanent

Cho phép cổng dịch vụ ProxySQL 6033 / tcp (nó là đảo ngược của cổng mặc định của MySQL 3306) trong Tường lửa của Linux.

firewall-cmd --permanent --add-port=6033/tcp

firewall-cmd --reload
Cài đặt ProxySQL Load Balancer cho Percona XtraDB Cluster trên CentOS 7

ProxySQL v2 nguyên bản hỗ trợ Percona XtraDB Cluster, Để cài đặt ProxySql, hãy cài đặt nó từ kho lưu trữ percona

sudo yum install proxysql2

Để kết nối với giao diện quản trị ProxySQL, bạn cần một ứng dụng khách MySQL.

yum install Percona-XtraDB-Cluster-client-57

Bây giờ hãy bắt đầu dịch vụ proxysql

[[email protected] ~]# systemctl start proxysql.service

Để kiểm tra cổng trên nút cụm, hãy sử dụng truy vấn dưới đây.

mysql -uroot -p -e "SHOW GLOBAL VARIABLES LIKE 'PORT'";

Bây giờ, hãy kết nối với bảng quản trị ProxySQL và định cấu hình bộ cân bằng tải.

mysql -u admin -p123 -h 127.0.0.1 -P6032 --prompt='ProxySQL> '

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.110',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.113',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.56.114',3306);

ProxySQL> SELECT * FROM mysql_servers;
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| hostgroup_id | hostname | port | gtid_port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
| 0 | 192.168.56.110 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.113 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
| 0 | 192.168.56.114 | 3306 | 0 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |
+--------------+----------------+------+-----------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+
3 rows in set (0.00 sec)
Định cấu hình Giám sát các nút ProxySQL:

Đăng nhập vào phiên bản cơ sở dữ liệu MySQL và thực hiện các lệnh sau để tạo người dùng giám sát với đặc quyền USAGE

trên bất kỳ percona NODE nào:

CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
GRANT USAGE ON *.* TO 'proxysql'@'%';

mysql> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'ProxySQL';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT USAGE ON *.* TO 'proxysql'@'%';
Query OK, 0 rows affected (0.02 sec)

UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';

UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

ProxySQL> UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
Query OK, 1 row affected (0.01 sec)

ProxySQL> UPDATE global_variables SET variable_value='ProxySQL' WHERE variable_name='mysql-monitor_password';
Query OK, 1 row affected (0.00 sec)

ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

ProxySQL> SAVE MYSQL VARIABLES TO DISK;
Query OK, 136 rows affected (0.01 sec)

ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
Tạo người dùng máy khách ProxySQL
Provide read/write access to the cluster for ProxySQL, add this user on one of the Percona XtraDB Cluster nodes:

CREATE USER 'lbuser'@'192.168.56.115' IDENTIFIED BY 'lbpass';

GRANT ALL ON *.* TO 'lbuser'@'192.168.56.115';
Tạo người dùng máy khách ProxySQL:
ProxySQL> INSERT INTO mysql_users (username,password) VALUES ('lbuser','lbpass');
Query OK, 1 row affected (0.00 sec)
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
ProxySQL> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.02 sec)

xác nhận rằng người dùng đã được thiết lập chính xác, bạn có thể thử đăng nhập:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.30 (ProxySQL)

Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Hãy xem ứng dụng khách của chúng tôi sẽ kết nối với nút nào của cụm.

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona3.localdomain |
+----------------------+

bạn có thể thấy máy chủ proxy được kết nối với percona3

Tôi đã thử từ một phiên putty khác thì nó được kết nối với percona2:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona2.localdomain |
+----------------------+

Sau một vài phiên làm việc, nó sẽ được kết nối với percona1:

[[email protected] ~]# mysql -u lbuser -plbpass -h 127.0.0.1 -P 6033 -e "select @@hostname;";
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------------------+
| @@hostname |
+----------------------+
| percona1.localdomain |
+----------------------+
Kết nối từ MySQL Workbench:

Dưới đây là cấu hình phiên của tôi trong MySQL workbench:

Tôi đã thử xem Node nào sẽ kết nối từ MySQL Workbench

Chuyển đổi dự phòng:

Bây giờ chúng ta sẽ kiểm tra xem điều này sẽ thực hiện chuyển đổi dự phòng như thế nào

[[email protected] mysql]# service mysql stop
Redirecting to /bin/systemctl stop mysql.service

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+---------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+---------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | SHUNNED |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+---------+
3 rows in set (0.01 sec)

Bây giờ, hãy khởi động lại mysql trên nút 3 và kiểm tra lại trạng thái cụm từ máy chủ proxy

[[email protected] mysql]#systemctl start mysql.service

ProxySQL> SELECT hostgroup_id hg,count(status) cnt from main.runtime_mysql_servers WHERE status = "ONLINE" GROUP BY hg having cnt ;
+----+-----+
| hg | cnt |
+----+-----+
| 0 | 3 |
+----+-----+
1 row in set (0.00 sec)

ProxySQL> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
+--------------+----------------+------+--------+
| hostgroup_id | hostname | port | status |
+--------------+----------------+------+--------+
| 0 | 192.168.56.110 | 3306 | ONLINE |
| 0 | 192.168.56.114 | 3306 | ONLINE |
| 0 | 192.168.56.113 | 3306 | ONLINE |
+--------------+----------------+------+--------+
3 rows in set (0.00 sec)

LƯU Ý: Nếu bạn thấy trạng thái nút là SHUNNED sau đó cố gắng kết nối nhiều lần để máy khách nhận được trạng thái mới nhất của cụm vì runtime_mysql_servers lưu trữ trạng thái mới nhất của nút khi nó được cố gắng kết nối lần trước.

Cụm kiểm tra với sysbench:
yum install sysbench

sysbench yêu cầu thông tin đăng nhập người dùng máy khách ProxySQL mà bạn đã tạo (lbuser / lbpass) trong Tạo người dùng máy khách ProxySQL.

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --mysql-host=127.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 --table-size=10000 prepare

sysbench /usr/share/sysbench/oltp_read_only.lua --threads=4 --events=0 --time=300 --mysql-host=27.0.0.1 
--mysql-user=lbuser --mysql-password=lbpass --mysql-port=6033 --tables=10 
--table-size=10000 --range_selects=off --db-ps-mode=disable --report-interval=1 run

Để xem số lượng lệnh chạy trên cụm:

proxysql> SELECT * FROM stats_mysql_commands_counters;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đo điểm chuẩn hiệu suất của MySQL:MySQL 5.7 so với MySQL 8.0

  2. Ví dụ về DATE () - MySQL

  3. MySQL trên Azure Performance Benchmark - ScaleGrid so với Cơ sở dữ liệu Azure

  4. Làm thế nào để chèn một tệp trong cơ sở dữ liệu MySQL?

  5. Bật kết nối MySQL từ xa:LỖI 1045 (28000):Quyền truy cập bị từ chối đối với người dùng