Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載

本博主配置好的Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載,鏈接:https://pan.baidu.com/s/1zhgNSW-VC1sPeIq4UfsOhw
提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。
MySQL Proxy處於客戶端應用程序和MySQL伺服器之間,通過截斷、改變並轉發客戶端和後端資料庫之間的通信來實現其功能。代理伺服器是和TCP/IP協議打交道,
而要理解MySQL Proxy的工作機制,同樣要清楚MySQL客戶端和伺服器之間的通信協議,MySQL Protocol 包括認證和查詢兩個基本過程:
.................................
認證過程包括:
1)客戶端向伺服器發起連接請求
2)伺服器向客戶端發送握手信息
3)客戶端向伺服器發送認證請求
4)伺服器向客戶端發送認證結果
................................
如果認證通過,則進入查詢過程:
1)客戶端向伺服器發起查詢請求
2)伺服器向客戶端返回查詢結果
當然,這只是一個粗略的描述,每個過程中發送的包都是有固定格式的。MySQL Proxy要做的,就是介入協議的各個過程。首先MySQL Proxy以伺服器的身份接受客戶端請求,
根據配置對這些請求進行分析處理,然後以客戶端的身份轉發給相應的後端資料庫伺服器,再接受伺服器的信息,返回給客戶端。所以MySQL Proxy需要同時實現客戶端和服務
器的協議。由於要對客戶端發送過來的SQL語句進行分析,還需要包含一個SQL解析器。可以說MySQL Proxy相當於一個輕量級的MySQL了,實際上,MySQL Proxy的admin server
是可以接受SQL來查詢狀態信息的。
MySQL Proxy通過lua 腳本來控制連接轉發的機制。主要的函數都是配合MySQL Protocol各個過程的,這一點從函數名上就能看出來:
connect_server()
read_handshake()
read_auth()
read_auth_result()
read_query()
read_query_result()
至於為什麼採用lua 腳本語言,大概是因為MySQL Proxy中採用了wormhole 存儲引擎 的關係吧,這個蟲洞存儲引擎很有意思,數據的存儲格式就是一段lua腳本。

ProxySQL配置系統分為三層的目的:
1) 自動更新;
2) 儘可能的不重啟proxysql就可以修改配置;
3) 方便回滾錯誤配置;

簡單說就是配置proxysql分為三個級別,RUNTIME是即時生效的,MEMORY是保存在內存中但並不立即生效的,DISK|CONFIG FILE是持久化或寫在配置文件中的。

這三個級別的配置文件互不干擾,在某個層級修改了配置文件,想要載入或保存到另一個層級,需要額外的LOAD或SAVE操作:”LOAD xx_config FROM xx_level | LOAD xx_config TO xx_level | SAVE xx_config TO xx_level | SAVE xx_config FROM xx_level”,達到載入配置或者持久化配置的目的。這三層中每層的功能與含義如下:
–  RUNTIME層
代表的是ProxySQL當前生效的配置,包括 global_variables, mysql_servers, mysql_users, mysql_query_rules。無法直接修改這裡的配置,必須要從下一層load進來。該層級的配置時在proxysql管理庫(sqlite)的main庫中以runtime_開頭的表,這些表的資料庫無法直接修改,只能從其他層級載入;該層代表的是ProxySQL當前生效的正在使用的配置,包括global_variables, mysql_servers, mysql_users, mysql_query_rules表。無法直接修改這裡的配置,必須要從下一層load進來。也就是說RUNTIME這個頂級層,是proxysql運行過程中實際使用的那一份配置,這一份配置會直接影響到生產環境的,所以要將配置載入進RUNTIME層時需要三思而行。本博主配置好的Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載,鏈接:https://pan.baidu.com/s/1zhgNSW-VC1sPeIq4UfsOhw
提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。

–  MEMORY層
是平時在mysql命令行修改的 main 裡頭配置,可以認為是SQLite資料庫在內存的鏡像。該層級的配置在main庫中以mysql_開頭的表以及global_variables表,這些表的數據可以直接修改;用戶可以通過MySQL客戶端連接到此介面(admin介面),然後可以在mysql命令行查詢不同的表和資料庫,並修改各種配置,可以認為是SQLite資料庫在內存的鏡像。也就是說MEMORY這個中間層,上面接著生產環境層RUNTIME,下面接著持久化層DISK和CONFIG FILE。MEMORY層是我們修改proxysql的唯一正常入口。一般來說在修改一個配置時,首先修改Memory層,確認無誤後再接入RUNTIME層,最後持久化到DISK和CONFIG FILE層。也就是說memeory層裡面的配置隨便改,不影響生產,也不影響磁碟中保存的數據。通過admin介面可以修改mysql_servers、mysql_users、mysql_query_rules、global_variables等表的數據。

–  DISK|CONFIG FILR層
持久存儲的那份配置,一般在$(DATADIR)/proxysql.db,在重啟的時候會從硬碟里載入。 /etc/proxysql.cnf文件只在第一次初始化的時候用到,完了後,如果要修改監聽埠,還是需要在管理命令行里修改,再 save 到硬碟。該層級的配置在磁碟上的sqlite庫或配置文件里。DISK/CONFIG FILE層表示持久存儲的那份配置,持久層對應的磁碟文件是$(DATADIR)/proxysql.db,在重啟ProxySQL的時候,會從proxysql.db文件中載入信息。而 /etc/proxysql.cnf文件只在第一次初始化的時候使用,之後如果要修改配置,就需要在管理埠的SQL命令行里進行修改,然後再save到硬碟。 也就是說DISK和CONFIG FILE這一層是持久化層,我們做的任何配置更改,如果不持久化下來,重啟後,配置都將丟失。

                                      需要注意                                       
1) ProxySQL每一個配置項在三層中都存在,但是這三層是互相獨立的,也就是說proxysql可以同時擁有三份配置,每層都是獨立的,可能三份配置都不一樣,也可能三份都一樣。
2) RUNTIME層代表 ProxySQL 當前生效的正在使用的配置,無法直接修改這裡的配置,必須要從下一層 “load” 進來。
3) MEMORY這一層上面連接 RUNTIME 層,下面連接持久化層。在這層可以正常操作 ProxySQL 配置,隨便修改,不會影響生產環境。修改一個配置一般都是先在 MEMORY 層完成,然後確認正常之後再載入到 RUNTIME 和持久化到磁碟上。
4) DISK 和 CONFIG FILE層持久化配置信息,重啟後內存中的配置信息會丟失,所以需要將配置信息保留在磁碟中。重啟時,可以從磁碟快速載入回來。

ProxySQL配置文件的修改流程一般是:
– 啟動時:先修改必要的CONFIG FILE配置,比如管理埠,然後啟動;
– 其他配置:修改MEMORY中的表,然後載入到RUNTIME並持久化。

ProxySQL具有一個複雜但易於使用的配置系統,可以滿足以下需求:
–  允許輕鬆動態更新配置(這是為了讓ProxySQL用戶可以在需要零宕機時間配置的大型基礎架構中使用它)。與MySQL兼容的管理界面可用於此目的。
–  允許儘可能多的配置項目動態修改,而不需要重新啟動ProxySQL進程
–  可以毫不費力地回滾無效配置
–  這是通過多級配置系統實現的,其中設置從運行時移到內存,並根據需要持久保存到磁碟。

一般,修改的配置都是在memory層。可以load到runtime,使配置在不用重啟proxysql的情況下也可以生效,也可以save到disk,將對配置的修改持久化!

 

Mysql Proxy的原理圖

順便貼下Mysql Proxy的工作拓撲圖

本博主配置好的Centos7 安裝ProxySQL和Mysql57實現讀寫分離集群環境(四節點)虛擬機下載,鏈接:https://pan.baidu.com/s/1zhgNSW-VC1sPeIq4UfsOhw
提取碼:5j7t 下載後,用Vmware workstation打開,即可以使用。

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營

發表評論

您的電子郵箱地址不會被公開。 必填項已用*標註