共計 2811 個字符,預計需要花費 8 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下利用 amoeba 實現 mysql 數據庫讀寫分離的案例,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
關于 mysql 的讀寫分離架構有很多,百度的話幾乎都是用 mysql_proxy 實現的。由于 proxy 是基于 lua 腳本語言實現的,所以網上不少網友表示 proxy 效率不高,也不穩定,不建議在生產環境使用;
amoeba 是阿里開發的一款數據庫讀寫分離的項目 (讀寫分離只是它的一個小功能),由于是基于 java 編寫的,所以運行環境需要安裝 jdk;
前期準備工作:
1. 兩個數據庫,一主一從,主從同步;
master:172.22.10.237:3306;主庫負責寫入操作;
slave: 10.4.66.58:3306;從庫負責讀取操作;
amoeba: 172.22.10.237:8066 ; 我把 amoeba 安裝到了主庫所在的服務器,當然,你也可以安裝到第三臺服務器上;
所有服務器操作系統均為 centos7;
2. 在 amoeba 所在的服務器上配置安裝 jdk;
我安裝的是 jdk1.8;
路徑是:JAVA_HOME=/usr/local/java/jdk1.8.0_131
以上務必自己點搭建、配置好,主從正常工作,添加 jdk 環境變量:/etc/profile ;
安裝 amoeba 的方式有很多,這里就不在安裝上面費口舌了,我下載了 amoeba-mysql-3.0.5-RC-distribution 的安裝包,直接解壓即可使用;
解壓目錄:/usr/local/amoeba/
很明顯 conf 里是配置文件,bin 里是啟動程序;
剛才說到 amoeba 的功能可不止讀寫分離,但如果只用讀寫分離功能的話只需要配置這幾個個文件即可:conf/dbServers.xml conf/amoeba.xml 和 bin/launcher;
conf/dbServers.xml:
` property name= port 3306 /property
# 設置 Amoeba 要連接的 mysql 數據庫的端口,默認是 3306
property name= schema testdb /property
# 設置缺省的數據庫,當連接 amoeba 時,操作表必須顯式的指定數據庫名,即采用 dbname.tablename 的方式,不支持 use dbname 指定缺省庫,因為操作會調度到各個后端 dbserver
property name= user test1 /property
# 設置 amoeba 連接后端數據庫服務器的賬號和密碼,因此需要在所有后端數據庫上創建該用戶,并授權 amoeba 服務器可連接
property name= password 111111 /property
property name= maxActive 500 /property #最大連接數,默認 500
property name= maxIdle 500 /property #最大空閑連接數
property name= minIdle 1 /property #最新空閑連接數
dbServer name= writedb parent= abstractServer #設置一個后端可寫的數據庫,這里定義為 writedb,這個名字可以任意命名,后面還會用到
property name= ipAddress 172.22.10.237 /property # 設置后端可寫 dbserver 的 ip
dbServer name= slave01 parent= abstractServer #設置后端可讀數據庫
property name= ipAddress 10.4.66.58 /property
dbServer name= myslave virtual= true #設置定義一個虛擬的 dbserver,實際上相當于一個 dbserver 組,這里將可讀的數據庫 ip 統一放到一個組中,將這個組的名字命名為 myslave
property name= loadbalance 1 /property #選擇調度算法,1 表示復制均衡,2 表示權重,3 表示 HA, 這里選擇 1
property name= poolNames slave01 /property #myslave 組成員 `
conf/amoeba.xml:
property name= port 8066 /property
# 設置 amoeba 監聽的端口,默認是 8066
property name= ipAddress 127.0.0.1 /property
# 配置監聽的接口,如果不設置,默認監聽所以的 IP
# 提供客戶端連接 amoeba 時需要使用這里設定的賬號 (這里的賬號密碼和 amoeba 連接后端數據庫服務器的密碼無關)
property name= user root /property
property name= password 123456 /property
property name= defaultPool myslave /property
# 設置 amoeba 默認的池,這里設置為 writedb
property name= writePool master /property
# 這兩個選項默認是注銷掉的,需要取消注釋,這里用來指定前面定義好的倆個讀寫池
property name= readPool slave01 /property
bin/launcher :
# 啟動腳本,需要配置 jdk 環境變量; # 在注釋后的第一行添加: JAVA_HOME=/usr/local/java/jdk1.8.0_131
launcher 是啟動腳本,如果不配置 JAVA_HOME 的話,即便你在 /etc/profile 中配置了環境變量也可能會報錯:沒有配置 jdk 環境變量;
還有一個配置文件:jvm.properties
# 占用內存配置文件
# -Xss 參數有最小值要求,必須大于 228 才能啟動 JVM
# 修改: JVM_OPTIONS= -server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m
有經驗的運維都知道,凡是和 jdk 沾上邊的,基本都會和內存的調優有關系,amoeba 也不例外;
現在可以啟動了:
啟動后就可以看到本機的 8066 端口:
這時,你只需要通過本機 ip 的 8066 端口和你配置文件中設置的賬號密碼來連接數據庫就行了,寫入的數據都會到 master 里,讀取的數據都會從 slave 中讀取;
測試:
關閉 master 數據庫,依然可以讀取:執行 select 查看命令;
或者
關閉 slave 數據庫,依然可以寫入:執行 update、inster 命令;
看完了這篇文章,相信你對“利用 amoeba 實現 mysql 數據庫讀寫分離的案例”有了一定的了解,如果想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!
向 AI 問一下細節