萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 使用Amoeba實現MySQL的主從讀寫分離的例子

使用Amoeba實現MySQL的主從讀寫分離的例子

moeba是一個以MySQL為底層數據存儲,並對應用提供MySQL協議接口的proxy,下面我們一起來看看關於使用Amoeba實現MySQL的主從讀寫分離的例子吧. 主從同步架構的優點
  • 讀取工作交給了從服務器,降低了主服務器的壓力
  • 在從服務器進行備份,避免備份期間影響主服務器服務
  • 當主服務器出現問題時,可以切換到從服務器。
Amoeba介紹  代碼如下 復制代碼 Amoeba(變形蟲)項目,該開源框架於2008年 開始發布一款 Amoeba for Mysql軟件。這個軟件致力於MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的 時候充當SQL路由功能,專注於分布式數據庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標數據庫、可並發請求多台數據庫合並結果。 通過Amoeba你能夠完成多數據源的高可用、負載均衡、數據切片的功能。本次主要用到的就是Amoeba for Mysql這個軟件。  Amoeba for Mysql主從分離模式 MySQL的主從同步配置 實驗環境
  • 服務器類型:虛擬機
  • 系統: CentOS release 6.8 (Final)
  • MySQL: 5.1.73
  • 主數據庫: 172.16.2.239
  • 從數據庫: 172.16.2.230
配置主庫
  1. 本次操作使用yum服務進行安裝,輸入yum -y install mysql(注:-y 表示安裝過程自動選擇’y’)
  2. service mysql start 啟動MySQL服務
  3. 在root賬戶下使用 mysqladmin -u root password ‘newpassword’為mysql的root賬戶設置密碼(注:首次登錄root賬號沒有密碼,直接回車進入,但沒有設置密碼無法進行很多操作)
  4. mysql -u root -p 輸入密碼後登錄
  5. grant replication salve on *. * to ‘root’@’172.16.2.230’ identified by ‘123456’ (添加從庫到本機同步的遠程賬號下,root是賬號,ip為從庫地址,123456為登錄密碼)
  6. select user, host,password from mysql.user查看是否創建成功並查看有無賬號密碼為空的賬戶,並刪除(注:這步不是必須,空賬戶的存在會影響登錄,這是在遇到問題之前先進行排除)
  7. vim /etc/my.cnf 
    my.cnf內容
    (server-id 不能與其它節點重復,replicate_ignore_db設置了不進行同步的databases)
  8. 退出MySQL,service mysqld restart重啟後登錄,查看server_id 以及 File+position信息並記錄 
    master status
配置從庫
  1. 在172.16.2.230上開始配置從庫,安裝過程參照主庫(這裡筆者使用的是默認數據庫作為主從,所以直接用yum安裝從庫,如果主庫有改動需要保持一致則使用dump備份並在從庫節點上恢復的方式配置)
  2. vim /etc/my.cnf 編輯配置文件 
    從庫配置 
    (注:這裡的server-id一定不能與主庫相同)
  3. service mysqld restart重啟數據庫
  4. mysql -u root -p -h 172.16.2.239驗證連接主庫(此處的root為在主庫中授權過的賬號)
  5. 退出遠程連接,換為本地root賬號登錄,SHOW VARIABLES LIKE ‘server_id’查看ID號確認是否和主庫重復
  6. slave stop;關閉同步服務
  7. change master to master_host=’172.16.2.239’, master_user=’root’, master_password=’123456’, master_log_file=’master_bin.000019’, master_log_pos=106;(注:此處的master_user為授權的賬號,log_file和pos為之前主庫上查看的記錄,見上面第8步。如果在主庫中在未同步的情況下使用過flush privileges命令刷新過數據庫的話,log_file會自動+1)
  8. slave star**t 打開同步,**show slave status查看狀態 
    同步狀態
    這裡主要注意的是Slave_IO_Running 和 shlave_SQL_Running是否為Yes,如果為NO,注意檢查配置
  9. 檢查完狀態後可以在主庫中的test庫中建立一張表,寫入完成後便能再從庫中查看,同步完成
安裝配置 Amoeba 1.配置JAVA環境 此處需要下載JDK,筆者圖方便直接從yum上進行下載安裝,yum -y install java-1.6.0-openjdk 這裡使用的是1.6的版本。也可以直接使用wget 到Oracle上進行下載,只不過需要解壓建立連接等操作。 
vim /etv/profile 進行java環境變量的配置,注意下載方式不同,路徑也不同 
環境變量
完成後執行source profile ,使用java -verison查看 
2. 安裝Amoeba
wget https://sourceforge.net/projects/amoeba/files/Amoeba_for_mysql/2.2.x/amoeba-mysql-binary-2.2.0.tar.gz/download

mkdir /usr/local/amoeba-2.2.0
tar xvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba-2.2.0
3.配置Amoeba vim /usr/local/amoeba-2.2.0/conf/dbServers.xml 
這裡寫圖片描述
  • port = 3306指的是主從數據庫的端口號
  • schema = test指的是amoeba代理數據庫的名稱
  • user = root 以及 password 是amoeba登錄主從服務器的賬號密碼,因此要注意這裡的賬戶必須有訪問兩個數據庫的權限才行
這裡寫圖片描述
  • 這裡的localhost指的是主庫的代號,底下的ipAddress為主庫地址
  • slave指的是從庫的代號,底下的ipAddress為從庫地址
  • 輪詢的主和從的讀設置權重設置成1:3,這樣就可以很好的解決主從不壓力均衡的問題
vim /usr/local/amoeba-2.2.0/conf/amoeba.xml 
這裡寫圖片描述
  • 這裡的8066端口為amoeba代理所監聽的端口
  • user 和 password 是用來登錄amoeba代理所使用的賬號信息
這裡寫圖片描述
  • LRUMapSize定義了Amoeba緩存的SQL語句解析條數
  • defaultPool配置了默認的節點,一些除了SELELCT/UPDATE/INSERT/DELETEDE的語句都會在上面執行
  • writePool配置了寫庫,通常就是主庫
  • readPool配置了讀庫,可以為一個也可以是數據庫池
這樣Amoeba的配置就完成了(注:關於配置文件的參數意義在amoeba文檔中有完整的解釋) 接下來進行環境變量的配置,vim /etc/profile.d/amoeba.sh
export AMOEBA_HOME=/usr/local/amoeba-2.2.0/
export PATH=$AMOEBA_HOME/bin/:$PATH
4.啟動Amoeba 執行amoeba start 
The stack size specified is too small, Specify at least 160k 
Could not create the Java virtual machine. 
如果報以上錯誤,需編輯二進制腳本,因為JAVA啟動對xss參數最小值有限制 
vim /usr/local/amoeba-2.2.0/bin/amoeba 
DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss128k” 
修改為如下 
DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss256k” 
(注:如果啟動失敗要主要看有無 Amoeba Monitor Server shutdown completed!,如果沒有請執行一遍amoeba stop) 5.連接amoeba 正常啟動後連接amoeba數據庫,mysql -u root -p -h 172.16.2.231 -P8066 這裡寫圖片描述 這就是正常啟動後的提示信息,如果提示錯誤的話可能性很多,但大多數是網絡(防火牆沒關,主從數據庫未啟動等)、權限(主從數據庫未提供amoeba賬號權限等)以及配置的問題,多多閱讀錯誤提示和日志能讓你更快的定位到錯誤 這裡寫圖片描述 6.測試 測試的方法有很多種這裡就不舉例了,主要的思想是: 
- 在amoeba上創建表,測試操作是否同步主從; 
- 將從庫的同步關閉slave stop,在amoeba上進行寫操作看是否只有主庫寫入;在主從上分別插入一條數據,並在amoba上執行讀操作看顯示的數據等。
copyright © 萬盛學電腦網 all rights reserved