Thứ hai, 08/01/2018 | 00:00 GMT+7

Cách sử dụng ProxySQL làm Bộ cân bằng tải cho MySQL trên Ubuntu 16.04

ProxySQL là một server proxy MySQL open-souce , nghĩa là nó đóng role trung gian giữa server MySQL và các ứng dụng truy cập database của nó. ProxySQL có thể cải thiện hiệu suất bằng cách phân phối lưu lượng giữa một group nhiều server database và cũng cải thiện tính khả dụng bằng cách tự động chuyển sang chế độ chờ nếu một hoặc nhiều server database bị lỗi.

Trong hướng dẫn này, bạn sẽ cài đặt ProxySQL làm bộ cân bằng tải cho nhiều server MySQL có chuyển đổi dự phòng tự động. Ví dụ: hướng dẫn này sử dụng một cụm sao nhiều chính gồm ba server MySQL, nhưng bạn cũng có thể sử dụng cách tiếp cận tương tự với các cấu hình cụm khác.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Bước 1 - Cài đặt ProxySQL

Các nhà phát triển của ProxySQL cung cấp các gói Ubuntu chính thức cho tất cả các bản phát hành ProxySQL trên trang phát hành GitHub của họ , vì vậy ta sẽ download version gói mới nhất từ đó và cài đặt nó.

Bạn có thể tìm thấy gói mới nhất trong danh sách phát hành . Quy ước đặt tên là proxysql_ version - distribution .deb , trong đó version là một chuỗi như 1.4.4 cho version 1.4.4 và distribution là một chuỗi như ubuntu16_amd64 cho 64-bit Ubuntu 16.04.

Download gói chính thức mới nhất, là 1.4.4 tại thời điểm viết bài, vào /tmp .

  • cd /tmp
  • curl -OL https://github.com/sysown/proxysql/releases/download/v1.4.4/proxysql_1.4.4-ubuntu16_amd64.deb

Cài đặt gói với dpkg , được sử dụng để quản lý .deb phần mềm .deb . Cờ -i cho biết rằng ta muốn cài đặt từ file được chỉ định.

  • sudo dpkg -i proxysql_*

Đến đây, bạn không cần file .deb , vì vậy bạn có thể xóa nó.

  • rm proxysql_*

Tiếp theo, ta cần một ứng dụng client MySQL để kết nối với version ProxySQL. Điều này là do nội bộ ProxySQL sử dụng giao diện tương thích với MySQL cho các việc quản trị. Ta sẽ sử dụng công cụ dòng lệnh mysql , là một phần của gói mysql-client có sẵn trong repository lưu trữ Ubuntu.

Cập nhật repository của bạn đảm bảo rằng bạn đang nhận được version gói sẵn mới nhất, sau đó cài đặt gói mysql-client .

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

Đến đây bạn có tất cả các yêu cầu để chạy ProxySQL, nhưng dịch vụ không tự động khởi động sau khi cài đặt, vì vậy hãy khởi động nó theo cách thủ công ngay bây giờ.

  • sudo systemctl start proxysql

ProxySQL bây giờ sẽ chạy với cấu hình mặc định của nó. Bạn có thể kiểm tra bằng cách sử dụng systemctl .

  • systemctl status proxysql

Đầu ra sẽ giống như sau:

Output
● proxysql.service - LSB: High Performance Advanced Proxy for MySQL Loaded: loaded (/etc/init.d/proxysql; bad; vendor preset: enabled) Active: active (running) since Thu 2017-12-21 19:19:20 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 12350 ExecStart=/etc/init.d/proxysql start (code=exited, status=0/SUCCESS) Tasks: 23 Memory: 30.9M CPU: 86ms CGroup: /system.slice/proxysql.service ├─12355 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql └─12356 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql

Dòng active (running) nghĩa là ProxySQL đã được cài đặt và đang chạy.

Tiếp theo, ta sẽ tăng cường bảo mật bằng cách đặt password được sử dụng để truy cập giao diện quản trị của ProxySQL.

Bước 2 - Đặt password administrator ProxySQL

Lần đầu tiên bạn bắt đầu cài đặt ProxySQL mới, nó sử dụng file cấu hình do gói cung cấp để khởi tạo các giá trị mặc định cho tất cả các biến cấu hình của nó. Sau lần khởi tạo này, ProxySQL lưu trữ cấu hình của nó trong database mà bạn có thể quản lý và sửa đổi thông qua dòng lệnh.

Để đặt password administrator trong ProxySQL, ta sẽ kết nối với database cấu hình đó và cập nhật các biến thích hợp.

Đầu tiên, truy cập giao diện quản trị. Bạn sẽ được yêu cầu nhập password , trong cài đặt mặc định, là admin .

  • mysql -u admin -p -h 127.0.0.1 -P 6032 --prompt='ProxySQLAdmin> '
  • -u chỉ định user mà ta muốn kết nối, ở đây là administrator , user mặc định cho các việc quản trị như thay đổi cài đặt cấu hình.
  • -h 127.0.0.1 yêu cầu mysql kết nối với version ProxySQL local . Ta cần xác định điều này một cách rõ ràng vì ProxySQL không lắng nghe file socket mà mysql giả định theo mặc định.
  • -P chỉ định cổng để kết nối. Giao diện quản trị của ProxySQL lắng nghe trên 6032 .
  • --prompt là một cờ tùy chọn thay đổi dấu nhắc mặc định, thường là mysql> . Ở đây, ta đang thay đổi nó thành ProxySQLAdmin> để làm rõ rằng ta đã kết nối với giao diện quản trị ProxySQL. Điều này sẽ hữu ích để tránh nhầm lẫn sau này khi ta cũng sẽ kết nối với giao diện MySQL trên các server database được sao chép ..

Sau khi kết nối, bạn sẽ thấy dấu nhắc ProxySQLAdmin> :

ProxySQL administration console prompt
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.5.30 (ProxySQL Admin Module) Copyright (c) 2000, 2017, 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. ProxySQLAdmin>

Thay đổi password account quản trị bằng cách cập nhật ( UPDATE ) biến cấu hình admin-admin_credentials trong database global_variables . Hãy nhớ thay đổi password trong lệnh dưới đây thành một password mạnh mà bạn chọn.

  • UPDATE global_variables SET variable_value='admin:password' WHERE variable_name='admin-admin_credentials';
Output
Query OK, 1 row affected (0.00 sec)

Thay đổi này sẽ không có hiệu lực ngay lập tức vì cách hệ thống cấu hình của ProxySQL hoạt động. Nó bao gồm ba lớp riêng biệt:

  • bộ nhớ , được thay đổi khi thực hiện sửa đổi từ giao diện dòng lệnh.
  • thời gian chạy , được sử dụng bởi ProxySQL làm cấu hình hiệu quả.
  • đĩa , được sử dụng để làm cho cấu hình tồn tại qua các lần khởi động lại.

Ngay bây giờ, thay đổi bạn đã thực hiện nằm trong bộ nhớ . Để thay đổi có hiệu lực, bạn phải sao chép cài đặt bộ nhớ vào vùng thời gian chạy , sau đó lưu chúng vào đĩa để làm cho chúng tồn tại.

  • LOAD ADMIN VARIABLES TO RUNTIME;
  • SAVE ADMIN VARIABLES TO DISK;

Các lệnh ADMIN này chỉ xử lý các biến liên quan đến giao diện dòng lệnh quản trị. ProxySQL đưa ra các lệnh tương tự, như MYSQL , để xử lý các phần khác trong cấu hình của nó. Ta sẽ sử dụng chúng sau trong hướng dẫn này.

Bây giờ ProxySQL đã được cài đặt và chạy với password quản trị mới, hãy cài đặt 3 nút MySQL để ProxySQL có thể giám sát chúng. Tuy nhiên, hãy giữ giao diện ProxySQL mở vì ta sẽ sử dụng nó sau này.

Bước 3 - Cấu hình giám sát trong MySQL

ProxySQL cần giao tiếp với các node MySQL để có thể đánh giá tình trạng của chúng. Để làm được điều đó, nó phải có khả năng kết nối với từng server với một user chuyên dụng.

Ở đây, ta sẽ cấu hình user cần thiết trên các node MySQL và cài đặt các hàm SQL bổ sung cho phép ProxySQL truy vấn trạng thái sao chép group .

Vì sao chép group MySQL đã chạy, các bước sau chỉ phải được thực hiện trên một thành viên duy nhất của group .

Trong terminal thứ hai, đăng nhập vào một server bằng một trong các node MySQL.

  • ssh sammy@your_mysql_server_ip_1

Download file SQL có chứa một số chức năng cần thiết để hỗ trợ nhân rộng group ProxySQL hoạt động.

  • curl -OL https://gist.github.com/lefred/77ddbde301c72535381ae7af9f968322/raw/5e40b03333a3c148b78aa348fd2cd5b5dbb36e4d/addition_to_sys.sql

Lưu ý : Tệp này được cung cấp bởi các tác giả ProxySQL, nhưng theo cách đặc biệt: nó là ý chính trong repository lưu trữ GitHub cá nhân, nghĩa là có thể nó sẽ di chuyển hoặc lỗi thời. Trong tương lai, nó có thể được thêm vào dưới dạng file được version trong repository lưu trữ ProxySQL chính thức.

Bạn có thể đọc thêm về ngữ cảnh và nội dung của file này trong bài đăng trên blog của tác giả về hỗ trợ ProxySQL root cho nhân rộng group MySQL .

Bạn có thể xem nội dung của file bằng less addition_to_sys.sql .

Khi đã sẵn sàng , hãy thực hiện các lệnh trong file . Bạn sẽ được yêu cầu nhập password quản trị MySQL.

  • mysql -u root -p < addition_to_sys.sql

Nếu lệnh chạy thành công, nó sẽ không tạo ra kết quả . Trong trường hợp đó, tất cả các node MySQL bây giờ sẽ hiển thị các chức năng cần thiết để ProxySQL nhận ra trạng thái sao chép group .

Tiếp theo, ta phải tạo một user chuyên dụng sẽ được ProxySQL sử dụng để theo dõi tình trạng của các version .

Mở dấu nhắc tương tác MySQL, dấu nhắc này sẽ nhắc bạn nhập lại password gốc .

  • mysql -u root -p

Sau đó, tạo user chuyên dụng, ở đây ta gọi là màn hình . Đảm bảo thay đổi password thành password mạnh.

  • CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitorpassword';

Cấp quyền user để truy vấn điều kiện của server MySQL cho user giám sát .

  • GRANT SELECT on sys.* to 'monitor'@'%';

Cuối cùng, áp dụng các thay đổi.

  • FLUSH PRIVILEGES;

Vì sao chép group , khi bạn đã hoàn tất việc thêm user để theo dõi sức khỏe vào một nút MySQL, nó sẽ được cấu hình đầy đủ trên cả ba nút.

Tiếp theo, ta cần cập nhật ProxySQL với thông tin cho user đó để nó có thể truy cập vào các node MySQL.

Bước 4 - Cấu hình giám sát trong ProxySQL

Để cấu hình ProxySQL sử dụng account user mới khi giám sát các node , ta sẽ UPDATE biến cấu hình thích hợp. Điều này rất giống với cách ta đặt password quản trị từ Bước 2.

Quay lại giao diện quản trị ProxySQL, cập nhật biến mysql-monitor_username thành tên user của account mới.

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

Cũng giống như trước đây, cấu hình không được áp dụng tự động, vì vậy hãy di chuyển nó vào thời gian chạy và lưu vào đĩa . Lần này, hãy lưu ý ta đang sử dụng MYSQL thay vì ADMIN để cập nhật các biến này vì ta đang sửa đổi các biến cấu hình MySQL.

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

Tài khoản giám sát được cấu hình ở tất cả các đầu và bước tiếp theo là thông báo cho ProxySQL về chính các node .

Bước 5 - Thêm MySQL Nodes vào ProxySQL Server Pool

Để làm cho ProxySQL nhận biết được ba nút MySQL của ta , ta cần cho ProxySQL biết cách phân phối chúng trên các group server của nó, đó là các group nút được chỉ định. Mỗi group server được xác định bằng một số dương, như 1 hoặc 2 . Các group server có thể định tuyến các truy vấn SQL khác nhau đến các group server khác nhau khi sử dụng định tuyến truy vấn ProxySQL.

Trong cấu hình sao chép tĩnh, các group server có thể được cài đặt tùy ý. Tuy nhiên, hỗ trợ sao chép group của ProxySQL tự động chia tất cả các node trong một group sao chép thành bốn trạng thái logic:

  • nhà văn , là các node MySQL có thể chấp nhận các truy vấn thay đổi dữ liệu. ProxySQL đảm bảo duy trì tất cả các node chính cho đến số lượng xác định tối đa trong group này.
  • người viết backup , cũng là các node MySQL có thể chấp nhận các truy vấn thay đổi dữ liệu. Tuy nhiên, những nút đó không được chỉ định là người viết; các node chính vượt quá số lượng người viết được duy trì đã xác định được giữ trong group này và được thăng cấp cho người viết nếu một trong những người viết không thành công.
  • reader là các node MySQL không thể chấp nhận các truy vấn thay đổi dữ liệu và nên được sử dụng như các node chỉ đọc. ProxySQL chỉ đặt các node slaver ở đây.
  • offline , dành cho các node hoạt động sai do các vấn đề như thiếu kết nối hoặc lưu lượng chậm.

Mỗi trạng thái trong số bốn trạng thái này có các group server tương ứng, nhưng các mã định danh group số không được chỉ định tự động.

Kết hợp tất cả lại với nhau, ta cần cho ProxySQL biết mã định danh nào nó nên sử dụng cho mỗi trạng thái. Ở đây, ta sử dụng 1 cho group server lưu trữ offline , 2 cho group server người viết , 3 cho group server lưu trữ người đọc4 cho group server nhà viết dự phòng .

Để đặt các số nhận dạng này, hãy tạo một hàng mới với các biến và giá trị đó trong bảng cấu hình mysql_group_replication_hostgroups .

  • INSERT INTO mysql_group_replication_hostgroups (writer_hostgroup, backup_writer_hostgroup, reader_hostgroup, offline_hostgroup, active, max_writers, writer_is_also_reader, max_transactions_behind) VALUES (2, 4, 3, 1, 1, 3, 1, 100);

Đây là những biến bổ sung được đặt trong hàng này và những gì mỗi biến thực hiện:

  • active được đặt thành 1 cho phép ProxySQL giám sát các group server này.
  • max_writers xác định số lượng nút có thể hoạt động như người viết. Ta sử dụng 3 ở đây vì Trong cấu hình nhiều nút chính, tất cả các node có thể được đối xử như nhau, vì vậy ở đây ta đã sử dụng 3 (tổng số nút).
  • writer_is_also_reader được đặt thành 1 hướng dẫn ProxySQL coi người viết cũng như người đọc.
  • max_transactions_behind đặt số lượng giao dịch bị trì hoãn tối đa trước khi một nút được gọi là offline .

Lưu ý: Vì ví dụ của ta sử dụng cấu trúc liên kết đa chính trong đó tất cả các node có thể ghi vào database , ta sẽ cân bằng tất cả các truy vấn SQL trên group server người viết . Trên topo khác, sự phân chia giữa nhà văn nút (tiểu học) và đọc (thứ cấp) nút có đường chỉ đọc truy vấn đến các hạch / group server khác với các truy vấn ghi. ProxySQL không tự động làm điều này, nhưng bạn có thể cài đặt định tuyến truy vấn bằng các luật .

Bây giờ ProxySQL biết cách phân phối các node trên các group server , ta có thể thêm các server MySQL của bạn vào group . Để làm như vậy, ta cần INSERT địa chỉ IP và group server ban đầu của mỗi server vào bảng mysql_servers , bảng chứa danh sách các server mà ProxySQL có thể tương tác.

Thêm từng server trong số ba server MySQL, đảm bảo thay thế địa chỉ IP mẫu trong các lệnh bên dưới.

  • INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.1', 3306);
  • INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.2', 3306);
  • INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (2, '203.0.113.3', 3306);

Ở đây, 2 giá trị đặt tất cả các node này là ban đầu và 3306 đặt cổng MySQL mặc định.

Giống như trước đây, hãy di chuyển những thay đổi này vào thời gian chạy và lưu chúng vào đĩa để thay đổi có hiệu lực.

  • LOAD MYSQL SERVERS TO RUNTIME;
  • SAVE MYSQL SERVERS TO DISK;

ProxySQL bây giờ sẽ phân phối các node của ta trên các group server lưu trữ như đã chỉ định. Hãy kiểm tra điều đó bằng cách thực hiện truy vấn SELECT đối với bảng runtim330e_mysql_servers , bảng này hiển thị trạng thái hiện tại của server mà ProxySQL đang sử dụng.

  • SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;
Output
+--------------+-------------+--------+ | hostgroup_id | hostname | status | +--------------+-------------+--------+ | 2 | 203.0.113.1 | ONLINE | | 2 | 203.0.113.2 | ONLINE | | 2 | 203.0.113.3 | ONLINE | | 3 | 203.0.113.1 | ONLINE | | 3 | 203.0.113.2 | ONLINE | | 3 | 203.0.113.3 | ONLINE | +--------------+-------------+--------+ 6 rows in set (0.01 sec)

Trong bảng kết quả, mỗi server được liệt kê hai lần: mỗi lần một cho ID group server 23 , cho biết rằng cả ba nút đều là người viết và người đọc. Tất cả các node được đánh dấu ONLINE , nghĩa là chúng đã sẵn sàng để sử dụng.

Tuy nhiên, trước khi có thể sử dụng chúng, ta phải cấu hình thông tin đăng nhập của user để truy cập database MySQL trên mỗi nút.

Bước 6 - Tạo user MySQL

ProxySQL hoạt động như một bộ cân bằng tải; user cuối kết nối với ProxySQL và ProxySQL lần lượt chuyển kết nối đến nút MySQL đã chọn. Để kết nối với một nút riêng lẻ, ProxySQL sử dụng lại thông tin đăng nhập mà nó đã được truy cập.

Để cho phép truy cập vào database nằm trên các node nhân bản, ta cần tạo một account user có thông tin đăng nhập giống như ProxySQL và cấp cho user đó các quyền cần thiết.

Giống như trong Bước 3, các bước sau chỉ được thực hiện trên một thành viên duy nhất của group . Bạn có thể chọn bất kỳ một thành viên nào.

Tạo một user mới được gọi là user sân chơi được xác định bằng password playgroundpassword .

  • CREATE USER 'playgrounduser'@'%' IDENTIFIED BY 'playgroundpassword';

Cung cấp cho nó quyền để truy cập đầy đủ vào database thử nghiệm playground từ hướng dẫn nhân rộng group ban đầu .

  • GRANT ALL PRIVILEGES on playground.* to 'playgrounduser'@'%';

Sau đó, áp dụng các thay đổi và thoát khỏi dấu nhắc .

  • FLUSH PRIVILEGES;
  • EXIT;

Bạn có thể xác minh user đã được tạo đúng cách bằng cách thử truy cập database với thông tin đăng nhập mới được cấu hình trực tiếp trên nút.

Mở lại giao diện MySQL với user mới, giao diện này sẽ nhắc bạn nhập password .

  • mysql -u playgrounduser -p

Khi bạn đã đăng nhập, hãy thực hiện một truy vấn kiểm tra trên database playground .

  • SHOW TABLES FROM playground;
Output
+----------------------+ | Tables_in_playground | +----------------------+ | equipment | +----------------------+ 1 row in set (0.00 sec)

Danh sách các bảng hiển thị trong database hiển thị bảng equipment được tạo trong hướng dẫn sao chép ban đầu xác nhận user đã được tạo chính xác trên các node .

Bạn có thể ngắt kết nối khỏi giao diện MySQL ngay bây giờ, nhưng vẫn mở terminal có kết nối với server . Ta sẽ sử dụng nó để chạy thử nghiệm ở bước cuối cùng.

  • EXIT;

Bây giờ ta cần tạo user tương ứng trong server ProxySQL.

Bước 7 - Tạo user ProxySQL

Bước cấu hình cuối cùng là cho phép kết nối đến ProxySQL với người sử dụng playgrounduser, và vượt qua những kết nối thông qua các node .

Để làm như vậy, ta cần đặt các biến cấu hình trong bảng mysql_users , bảng này chứa thông tin xác thực của user . Trong giao diện ProxySQL, thêm tên user , password và group server mặc định vào database cấu hình (là 2 , dành cho group server người viết )

  • INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('playgrounduser', 'playgroundpassword', 2);

Di chuyển cấu hình vào thời gian chạy và lưu vào đĩa để cấu hình mới có hiệu lực.

  • LOAD MYSQL USERS TO RUNTIME;
  • SAVE MYSQL USERS TO DISK;

Để xác minh ta có thể kết nối với các node database bằng các thông tin đăng nhập này, hãy mở một cửa sổ terminal khác và SSH tới server ProxySQL. Ta sẽ vẫn cần dấu nhắc quản trị sau này, vì vậy đừng đóng nó ngay.

  • ssh sammy@your_proxysql_server_ip

ProxySQL lắng nghe trên cổng 6033 đối với các kết nối client đến, vì vậy hãy thử kết nối với database thực (không phải giao diện quản trị) bằng cách sử dụng sân chơi và cổng 6033 . Bạn sẽ được yêu cầu nhập password , đó là password playgroundpassword trong ví dụ của ta .

  • mysql -u playgrounduser -p -h 127.0.0.1 -P 6033 --prompt='ProxySQLClient> '

Ở đây, ta đặt dấu nhắc thành ProxySQLClient> để ta có thể phân biệt nó với dấu nhắc giao diện quản trị. Ta sẽ sử dụng cả hai trong khi kiểm tra cấu hình cuối cùng.

Dấu nhắc sẽ mở ra, nghĩa là thông tin đăng nhập đã được chấp nhận bởi chính ProxySQL.

ProxySQL client prompt
  • Welcome to the MySQL monitor. Commands end with ; or \g.
  • Your MySQL connection id is 31
  • Server version: 5.5.30 (ProxySQL)
  • Copyright (c) 2000, 2017, 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.
  • ProxySQLClient>

Hãy thực hiện một câu lệnh đơn giản để xác minh xem ProxySQL có kết nối với một trong các node hay không. Lệnh này truy vấn database cho tên server của server mà nó đang chạy và trả về tên server server làm kết quả duy nhất.

  • SELECT @@hostname;

Theo cấu hình của ta , truy vấn này sẽ được ProxySQL hướng đến một trong ba nút của ta được chỉ định cho group server người viết . Đầu ra sẽ giống như sau, trong đó member1 là tên server của một trong các node MySQL.

Output
+------------+ | @@hostname | +------------+ | member1 | +------------+ 1 row in set (0.00 sec)

Điều này hoàn thành cấu hình cho phép ProxySQL tải các kết nối cân bằng giữa ba nút MySQL.

Trong bước cuối cùng, ta sẽ xác minh ProxySQL có thể thực thi các câu lệnh đọc và ghi trên database và nó xử lý các truy vấn ngay cả khi một số nút bị hỏng.

Bước 8 - Xác minh cấu hình ProxySQL

Ta biết rằng kết nối giữa ProxySQL và các node MySQL đang hoạt động, vì vậy các bài kiểm tra cuối cùng là đảm bảo rằng quyền database cho phép cả đọc và ghi các câu lệnh từ ProxySQL và đảm bảo rằng các câu lệnh này sẽ vẫn được thực thi khi một số nút trong group thất bại.

Thực thi SELECT trong dấu nhắc client ProxySQL để xác minh ta có thể đọc dữ liệu từ database playground .

  • SELECT * FROM playground.equipment;

Đầu ra phải giống như sau , chứa ba mục được tạo trong hướng dẫn sao chép group . Điều này nghĩa là ta đã đọc thành công dữ liệu từ database MySQL thông qua ProxySQL.

Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 3 | slide | 2 | blue | | 10 | swing | 10 | yellow | | 17 | seesaw | 3 | green | +----+--------+-------+--------+ 3 rows in set (0.00 sec)

Tiếp theo, hãy thử viết bằng cách chèn một số dữ liệu mới vào bảng đại diện cho 5 cuộc tập trận màu đỏ.

  • INSERT INTO playground.equipment (type, quant, color) VALUES ("drill", 5, "red");

Sau đó thực hiện lại SELECT trước đó để xác minh dữ liệu đã được chèn vào.

  • SELECT * FROM playground.equipment;

Dòng khoan mới trong kết quả nghĩa là ta đã ghi thành công dữ liệu vào database MySQL thông qua ProxySQL.

Output
+----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 3 | slide | 2 | blue | | 10 | swing | 10 | yellow | | 17 | seesaw | 3 | green | | 24 | drill | 5 | red | +----+--------+-------+--------+ 4 rows in set (0.00 sec)

Ta biết ProxySQL hoàn toàn có thể sử dụng database ngay bây giờ, nhưng điều gì sẽ xảy ra nếu một server bị lỗi?

Từ dòng lệnh của một trong các server MySQL, dừng quá trình MySQL để mô phỏng lỗi.

  • systemctl stop mysql

Sau khi database dừng, hãy thử truy vấn lại dữ liệu từ bảng equipment từ dấu nhắc client ProxySQL.

  • SELECT * FROM playground.equipment;

Đầu ra không được thay đổi; bạn vẫn sẽ thấy danh sách thiết bị như trước. Điều này nghĩa là ProxySQL đã nhận thấy rằng một trong các node bị lỗi và chuyển sang một nút khác để thực thi câu lệnh.

Ta có thể kiểm tra điều đó bằng cách truy vấn bảng runtime_mysql_servers từ dấu nhắc quản trị ProxySQL, như trong Bước 5.

  • SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

Đầu ra sẽ như thế này:

Output
+--------------+-------------+---------+ | hostgroup_id | hostname | status | +--------------+-------------+---------+ | 1 | 203.0.113.1 | SHUNNED | | 2 | 203.0.113.2 | ONLINE | | 2 | 203.0.113.3 | ONLINE | | 3 | 203.0.113.2 | ONLINE | | 3 | 203.0.113.3 | ONLINE | +--------------+-------------+---------+ 6 rows in set (0.01 sec)

Nút ta dừng hiện đã bị xa lánh , nghĩa là nó tạm thời được coi là không thể truy cập được, vì vậy tất cả lưu lượng truy cập sẽ được phân phối trên hai nút trực tuyến còn lại.

ProxySQL sẽ liên tục theo dõi trạng thái của nút này và đưa nó trở lại trực tuyến nếu nó hoạt động bình thường hoặc đánh dấu nó offline nếu nó vượt qua ngưỡng thời gian chờ mà ta đã đặt ở Bước 4.

Hãy kiểm tra giám sát này. Chuyển trở lại server MySQL và đưa nút trở lại.

  • systemctl start mysql

Chờ một chút, sau đó truy vấn lại bảng runtime_mysql_servers từ dấu nhắc quản trị ProxySQL.

  • SELECT hostgroup_id, hostname, status FROM runtime_mysql_servers;

ProxySQL sẽ nhanh chóng thông báo rằng nút đã khả dụng trở lại và đánh dấu nó là trực tuyến:

Output
+--------------+-------------+--------+ | hostgroup_id | hostname | status | +--------------+-------------+--------+ | 2 | 203.0.113.1 | ONLINE | | 2 | 203.0.113.2 | ONLINE | | 2 | 203.0.113.3 | ONLINE | | 3 | 203.0.113.1 | ONLINE | | 3 | 203.0.113.2 | ONLINE | | 3 | 203.0.113.3 | ONLINE | +--------------+-------------+--------+ 6 rows in set (0.01 sec)

Bạn có thể lặp lại thử nghiệm này với một nút khác (hoặc hai trong số chúng) để thấy rằng nếu có ít nhất một nút được kích hoạt, bạn có thể thoải mái sử dụng database của bạn cho cả quyền truy cập chỉ đọc và đọc ghi.

Kết luận

Trong hướng dẫn này, bạn đã cấu hình ProxySQL để cân bằng tải các truy vấn SQL trên nhiều nút MySQL hỗ trợ ghi trong cấu trúc liên kết nhân bản group nhiều chính. Loại cấu hình này có thể tăng hiệu suất cho việc sử dụng database nặng bằng cách phân phối tải trên nhiều server . Nó cũng có thể cung cấp khả năng chuyển đổi dự phòng trong trường hợp một trong các server database offline .

Tuy nhiên, ta chỉ đề cập đến một cấu trúc liên kết nút làm ví dụ ở đây. ProxySQL cũng cung cấp bộ nhớ đệm truy vấn, định tuyến và phân tích hiệu suất mạnh mẽ cho nhiều cấu trúc liên kết MySQL khác. Bạn có thể đọc thêm về các tính năng của ProxySQL và cách giải quyết các vấn đề quản lý database khác nhau với chúng trên blog ProxySQL chính thứcwiki ProxySQL .


Tags:

Các tin liên quan

Cách backup database MySQL vào lưu trữ đối tượng với Percona trên Ubuntu 16.04
2017-10-19
Cách cài đặt Lighttpd với MySQL và PHP trên FreeBSD 11.0
2017-09-18
Cách cấu hình backup MySQL với Percona XtraBackup trên Ubuntu 16.04
2017-08-30
Cách cấu hình sao chép nhóm MySQL trên Ubuntu 16.04
2017-04-13
Cách cài đặt MySQL mới nhất trên Ubuntu 16.04
2017-04-06
Cách cấu hình SSL / TLS cho MySQL trên Ubuntu 16.04
2017-03-20
Cách Import, Export database trong MySQL hoặc MariaDB
2016-12-21
Cách thay đổi thư mục dữ liệu MySQL sang vị trí mới trên CentOS 7
2016-12-19
Cách thay đổi thư mục dữ liệu MySQL sang vị trí mới bằng cách sử dụng liên kết biểu tượng
2016-12-02
Cách cài đặt MySQL trên CentOS 7
2016-12-01