proxysql的配置系統

proxysql的配置系統特點

1 允許輕鬆自動更新配置。爲此,有一個MySQL兼容的管理界面
2 允許在運行時修改儘可能多的配置項,而無需重新啓動守護程序
3 允許輕鬆回滾錯誤的配置


這是使用多層配置系統實現的,允許設置從一層移動到另一層。配置系統的3層如下圖所示:
+-------------------------+
|         RUNTIME         |
+-------------------------+
       /|\          |
        |           |
    [1] |       [2] |
        |          \|/
+-------------------------+
|         MEMORY          |
+-------------------------+ _
       /|\          |      |\
        |           |        \
    [3] |       [4] |         \ [5]
        |          \|/         \
+-------------------------+  +-------------------------+
|          DISK           |  |       CONFIG FILE       |
+-------------------------+  +-------------------------+


RUNTIME 

表示正在處理請求的線程使用的ProxySQL的內存中數據結構。這些包含使用的全局變量的值,分組到主機組的後端服務器列表或可連接到代理的MySQL用戶列表。請注意,操作者永遠不能直接修改RUNTIME配置部分的內容,總是需要通過底層來修改。

MEMORY(有時也稱爲main)

表示內存中的SQLite3數據庫,它通過MySQL兼容界面暴露給外部。用戶可以將MySQL客戶端連接到此接口,並查詢不同的表和數據庫。通過此界面可用的配置表如下:

mysql_servers  - 後端服務器列表
mysql_users  - 可以連接到ProxySQL的用戶列表和憑據。請注意,ProxySQL也將使用這些憑據連接到後端服務器
mysql_query_rules  - 用於將流量路由到不同的後端服務器的規則列表。這些規則也可能導致重寫查詢或緩存結果
global_variables  - 可以在運行時調整的整個代理中使用的全局變量列表。全局變量示例:
proxysql>select * from global_variables limit 3;
+--------------------------------+----------------+
| variable_name                  | variable_value |
+--------------------------------+----------------+
| mysql-shun_on_failures         | 5              |
| mysql-shun_recovery_time_sec   | 10             |
| mysql-query_retries_on_failure | 1              |
+--------------------------------+----------------+
3 rows in set (0.00 sec)
mysql_collations - 可用於代理使用的MySQL排序規則列表。 這些是直接從客戶端庫提取的。
[僅在調試版本中可用] debug_levels - ProxySQL與其詳細級別一起發送的調試語句的類型列表。 這允許我們在運行時輕鬆配置在日誌中有什麼樣的語句來調試不同的問題。 這僅在調試版本中可用,因爲它可能會影響性能


DISK和CONFIG FILE

DISK表示磁盤上的SQLite3數據庫,默認位置爲$(DATADIR)/proxysql.db。 在重新啓動過程中,內存中未被保留的配置將丟失,因此將配置保留在DISK中是非常重要的。 CONFIG文件是經典的配置文件,我們將在下一節中看到它與其他配置層之間的關係。

配置系統的加載方式

啓動過程

在正常啓動時,ProxySQL讀取其配置文件(如果存在),以確定其datadir。 接下來發生的事情取決於它的數據庫文件(磁盤)是否存在於其datadir中。
如果找到數據庫文件,ProxySQL將從持久的磁盤數據庫初始化其內存中的配置。 因此,磁盤被加載到內存中,然後傳播到運行時配置。 如果找不到數據庫文件,並且存在配置文件,則會將配置文件解析並將其內容加載到內存數據庫中,然後將其保存在磁盤數據庫中,並在運行時加載。 如果重要的是要注意,如果找到數據庫文件,則不會解析配置文件。 也就是說,在正常啓動期間,ProxySQL僅從持久存儲的磁盤數據庫中初始化其內存中的配置。


初始啓動(或 - 初始標誌)

在初始啓動時,內存和運行時配置從配置文件而不是數據庫文件中填充。 有可能強制初始啓動運行proxysql的--initial標誌,它通過重命名舊數據庫來重置數據庫。
完成後,配置也會持續到磁盤數據庫,這將用於下一次重新啓動。


重新加載啓動(或--reload標誌)

如果proxysql使用--reload標誌執行,則會嘗試將配置文件中的配置與數據庫文件的內容合併。 之後,它執行定期啓動。 不能保證ProxySQL會成功管理這兩個配置源的衝突,並且用戶應該驗證合併是否符合預期。

在運行時修改配置


在運行時修改配置是通過ProxyServer的MySQL管理端口完成的。 連接到它之後,我們會看到一個MySQL兼容的界面來查詢幾個與ProxySQL相關的表:
proxysql>show tables;
+--------------------------------------+
| tables                               |
+--------------------------------------+
| global_variables                     |
| mysql_collations                     |
| mysql_query_rules                    |
| mysql_replication_hostgroups         |
| mysql_servers                        |
| mysql_users                          |
| runtime_global_variables             |
| runtime_mysql_query_rules            |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers                |
| runtime_mysql_users                  |
| runtime_scheduler                    |
| scheduler                            |
+--------------------------------------+
13 rows in set (0.00 sec)
每個這樣的表在管理界面中具有明確定義的角色:


mysql_servers包含用於連接到ProxySQL的後端服務器列表
mysql_users包含用於向ProxySQL和後端服務器進行身份驗證的用戶列表
mysql_query_rules包含緩存,路由或重寫通過代理的SQL查詢的規則
global_variables包含單個表中的MySQL變量和管理變量
debug_levels僅用於ProxySQL的調試版本
這些表表示從上圖的中間層(內存數據庫),可以使用標準SQL查詢進行操作。 爲了從該層向上或向下移動配置,請參閱下一節。


Moving config between layers(在層之間移動配置)

爲了在三層之間移動配置,通過管理界面有一組不同的管理命令。 一旦瞭解了三層中的每一層意味着什麼,語義應該是相當明顯的。 連同每個命令的說明,旁邊寫有一個數字。 數字對應於上圖中的箭頭。


For handling MySQL users:



[1] LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
loads MySQL users from the in-memory database to the runtime data structures
[2] SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
persists the MySQL users from the runtime data structures to the in-memory database
[3] LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
loads MySQL users from the on-disk database to the in-memory database
[4] SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
persists the MySQL users from the in-memory database to the on-disk database
[5] LOAD MYSQL USERS FROM CONFIG
loads from the configuration file the users into the in-memory database


For handling MySQL servers:



[1] LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
loads MySQL servers from the in-memory database to the runtime data structures
[2] SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
persists the MySQL servers from the runtime data structures to the in-memory database
[3] LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
loads MySQL servers from the on-disk database to the in-memory database
[4] SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
persists the MySQL servers from the in-memory database to the on-disk database
[5] LOAD MYSQL SERVERS FROM CONFIG
loads from the configuration file the servers into the in-memory database


For handling MySQL query rules:



[1] LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
loads MySQL query rules from the in-memory database to the runtime data structures
[2] SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
persists the MySQL query rules from the runtime data structures to the in-memory database
[3] LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
loads MySQL query rules from the on-disk database to the in-memory database
[4] SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
persists the MySQL query rules from the in-memory database to the on-disk database
[5] LOAD MYSQL QUERY RULES FROM CONFIG
loads from the configuration file the query rules into the in-memory database


For handling MySQL variables:



[1] LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
loads MySQL variables from the in-memory database to the runtime data structures
[2] SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
persists the MySQL variables from the in-memory database to the on-disk database
[3] LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
loads MySQL variables from the on-disk database to the in-memory database
[4] SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
persists the MySQL variables from the runtime data structures to the in-memory database
[5] LOAD MYSQL VARIABLES FROM CONFIG
loads from the configuration file the variables into the in-memory database


For handling admin variables:



[1] LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
loads admin variables from the in-memory database to the runtime data structures
[2] SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
persists the admin variables from the runtime data structures to the in-memory database
[3] LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
loads admin variables from the on-disk database to the in-memory database
[4] SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
persists the admin variables from the in-memory database to the on-disk database
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章