MariaDB Maxscale 記憶體不起作用
我已設置 Maxscale (v6.2) 並已連接到 Galera 集群(3 個節點 - MariaDB 10.5)。我正在嘗試使用記憶體過濾器,但它似乎不起作用。我為所有節點啟用了通用日誌,每當我執行查詢時,我都可以看到查詢是從節點而不是 Maxscale 記憶體中提供的。
我還注意到,當我使用並發 10 的 mysqlslap 時,我發現每個節點中的通用日誌文件顯示 10 次連接,實際查詢命中為 3。當我使用 Haproxy 進行類似操作時,通用日誌顯示 3 次連接並命中還有 3. 不確定 Maxscale 是否需要正確設置任何內容。
這是我的 maxscale.cnf
# MaxScale documentation: # https://mariadb.com/kb/en/mariadb-maxscale-25/ # Global parameters # # Complete list of configuration options: # https://mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/ [maxscale] threads=auto log_info=true # Server definitions # # Set the address of the server to the network # address of a MariaDB server. # [server1] type=server address=1.1.1.1 port=3306 protocol=MariaDBBackend [server2] type=server address=1.1.1.2 port=3306 protocol=MariaDBBackend [server3] type=server address=1.1.1.3 port=3306 protocol=MariaDBBackend # Monitor for the servers # # This will keep MaxScale aware of the state of the servers. # MariaDB Monitor documentation: # https://mariadb.com/kb/en/maxscale-25-monitors/ [Galera-Monitor] type=monitor module=galeramon servers=server1,server2,server3 user=maxscale password=XXXXXXXX monitor_interval=2000 #Galera router service [Galera-Service] type=service router=readwritesplit servers=server1,server2,server3 user=maxscale password=XXXXXXXX lazy_connect=true #Galera cluster listener [Galera-Listener] type=listener service=Galera-Service protocol=MariaDBClient address=0.0.0.0 port=3306 #cache [Cache] type=filter module=cache storage=storage_inmemory soft_ttl=300s hard_ttl=600s cached_data=shared
**編輯:**您忘記添加
filters=Cache
到服務定義。這就是為什麼它看起來不起作用的原因。預設情況下,過濾器僅適用於使用它們的服務。要將它們投入使用並將它們組合成過濾器鏈,請將
filters
參數添加到服務中,並將過濾器作為參數添加到服務中,並用豎線字元 (|
) 分隔:filter=FirstFilter|SecondFilter
cache_data=thread_specific
將為 MaxScale 中的每個工作執行緒分配一個單獨的記憶體。這意味著對記憶體的訪問速度更快,但它減少了連接之間的共享。平均而言,您將看到與 MaxScale 中配置的執行緒一樣多的請求(在您的情況下threads=auto
意味著與 CPU 核心一樣多)。如果您想進一步減少最終發送到數據庫的查詢數量,您可以使用cache_data=shared
.連接計數預計與沒有記憶體的情況相同:記憶體僅在結果級別起作用,而不是連接級別。為避免在記憶體提供所有結果時連接到數據庫,請
lazy_connect=true
在readwritesplit
服務中使用。這將延遲連接創建,直到請求實際最終發送到數據庫。
lazy_connect
即使啟用並且所有請求都相同,也可能仍然會創建一些後端連接。如果執行更改連接狀態的命令(例如SET NAMES utf8mb4
),通常會發生這種情況。記憶體不儲存這些結果,因為它們不是讀取的,這意味著它們總是從數據庫中檢索。