0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Tối ưu hóa hiệu suất cơ sở dữ liệu SQL với ProxySQL trong mô hình Replication [Phần 2]

Đăng vào 1 ngày trước

• 4 phút đọc

Đặt Vấn Đề

Khi thiết kế hệ thống, việc truy vấn vào cơ sở dữ liệu thường chiếm một phần lớn chi phí trong tổng thời gian xử lý của một yêu cầu. Do đó, việc tăng tốc độ truy vấn cơ sở dữ liệu đồng nghĩa với việc tối ưu hiệu suất của toàn hệ thống. Một ứng dụng hiệu suất tốt có khả năng truy xuất dữ liệu một cách nhanh chóng, giúp giảm độ trễ trong quá trình tương tác giữa người dùng và ứng dụng.

Để tăng tốc độ truy xuất dữ liệu, có hai phương pháp chính:

  • Tối ưu câu truy vấn.
  • Tăng cường phần cứng: mở rộng cơ sở dữ liệu theo chiều dọc hoặc chiều ngang.

Trong bài viết trước, chúng ta đã cài đặt mô hình replication cơ sở dữ liệu với MySQL, một phương pháp mở rộng theo chiều ngang. Hệ thống replication bao gồm một máy chủ chính (master) và nhiều máy chủ sao lưu (replica) đồng bộ dữ liệu với nhau. Người dùng có thể điều hướng các yêu cầu đọc/ghi đến các cơ sở dữ liệu phù hợp (ghi ở master, đọc ở slave) để cải thiện hiệu suất so với mô hình cơ sở dữ liệu đơn giản.

Mặc dù cách làm này giúp tăng hiệu suất, nhưng người dùng vẫn gặp khó khăn trong việc cấu hình ứng dụng để đọc và ghi đến nhiều cơ sở dữ liệu khác nhau. Điều này có thể tạo ra sự phức tạp hoặc ảnh hưởng đến tính năng hiện có, cũng như gây khó khăn trong việc mở rộng. Trong bài viết này, chúng ta sẽ mở rộng giải pháp trên thông qua việc sử dụng ProxySQL để giải quyết những nhược điểm đã nêu.

Nguyên Lý Thiết Kế

ProxySQL hoạt động tại tầng SQL, phối hợp với MySQL client để quản lý lưu lượng truy cập từ ứng dụng đến các máy chủ MySQL phía sau (backends). Ở đây, chúng ta sẽ dùng ProxySQL để phân chia các máy chủ MySQL thành các nhóm đọc và ghi, định nghĩa các quy tắc cho các nhóm này. Nhờ vào những quy tắc này, MySQL client sẽ điều hướng các câu truy vấn từ ứng dụng đến một trong các máy chủ MySQL tương ứng.

Chuẩn Bị Trước Khi Cài Đặt:

  • Cài đặt sẵn một cơ sở dữ liệu MySQL với hai máy chủ sao lưu. Bạn có thể tự cài đặt theo hướng dẫn hoặc sử dụng dịch vụ của Sunteco để tạo cơ sở dữ liệu với replication dễ dàng. Tôi đã tạo sẵn cơ sở dữ liệu MySQL với hai replica bằng dịch vụ của Sunteco và sử dụng IP công cộng để cấu hình.
  • Tạo một máy ảo (VM) với hệ điều hành Ubuntu để cài đặt ProxySQL. Sunteco cung cấp dịch vụ VM, giúp bạn nhanh chóng tạo máy ảo.

Các Bước Cài Đặt và Cấu Hình ProxySQL

Bước 1: Cài Đặt ProxySQL và MySQL Client

Truy cập vào máy chủ VM và chạy các câu lệnh sau để cài đặt ProxySQL:

Copy
sudo apt-get install -y --no-install-recommends lsb-release wget apt-transport-https ca-certificates gnupg
sudo wget -O - 'https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/repo_pub_key' | sudo apt-key add -
sudo echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.5.x/$(lsb_release -sc)/ ./ | sudo tee /etc/apt/sources.list.d/proxysql.list
sudo apt-get update
sudo apt-get install proxysql

Sau khi cài đặt, bạn cần kích hoạt và khởi động dịch vụ ProxySQL:

Copy
sudo systemctl enable proxysql
sudo systemctl start proxysql
sudo systemctl status proxysql

Tiếp theo, cài đặt MySQL client:

Copy
sudo apt-get update
sudo apt-get install mysql-client

Bước 2: Cấu Hình MySQL Server Backends

Kết nối tới giao diện quản trị của ProxySQL:

Copy
mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '

Sau đó, thêm các máy chủ MySQL vào ProxySQL bằng các câu lệnh sau:

Copy
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.254.216.153',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.254.216.224',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.254.216.73',3306);

Để kiểm tra các máy chủ MySQL vừa thêm:

Copy
SELECT * FROM mysql_servers;

Bước 3: Cấu Hình Giám Sát Cho Các MySQL Server Backends

Cấu hình giám sát giúp ProxySQL phân chia các máy chủ MySQL thành các nhóm phục vụ cho việc đọc và ghi. Truy cập vào MySQL master để tạo tài khoản giám sát:

Copy
mysql -h 10.254.216.153 -u root -p

Tiếp tục tạo và cấp quyền cho tài khoản giám sát:

Copy
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';

Quay lại giao diện quản trị ProxySQL và cập nhật tài khoản:

Copy
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';

Lưu ý có thể điều chỉnh một số thông số giám sát:

Copy
UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');

Để áp dụng cấu hình và lưu lại trạng thái sau khi khởi động lại ProxySQL, thực hiện:

Copy
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

Cuối cùng, kiểm tra các thông số giám sát:

Copy
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 3;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 3;

Tổng Kết

Với các bước cài đặt và cấu hình ProxySQL, chúng ta đã có một giải pháp tối ưu hóa và điều hướng truy vấn đến các máy chủ MySQL backends. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ý kiến dưới bài viết để chúng ta có thể thảo luận thêm.

Tác Giả: Sang Lee - Thành viên của đội ngũ Kỹ thuật Sunteco
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào