ProxySQL官檔翻譯__02_ProxySQL配置概述

02_ProxySQL配置概述

備註:文章編寫時間201904-201905期間,後續官方在github的更新沒有被寫入mysql

~
~git

1、多層次配置系統[Multi layer configuration system]

ProxySQL具備複雜且易於使用的配置系統,適合知足如下需求:github

  • 容許對配置進行簡單的動態更新(以便適用於零停機要求的大型架構);
  • 容許動態修改儘量多的配置項,而無需重啓ProxySQL進程;
  • 容許輕鬆回滾無效配置;

~
~
3層配置體系以下所示:sql

+------------------------+
|    RUNTIME    |
+-------------------------+
    /|\        |
     |         |
 [1] |     [2] |
     |        \|/
+-------------------------+
|    MEMORY     |
+-------------------------+
    /|\    |    |\
     |     |      \
 [3] | [4] |       \ [5]
     |    \|/       \
+-------------------------+  +-------------------------+
|      DISK     | |  CONFIG FILE  |
+-------------------------+  +-------------------------+

說明:
RUNTIME ==>表示處理請求的線程使用的ProxySQL在內存中的數據結構。
它包含以下參數:
1)在全局參數(admin_variables)中定義的實際值;
2)在主機組(hostgroup)中包含的後端服務;
3)能夠鏈接到代理的MySQL用戶列表;
備註:不能直接修改RUNTIME配置部分的內容,由於這些是靠近底層的信息;
~
~
MEMORY ==>它有時也被稱爲main;表明了能夠經過MySQL兼容接口使用的內存中的數據庫(proxysql實例)。用戶可使用MySQL客戶端
鏈接到此接口,並查詢各類ProxySQL配置表/數據庫。
~
~
經過該接口,可用使用的參數表包括:
1)mysql_servers-->保存ProxySQL可鏈接的後端服務器的列表;
2)mysql_users -->保存能夠鏈接到ProxySQL的用戶及其憑據列表;注意:ProxySQL也將使用這些憑證去鏈接後端服務;
3)mysql_query_rules-->保存將流量路由到各個後端服務器時依據的查詢規則列表;
4)global_variables -->保存ProxySQL配置的可被動態調整的全局參數;好比下面這些:數據庫

Admin>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.01 sec)

5)mysql_collations -->保存可供ProxySQL使用的MySQL排序規則的列表。這些是直接從客戶端庫中提取的。
6)debug_levels -->保存ProxySQL在debug輸出信息時可被輸出的debug語句的類型列表。能夠根據debug來動態配置,
並將結果輸出到日誌中。注意:這類參數只能在調試時使用,由於影響性能!
~
~
DISK和CONFIG FILE
DISK -->表明在磁盤上的SQLite3類型的數據庫,默認位置爲$(DATADIR)/proxysql.db。因爲在重啓時,內存中未保存的配置將會丟失。
於是由它來將這些配置保存到磁盤。
CONFIG FILE-->表明配置文件。後端

~
~服務器

2、啓動[Startup]

在正常啓動時,ProxySQL首先將讀取它的配置文件來肯定數據目錄位置(datadir)[其餘配置信息暫時不讀取];然後根據數據庫(SQLite3)文件
是否存在來決定後面的動做。數據結構

  • 若是數據庫文件存在,則ProxySQL以此初始化內存、加載配置信息,
  • 若是數據庫文件存不在,可是配置文件還存在,則ProxySQL將解析配置文件內容,加載到內存中的數據庫中;並將這些配置信息保存到磁盤
    數據庫(SQLite3)文件中。特別注意:若是在datadir中找到SQLite3文件,則不會解析配置文件!!

備註:
1)在ProxySQL 1.4.4時引入了2個通用參數,它們只能從配置文件值獲取:restart_on_missing_heartbeats和execute_on_exit_failure;
2)在ProxySQL 2.0.0時又引入了1個通用參數,該參數也只能從配置文件值獲取:errorlog;架構

~
~ide

3、初始啓動[Initial startup (or --initial flag)]

在初始啓動模式下,內存和運行時配置信息將用配置文件來填充;而後這些配置信息將固化到ProxySQL自帶的SQLite數據庫中。
經過使用--initial選項運行ProxySQL能夠強制從新進行初始配置,這會將SQLite數據庫文件重置爲原始狀態(即配置文件中定義的狀態)
並重命名現有的SQLite數據庫文件,以便往後回退(若是須要回退能夠檢查數據目錄中的舊文件)。

~
~

4、重載啓動[Reload startup (or --reload flag)]

若是使用--reload選項執行proxysql,它會嘗試將配置文件中的配置與數據庫文件的內容合併。而後,再執行常規啓動程序。
但要注意,這裏不保證再2個配置內容衝突時ProxySQL能夠正確的合併內容;所以,這時須要人爲的進行確認合併是否達到預期。

~
~

5、運行時修改配置[Modifying config at runtime]

使用MySQL客戶端連入ProxySQL(6032)後,經過查詢、更新各個ProxySQL配置相關的表便可實現動態的修改配置。
配置得相關的表都有明確的名稱:
mysql_servers、mysql_users、mysql_query_rules、global_variables、debug_levels(僅用於調試ProxySQL時手動構建)
以上各表的內容,參看文章第一段的‘多層次配置系統’。

~
~

6、不一樣層間配置信息的流動[Moving config between layers]

爲了讓配置信息持久化到磁盤或載入到runtime層,有一系列的管理命令能夠被使用。這些命令須要對應'3層配置體系'圖來理解。
如下給出相關的命令,命令即變化對應'3層配置體系'圖中的編號:
~
~
3層配置體系以下所示:

+------------------------+
|    RUNTIME    |
+-------------------------+
    /|\        |
     |         |
 [1] |     [2] |
     |        \|/
+-------------------------+
|    MEMORY     |
+-------------------------+
    /|\    |    |\
     |     |      \
 [3] | [4] |       \ [5]
     |    \|/       \
+-------------------------+  +-------------------------+
|      DISK     | |  CONFIG FILE  |
+-------------------------+  +-------------------------+

一、用於從新配置MySQL用戶

[1] LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
做用:將MEMORY層數據庫中的MySQL用戶配置載入到RUNTIME層。
~
[2] SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
做用:將RUNTIME層中的MySQL用戶配置寫入到MEMORY層的數據庫中。
~
[3] LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
做用:將DISK數據庫文件中的MySQL用戶配置載入到MEMORY層的數據庫中。
~
[4] SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
做用:將MEMORY層數據庫中的MySQL用戶配置寫入DISK的數據庫文件進行持久化。
~
[5] LOAD MYSQL USERS FROM CONFIG
做用:從CONFIG FILE(配置文件)中加載用戶到MEMORY層的數據庫中。

二、用於處理MySQL服務器

[1] LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
做用:將MEMORY層數據庫中的MySQL服務器配置載入到RUNTIME層。
~
[2] SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
做用:將RUNTIME層中的MySQL服務器配置寫入到MEMORY層的數據庫中。
~
[3] LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
做用:將DISK數據庫文件中的MySQL服務器配置載入到MEMORY層的數據庫中。
~
[4] SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
做用:將MEMORY層數據庫中的MySQL服務器配置寫入DISK的數據庫文件進行持久化。
~
[5] LOAD MYSQL SERVERS FROM CONFIG
做用:從CONFIG FILE(配置文件)中加載MySQL服務器配置到MEMORY層的數據庫中。

~
~

三、用於處理MySQL查詢規則

[1] LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
做用:將MEMORY層數據庫中的MySQL查詢規則配置載入到RUNTIME層。
~
[2] SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
做用:將RUNTIME層中的MySQL查詢規則配置寫入到MEMORY層的數據庫中。
~
[3] LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
做用:將DISK數據庫文件中的MySQL查詢規則配置載入到MEMORY層的數據庫中。
~
[4] SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
做用:將MEMORY層數據庫中的MySQL查詢規則配置寫入DISK的數據庫文件進行持久化。
~
[5] LOAD MYSQL QUERY RULES FROM CONFIG
做用:從CONFIG FILE(配置文件)中加載MySQL查詢規則配置到MEMORY層的數據庫中。

~
~

四、用於處理MySQL變量

[1] LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
做用:將MEMORY層數據庫中的MySQL參數配置載入到RUNTIME層。
~
[2] SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
做用:將RUNTIME層中的MySQL參數配置寫入到MEMORY層的數據庫中。
~
[3] LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
做用:將DISK數據庫文件中的MySQL參數配置載入到MEMORY層的數據庫中。
~
[4] SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
做用:將MEMORY層數據庫中的MySQL參數配置寫入DISK的數據庫文件進行持久化。
~
[5] LOAD MYSQL VARIABLES FROM CONFIG
做用:從CONFIG FILE(配置文件)中加載MySQL參數配置到MEMORY層的數據庫中。

~
~

五、用於處理admin(ProxySQL)變量

[1] LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
做用:將MEMORY層數據庫中的admin參數配置載入到RUNTIME層。
~
[2] SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
做用:將RUNTIME層中的admin參數配置寫入到MEMORY層的數據庫中。
~
[3] LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
做用:將DISK數據庫文件中的admin參數配置載入到MEMORY層的數據庫中。
~
[4] SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
做用:將MEMORY層數據庫中的admin參數配置寫入DISK的數據庫文件進行持久化。
~
[5] LOAD ADMIN VARIABLES FROM CONFIG
做用:從CONFIG FILE(配置文件)中加載admin參數配置到MEMORY層的數據庫中。
~
備註:以上的命令支持如下簡寫方式:
MEM <==> MEMORY
RUN <==> RUNTIME

~
~

7、總結[Summary]

到此爲止,已經基本瞭解了系統是如何工做的了,下面給出一些經常使用的命令;它們與如何激活更改後的配置(RUNTIME)
以及如何將配置永久保存到磁盤(DISK)有關。特別注意:在將配置加載到RUNTIME層以前,不會激活任何更改。

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;

~
~

8、問題分析[Troubleshooting]

特別注意:只有在將參數值加載到RUNTIME層時纔會進行最終的驗證。

你能夠設置一個值,該值在保存到MEMORY層時不會引起任何類型的警告或錯誤,甚至能夠保存到DISK。
可是,當執行加載到RUNTIME層時,參數值卻恢復到了先前保存的狀態;若是發生這種狀況,就應該檢查定義的錯誤日誌。

例如:
[WARNING] Impossible to set variable monitor_read_only_interval with value "0".
解決辦法:從新設置monitor_read_only_interval的值。

~~完畢!

相關文章
相關標籤/搜索