1.什麼是amoeba?
Amoeba(變形蟲)項目,專注 分布式資料庫 proxy 開發。座落與Client、DB Server(s)之間。對用戶端透明。具有負載均衡、高可用性、sql過濾、讀寫分離、可路由相關的query到目标資料庫、可并發請求多台資料庫合并結果。
優點:
• 降低資料切分帶來的複雜多資料庫結構
• 提供切分規則并降低 資料切分規則 給應用帶來的影響
• 降低db與用戶端的連接配接數
• 讀寫分離
2.amoeba的部署安裝
準備:
主機 | IP位址 |
---|---|
master(主資料庫):負責寫入操作 | 10.0.0.201 |
slave(從資料庫):負責讀取操作 | 10.0.0.202 |
amoeba | 10.0.0.41 |
client(用戶端) | 10.0.0.31 |
系統:CentOS7
JDK:版本1.5以上,實驗用的是jdk1.8
MySQL:版本5.7
Amoeba:amoeba-mysql-3.0.5-RC
(1)安裝JDK(amoeba主機)
#下載下傳jdk包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#安裝jdk并配置環境變量
rpm -ivh jdk-8u131-linux-x64.rpm
#vim /etc/profile
#底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export PATH="$JAVA_HOME/bin:$PATH"
source /etc/profile #(使環境變量立即生效)
(2)安裝amoeba
#下載下傳軟體包
wget https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
#安裝
yum install unzip zip -y #已安裝請忽略
unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/amoeba #解壓軟體包到/usr/local下
#配置環境變量
#vim /etc/profile
#底部添加:
export AMOEBA_HOME=/usr/local/amoeba/amoeba-mysql-3.0.5-RC
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile #立即生效
#給amoeba授權mysql遠端賬戶
#實驗中使用的是root使用者,實際工作中根據需要配置
4.配置檔案
(1)conf/dbServers.xml
#設定amoeba要連接配接mysql資料庫的端口,預設3306
<property name="port">3306</property>
#設定預設的資料庫
<property name="schema">test_1</property>
#設定amoeba連接配接後端資料庫伺服器的賬戶密碼
<property name="user">root</property>
<property name="password">123456</property>
#設定後端可寫的資料庫
<dbServer name="writedb" parent="abstractServer">
factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">10.0.0.201</property>
</factoryConfig>
</dbServer>
#設定後端可讀的資料庫
<dbServer name="slave" parent="abstractServer">
<factoryConfig>
<!-- mysql ip -->
<property name="ipAddress">10.0.0.202</property>
</factoryConfig>
</dbServer>
#定義一個虛拟的dbserver,相當于一個dbserver組,将可讀的資料庫ip統一放到一個組内
<dbServer name="myslave" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<property name="loadbalance">1</property> #選擇排程算法,1表示複制均衡,2表示權重,3表示HA
<property name="poolNames">slave</property> #myslave組成員
</poolConfig>
</dbServer>
(2)conf/amoeba.xml
#設定amoeba監聽的端口,預設8066
<property name="port">8066</property>
#配置用戶端連接配接amoeba時的賬号,與後端伺服器密碼無關
<property name="user">root</property>
<property name="password">123456</property>
#設定amoeba預設的池
<property name="defaultPool">writedb</property>
#取消注釋,這裡用來指定前面定義好的兩個讀寫池
<property name="writePool">writedb</property>
<property name="readPool">myslave</property>
(3)./jvm.properties
#占用記憶體配置檔案,Xss必須大于228才能啟動JVM
JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"
5.啟動amoeba
/bin/launcher
6.測試amoeba(client)
#在用戶端登入amoeba
mysql -h10.0.0.41 -uroot -p123456 -P8066
use test_1;
select * from dept;
#在amoeba上插入資料
insert into dept values(2,2);
#在master和slave上分别檢視表中的資料
select * from dept;
#将master上的mysql服務停止,繼續插入資料會發現插入不成功,但是能夠查詢
#将master上的msyql服務開啟,停止slave上的mysql,發現插入成功,但是不能夠查詢
mysql> select * from aaa;
ERROR 1044 (42000): poolName=myslave, no valid pools