程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL proxy讀寫分離如何運行?

MySQL proxy讀寫分離如何運行?

編輯:MySQL綜合教程

我們大家都知道MySQL Proxy是處於客戶端的實際應用程序與MySQL數據庫服務器之間,主要是通過截斷、改變並轉發客戶端與後端數據庫之間的通信實現其功能的,這與WinGate之類的網絡代理服務器的基本思想是一樣的。

代理服務器是和TCP/IP協議打交道,而要理解MySQL Proxy的工作機制,同樣要清楚MySQL客戶端和服務器之間的通信協議,MySQL Protocol包括認證和查詢兩個基本過程:

認證過程包括:

客戶端向服務器發起連接請求

服務器向客戶端發送握手信息

客戶端向服務器發送認證請求

服務器向客戶端發送認證結果

如果認證通過,則進入查詢過程:

客戶端向服務器發起查詢請求

服務器向客戶端返回查詢結果

當然,這只是一個粗略的描述,每個過程中發送的包都是有固定格式的,想詳細了解MySQL Protocol的同學,可以去這裡看看。MySQL Proxy要做的,就是介入協議的各個過程。首先MySQL Proxy以服務器的身份接受客戶端請求,根據配置對這些請求進行分析處理,然後以客戶端的身份轉發給相應的後端數據庫服務器,再接受服務器的信息,返回給客戶端。

所以MySQL Proxy需要同時實現客戶端和服務器的協議。由於要對客戶端發送過來的SQL語句進行分析,還需要包含一個SQL解析器。可以說MySQL Proxy相當於一個輕量級的MySQL了,實際上,MySQL Proxy的admin server是可以接受SQL來查詢狀態信息的。

MySQL Proxy通過lua腳本來控制連接轉發的機制。主要的函數都是配合MySQL Protocol各個過程的,這一點從函數名上就能看出來:

  1. connect_server()   
  2. read_handshake()   
  3. read_auth()   
  4. read_auth_result()   
  5. read_query()   
  6. read_query_result()  

至於為什麼采用lua腳本語言,我想這是因為MySQL Proxy中采用了wormhole存儲引擎的關系吧,這個蟲洞存儲引擎很有意思,數據的存儲格式就是一段lua腳本,真是創意無限啊。

國人寫的MySQL 負載均衡

以下是amoeba介紹

Amoeba 座落與Client、Database Server(s)之間。 具有負載均衡、高可用性、sql過濾、可承受高並發、讀寫分離、Query Route解析sql query語句,並且根據條件與預先設定的規則,請求到指定的目標數據庫。可並發請求多台數據庫合並結果)、對客戶端透明。

主要降低 數據切分帶來的復雜多數據庫結構、數據切分規則 給應用帶來的影響。

能夠輕易實現讀寫分離

Failover

負載均衡。

能夠幫助解決數據切分問題

目前amoeba 實現了 MySQL 數據庫的相關技術。

適用:

MySQL 4.1或者以上版本MySQL 協議版本:10)

暫時不支持事務、DDL語句目前只會分配給默認的數據庫執行

運行環境:

至少需要運行 MySQL 4.1以上 服務一個;

Java 1.5或 以上版本

以上的相關內容就是對MySQL proxy讀寫分離的介紹,望你能有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved