proxysql叢集+高可用
【1】叢集的核心概念
(1.1)叢集能達到什麼效果?
參考轉自官網:https://proxysql.com/documentation/ProxySQL-Cluster/
ProxySQL 是一個去中心化代理,如果可能,通常建議將其部署在與應用程式相同的伺服器上。這種方法可以很好地擴充套件到數百個節點,並且可以在執行時輕鬆重新配置。
為了管理一組 ProxySQL 例項,您需要單獨配置每個主機,使用配置管理工具,如 Ansible/Chef/Puppet/Salt(按字母順序)或服務發現工具,如 Consul/ZooKeeper。
因此,雖然 ProxySQL 是高度可定製的,並且可以使用任何已經實現的配置管理工具技術在任何環境中進行部署和管理,但這種方法有一些缺點:
- 它需要並依賴於外部軟體(配置管理軟體本身)
- 前一點意味著這種方法本身不受支援
- 收斂時間不可預測
- 沒有針對網路分裂的保護
因此,從 ProxySQL 1.4.x 開始,本機支援配置叢集。
叢集只是類似於組複製的操作,互相同步下面的5個表
目前 ProxySQL 叢集解決方案中有兩個主要元件:
- 監控
- 重新配置
兩個元件(監控和遠端重新配置)都可用於 4 個表:
global_variables (Supported from ProxySQL 2.1.x)
mysql_query_rules
mysql_servers
mysql_users
proxysql_servers
(1.2)叢集管理變數
添加了幾個與叢集解決方案相關的新變數。它們都是 Admin 的變數,這意味著載入它們LOAD ADMIN VARIABLES TO RUNTIME
需要命令。
定義同步內容的變數:
-
admin-checksum_mysql_query_rules
: 布林變數。當true
(預設)ProxySQL 每次LOAD MYSQL QUERY RULES TO RUNTIME
執行時都會生成一個新的配置校驗和。如果設定為false
,新配置不會自動傳播,也不會從遠端節點同步; -
admin-checksum_mysql_servers
: 布林變數。當true
(預設)ProxySQL 每次LOAD MYSQL SERVERS TO RUNTIME
false
,新配置不會自動傳播,也不會從遠端節點同步; -
admin-checksum_mysql_users
: 布林變數。當true
(預設)ProxySQL 每次LOAD MYSQL USERS TO RUNTIME
執行時都會生成一個新的配置校驗和。-
如果設定為
false
,新配置不會自動傳播,也不會從遠端節點同步。如果您有數百萬使用者,請禁用此功能並且不要依賴它,因為它可能會很慢;
-
定義憑據的變數:
-
admin-cluster_username
和admin-cluster_password
: 使用此憑證來監控其他 ProxySQL 例項。-
請注意,使用者名稱/密碼對也應該存在於 中
admin-admin_credentials
,否則連線將失敗。如果admin-cluster_username
未定義,則聚類不執行任何檢查;
-
定義檢查間隔/頻率的變數:
-
admin-cluster_check_interval_ms
:此變數定義校驗和檢查之間的間隔。預設值:1000。最小值:10,最大值:300000
-
admin-cluster_check_status_frequency
:如果大於 0,則此變數定義在多少次校驗和檢查後執行狀態檢查。預設值:10。最小值:0 ,最大值:10000
遠端同步後,立即將新更改儲存到磁碟通常是個好主意。這樣,重新啟動後,配置將已經同步。
與同步到磁碟相關的變數:
-
admin-cluster_mysql_query_rules_save_to_disk
: 布林變數。當true
(預設)遠端同步並載入到執行時,新的mysql查詢規則也儲存到磁碟; -
admin-cluster_mysql_servers_save_to_disk
: 布林變數。當true
(預設)在遠端同步並載入到執行時,新的 mysql 伺服器也儲存到磁碟; -
admin-cluster_mysql_users_save_to_disk
: 布林變數。當true
(預設)在遠端同步並載入到執行時,新的 mysql 使用者也被儲存到磁碟; -
admin-cluster_proxysql_servers_save_to_disk
: 布林變數。當true
(預設)在遠端同步並載入到執行時,新的 proxysql 伺服器也被儲存到磁碟;
由於不同的原因,可能同時重新配置多個 ProxSQL 例項。
例如,可能每個 ProxySQL 例項都在監視 MySQL 複製拓撲並自動檢測故障轉移,並且在很短的時間內(可能不到一秒)它們將全部收斂到相同的配置,而無需與每個例項同步其他。
同樣,可能會自動避開節點的所有代理檢測到臨時網路問題或緩慢的 MySQL 例項。所有代理都將採取相同的操作,而無需相互同步。
或者,作為最後一個示例,如果從屬伺服器由於複製滯後而滯後並自動迴避,則所有代理將彼此獨立地採取相同的操作。
因此,ProxySQL Cluster 可以配置為不立即與遠端節點同步,而是在觸發遠端同步之前等待一定數量的檢查。
如果在這樣的閾值之後本地和遠端配置仍然不同,則觸發同步:
-
admin-cluster_mysql_query_rules_diffs_before_sync
:定義有多少不匹配檢查觸發mysql_query_rules
默認同步:3。最小值:0(從不同步)。最大:1000
-
admin-cluster_mysql_servers_diffs_before_sync
:定義有多少不匹配檢查觸發mysql_servers
默認同步:3。最小值:0(從不同步)。最大:1000
-
admin-cluster_mysql_users_diffs_before_sync
:定義有多少不匹配檢查觸發mysql_users
默認同步:3。最小值:0(從不同步)。最大:1000
-
admin-cluster_proxysql_servers_diffs_before_sync
:定義有多少不匹配檢查觸發proxysql_servers
默認同步:3。最小值:0(從不同步)。最大:1000
(1.3)叢集配置表 proxysql_servers
表定義如下:
CREATE TABLE proxysql_servers ( hostname VARCHAR NOT NULL, port INT NOT NULL DEFAULT 6032, weight INT CHECK (weight >= 0) NOT NULL DEFAULT 0, comment VARCHAR NOT NULL DEFAULT '', PRIMARY KEY (hostname, port) )
該表是一個配置表,定義了 ProxySQL 對等點的列表。
-
hostname
: 對等方的主機名/IP -
port
: 對等埠 -
weight
:目前未使用,但在未來增強的路線圖中 -
comment
: 自由形式的評論欄位
也支援配置檔案
proxysql_servers
可以從配置檔案中載入條目。
以下是如何proxysql_servers
從配置檔案進行配置的示例:
proxysql_servers = ( { hostname="172.16.0.101" port=6032 weight=0 comment="proxysql1" }, { hostname="172.16.0.102" port=6032 weight=0 comment="proxysql2" } )