Chào Mọi Người.
Hôm nay mình sẽ hướng dẫn mọi người cài đặt ProxySQL trên CentOS 7.
Giới Thiệu.
ProxySQL là một Proxy Server Open Source được thiết kế dùng để hỗ trợ cân bằng tải các cụm MySQL Database Cluster. ProxySQL có thể hỗ trợ hàng ngàn kết nối một lúc và có khả năng tùy biến cao thông qua giao diện command-line SQL.
Một số tính năng nổi bật của ProxySQL như :
- Hỗ trợ cân bằng tải.
- Query Caching
- Query Routing.
- Hỗ trợ Failover.
- Firewall.
- Hỗ trợ nhiều nền tảng.
Mọi người có thêm tìm hiểu thêm thông tin về ProxySQL tại đây.
Cài đặt.
Chuẩn bị.
Ở đây mình sử dụng 3 VPS, trong đó 1 VPS dùng để cài đặt ProxySQL, 2 VPS còn lại sẽ được cài đặt MySQL.
Vì do mình chỉ cài đặt trong môi trường test nên mình không có tiến hành cấu hình MySQL Replication cho 2 VPS chạy MySQL, nếu mọi người sử dụng trong môi trường thực tế thì cần tiến hành cài đặt MySQL Replication cho các Node MySQL.
2 VPS được cài đặt sẵn MySQL sẽ có IP lần lượt như sau :
- 10.124.11.48
- 10.124.11.71
Cài đặt.
Đầu tiên, ta sẽ tiến hành truy cập vào VPS cài đặt ProxySQL để cài đặt ProxySQL.
yum -y install https://github.com/sysown/proxysql/releases/download/v2.0.10/proxysql-2.0.10-1-centos7.x86_64.rpm
Mọi người có thể thay thế link download phiên bản ở trên bằng link các phiên bản khác tại đây.
Tiếp theo ta khởi động ProxySQL và cấu hình cho ProxySQL khởi động cùng hệ thống.
systemctl enable proxysql
systemctl start proxysql
Sau đó truy cập vào ProxySQL bằng câu lệnh sau :
mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='ProxySQL> '
Mặc định tài khoản admin của ProxySQL sẽ có mật khẩu mặt định là admin luôn, vì vậy ta nên tiến hành đổi lại mật khẩu.
UPDATE global_variables SET variable_value='admin:thanhdt' WHERE variable_name='admin-admin_credentials';
LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;
Trong đó “thanhdt” là mật khẩu mới của tài khoản admin.
Tiếp theo ta sẽ tiến hành cấu hình thêm các VPS MySQL đã được tạo từ trước :
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.124.11.48',3306);
INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'10.124.11.71',3306);
Sử dụng câu lện query để kiểm tra lại.
SELECT hostgroup_id,hostname,port,status FROM mysql_servers;
Tới đây, ta sẽ tiến hành cấu hình ProxySQL Nodes Monitoring.
Để tiến hành cấu hình thì ta sẽ cần tạo một User trên VPS chạy MySQL để ProxySQL có thể tiến hành kết nối.
Ta truy cập vào MySQL trên VPS chạy MySQL.
CREATE USER 'monitor'@'%' IDENTIFIED BY 'thanhdt';
GRANT SELECT ON sys.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
Sau khi tạo xong, ta sẽ truy cập lại vào VPS cài đặt ProxySQL để tiến hành cấu hình thêm User vừa tạo vào.
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='thanhdt' WHERE variable_name='mysql-monitor_password';
UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
LOAD MYSQL VARIABLES TO RUNTIME;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
SAVE MYSQL SERVERS TO DISK;
Kiểm tra lại connection log bằng câu lệnh query sau:
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
Tiếp theo tạo ProxySQL users để ProxySQL có thể tiến hành kết nối tới các VPS MySQL.
Đầu tiên ta sẽ truy cập vào VPS MySQL để tạo Database và User.
CREATE DATABASE RECIPES;
GRANT ALL ON RECIPES.* TO 'demo'@'%';
FLUSH PRIVILEGES;
Sau khi tạo xong, ta sẽ thêm User vừa tạo vào ProxySQL.
INSER INTO mysql_users(username,password,default_hostgroup) VALUES ('demo','123',1);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
Cuối cùng, ta đăng nhập vào ProxySQL bằng User vừa tạo để kiểm tra lại.
mysql -u demo -p -h 127.0.0.1 -P 6033 --prompt='ProxySQLClient> '
select @@hostname;
show databases;
Như vậy là ProxySQL đã kết nối được tới VPS MySQL do VPS MySQL được mình tạo có hostname là vpn.novalocal.
Bài viết của mình về cấu hình ProxySQL dựa theo kinh nghiệm và tìm hiểu tới đây là hết, cảm ơn mọi người đã theo dõi.