1. 程式人生 > >mysql 讀寫分離 amoeba實現

mysql 讀寫分離 amoeba實現

讀寫分離 這裡使用amoeba實現 amoeba是用java寫的 所以必須先裝好jdk 然後配好環境變數

我這裡是在java官網下的jdl1.8 的rpm包 直接yum安裝 預設安裝在/usr/java/jdk1.8.0_161/


配好環境變數後 命令列 java -version 檢視java版本

並且 java在命令列也可以補齊了

java弄好之後 我們要找到 amoeba的包 我這裡是用的amoeba-mysql-3.0.5-RC 這個版本 

本來有用的是2.0.1版本 但是當時啟動amoeba的時候總是提示stack size too small at least 228k

然後解決方法是編輯amoeba安裝目錄下的一個 jvm.properties 這個檔案 改一個-Xss196 的引數 改成 -Xss256 

然而我在2.0.1的版本下並沒有找到這個檔案 很尬  所以使用了3.0.5版本 這個地方我覺得就是這個opensource作者的問題了

這個檔案是amoeba自帶的配置檔案 跟jdk一點關係都沒有  你用這個配置起得來你自己寫的軟體你自己不知道麼?真的很無語

然後我們需要在主從資料庫mysql上 建立一個供amoeba使用的至少可以遠端連線的賬戶 這個賬戶很關鍵 一會會寫進amoeba的.xml配置檔案裡面

注意 在所有的後端資料庫上都必須建立這個賬戶 因為這是amoeba接受前端的請求後 在後端進行操作實際所使用的身份 

那個db上沒有 amoeba就訪問操作不了這個db

關鍵的來了 

然後我們要在amoeba上做配置了

cd /usr/loca/amoeba(這個是我amoeba的解壓目錄)

vim dbServer.xml   #這個是amoeba的第一個關鍵配置檔案

定義了 後端的節點 amoeba的訪問 以及slave叢集

要點1:

schema這個引數指定amoeba可以控制的庫 這裡amoeba是不能控制除了這個引數裡寫的庫的其他的庫 所以我們剛剛的使用者授權也是基於這個庫的 

講道理這裡應該可寫 * 表示 反正這裡怎麼寫 授權就要怎麼給

要點2:

緊隨其後的user & password 引數 我們給的就是剛剛在所有後端授權建立的賬戶 的使用者名稱 密碼 這個是amoeba能成功訪問後端的關鍵

要點3:

下面的dbServer語句塊 定義了後端的節點庫 這個名字可以隨意 但是要和後面的 amoeba.xml裡面的規則保持一致

我們在這裡給出兩個 一個master 以及它的IP ,一個slave 以及它的IP

要點4:

其實amoeba預設好像是用於這種一主多從模式的 配置檔案預設有slave叢集的語句塊 並且還可以實現loadbalance 

這裡引數1 表示roundrobin 輪叫

這裡也可以仿照這個模式定義master的叢集 一樣的

要是你有多個slave 可以按照註釋那樣 逗號隔開 全部加入 poolname這個引數後面 表示他加入這個池 多個master同理

至於哪個池怎麼工作 則是在amoeba.xml裡面定義

下面這個就是amoeba.xml的配置了 

這裡定義了 使用者訪問amoeba時候所用的虛擬賬戶 注意 這個賬戶是amoeba的賬戶 並不是真實的mysql的賬戶 只是使用者用它登陸amoeba

amoeba相當於一個代理 將來就用這個虛擬的賬戶登陸amoeba 然後amoeba用上面授權了建立的真實資料庫賬戶 在各個後端資料庫裡訪問 操作

這一塊 就是定義那個後端怎麼工作了 

defaultpool 表示預設池 預設其他操作在這個池中的後端資料庫裡面做

readpool 讀池 writeool 寫池

我這裡只有兩個資料庫 就直接寫上面dbServer裡定義的server了 如果你上面定義了master&slave 池的話 這裡寫池也是可以的 

然後我們到amoeba的安裝目錄下 cd /bin

直接./lancher 執行啟動指令碼 

果不其然報錯 棧空間不足 果斷返回amoeba的主目錄 

vim jvm.properties 然後如下圖設定引數 

重新啟動指令碼

雖然他看上去好像有報錯 但是確實啟動了 /尬

檢視下amoeba的預設listen埠 沒毛病

然後我們直接在安裝amoeba的這臺主機上 雖然沒有裝資料庫 但居然能直接使用mysql 命令

直接遠端登入 amoeba服務 使用amoeba虛擬賬號 -P引數表示請求埠8066 必加!

stop掉讀池中的db(slave) select操作報錯 

stop掉寫池中的db(master) insert 操作報錯 

看到這樣的結果 表示完成了讀寫分離