天天看點

使用amoeba實作mysql讀寫分離

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