1. 程式人生 > 實用技巧 >MYSQL PROXYSQL "叢集"怎麼搞 與 靈活的proxysql 應用

MYSQL PROXYSQL "叢集"怎麼搞 與 靈活的proxysql 應用

PROXYSQL是一個集中化的服務節點,在部署PROXYSQL的時候大部分都是單節點來部署,或者和應用節點一起部署.

和應用節點一起部署的好處是當應用節點DOWN掉後,本身也不會影響其他應用上的應用和PROXYSQL的配置,但這樣做也有一些問題,例如當我們的應用進行擴充套件的時候, PROXYSQL 本身也要進行自行的擴充套件,而多臺PROXYSQL 統一維護一些配置資訊將是困難和容易出現問題的,所以當我們需要多個PROXYSQL的進行統一配置的時候,這時就會出現問題.

所以PROXYSQL 題目上的叢集,實際上並不是實際意義上的叢集,而是一個類似於資訊複製的PROXYSQL 複製組的概念.

上面的圖可能看上去有些亂,實際上是可以通過PROXYSQL 進行通用的多MYSQL 大型叢集的共享方式的訪問.配合應用端的設計可以實現多點的複合式的高可用資料訪問.

在我們配置PROXYSQL 多點的時候,將訪問多個MYSQL的配置寫入一臺PROXYSQL伺服器,通過PROXYSQL 的配置資訊複製的方式將後期加入的節點都作為通用型的整體的MYSQL 所有叢集節點的訪問.

這樣的做法在配合應用的情況下,對於應用來說,訪問所有的資料庫系統都可以在一個節點上進行操作,而不必記得每個系統的地址, 並且多個PROXYSQL訪問任何節點都可以到達,對應的MYSQL 節點,這樣對於應用系統的上層是友好的,給應用訪問資料庫提供了更多的方便和高可用保證.

我們下面做一個簡單的多proxysql

PROXYSQL

192.168.198.106

192.168.198.67

192.168.198.68

MYSQL

192.168.198.101

192.168.198.102

怎麼搭建MYSQL 和主從並不是關鍵點,並且也是基礎知識,就忽略過了

安裝proxysql 的版本是2.012這裡也忽略如何安裝,這裡提示直接下載,yum 安裝即可.

在安裝後,我們需要住一個需要對三個PROXYSQL 先進行初始化設定

update global_variables set variable_value='admin:admin;proxysql:1234;cluster_admin:1234' where variable_name='admin-admin_credentials';

update global_variables set variable_value='cluster_admin' where variable_name='admin-cluster_username';

update global_variables set variable_value='1234' where variable_name='admin-cluster_password';

update global_variables set variable_value='proxysql' where variable_name='mysql-monitor_username';

update global_variables set variable_value='1234' where variable_name='mysql-monitor_password';

這裡需要設定登陸PROXYSQL的使用者名稱密碼,PROXYSQL cluster的使用者名稱密碼,以及PROXYSQL 監控MYSQL的使用者名稱密碼.

同時MYSQL 中需要配置PROXYSQL連線MYSQL 的監控賬號和密碼,否則整個系統不會正常工作

update global_variables set variable_value=1000 where variable_name='admin-cluster_check_interval_ms';

update global_variables set variable_value=10 where variable_name='admin-cluster_check_status_frequency';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_query_rules_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_servers_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_users_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_proxysql_servers_save_to_disk';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_query_rules_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_servers_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_users_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_proxysql_servers_diffs_before_sync';

以上的配置是匹配多個PROXYSQL 之間的資訊同步和檢查

LOAD MYSQL USERS TO RUNTIME;

SAVE MYSQL USERS TO DISK;

LOAD MYSQL SERVERS TO RUNTIME;

SAVE MYSQL SERVERS TO DISK;

LOAD MYSQL QUERY RULES TO RUNTIME;

SAVE MYSQL QUERY RULES TO DISK;

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

LOAD ADMIN VARIABLES TO RUNTIME;

SAVE ADMIN VARIABLES TO DISK;

載入後

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.106',6032,0,'p1');

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.67',6032,0,'p2');

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.68',6032,0,'p3');

LOAD PROXYSQL SERVERS TO RUNTIME;

SAVE PROXYSQL SERVERS TO DISK;

需要預先的將這個叢集中的PROXYSQL 進行一個配置,

以上的操作需要在每個PROXYSQL中操作.

此時我們檢視每個PROXYSQL的日誌

測試三臺機器開始評判相關的配置的版本

這裡需要關注的幾點

1 伺服器之間同步的資訊包括了以下的資訊

  • mysql_query_rules

  • mysql_servers

  • mysql_users

  • proxysql_servers

2 只有在上載後,相關的伺服器的資訊才能被傳到其他的PROXYSQL伺服器

3 相關的SELECT name, version, FROM_UNIXTIME(epoch), checksum FROM runtime_checksums_values ORDER BY name;

要查詢相關的可以在多個伺服器上傳遞的資訊,需要檢視runtime_checksums_values 表,這裡有每個伺服器的配置資訊的版本,並且如果伺服器組中的 checksum 不一致就說明配置資訊在叢集中存在不一致的情況,需要進行檢視和改正.

實際上通過PROXYSQL 的"叢集" 方案可以更靈活的訪問MYSQL 並且設定相關的"門檻" ,並且在大規模訪問的情況下,可以降低連線的消耗,提高連線的複用.

4 如果PROXYSQL 一個節點DOWN 掉後,再次啟動後,會將落後的版本配置更新,追上其他節點的最新版本

5 通過其他程式,可以編寫判斷節點是否存活的程式,並且將訪問導向可以提供服務的PROXYSQL