mysql讀寫分離

來源:互聯網
上載者:User

標籤:amoeba 讀寫分離 mysql


650) this.width=650;" src="http://note.youdao.com/yws/res/1967/C8CCB6CF224C4F19907222B52E4D0B6E" alt="Screenshot-2.png" />
Mysql進階叢集-讀寫分離Amoeba
Amoeba相當於一個SQL請求的路由器,目的是為負載平衡、讀寫分離、高可用性提供機制,而不是完全實現它們。使用者需要結合使用MySQL的 Replication等機制來實現副本同步等功能。amoeba對底層資料庫連接管理和路由實現也採用了可插撥的機制,第三方可以開發更進階的策略類來替代作者的實現。這個程式總體上比較符合KISS原則的思想。

2優勢

Amoeba主要解決以下問題:

a). 資料切分後複雜資料來源整合

b). 提供資料切分規則並降低資料切分規則給資料庫帶來的影響

c). 降低資料庫與用戶端串連

d). 讀寫分離路由

3不足

a)、目前還不支援事務b)、暫時不支援預存程序(近期會支援)

c)、不適合從amoeba導資料的情境或者對大資料量查詢的query並不合適(比如一次請求返回10w以上甚至更多資料的場合)

d)、暫時不支援分庫分表,amoeba目前只做到分資料庫執行個體,每個被切分的節點需要保持庫表結構一致:


讀寫      資料同步
Master-->Slave

一、環境介紹
Master-IP:10.0.0.201
Slave- IP:10.0.0.202
Amobea-IP:10.0.0.203

二、安裝JDK
1)# mkdir /Amoeba
# tar -xvf jdk-7u40-linux-x64.tar.gz -C /Amoeba/
# vim /etc/profile
JAVA_HOME=/Amoeba/jdk1.7.0_40
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH

2)# source /etc/profile
# java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)

三、安裝Amoeba
# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba/
# chmod -R +x /usr/local/amoeba/bin/


四、在主機和從機上進行授權
>grant all privileges on *.* to ‘amobea‘@‘%‘ identified by ‘amoeba123‘;
>flush privileges;


五、配置Amoeba檔案
# cd /usr/local/amoeba/conf
解決設定檔亂碼:iconv -f gbk -t utf8 amoeba.xml -o amoeba.xml.bak
mv amoeba.xml.bak amoeba.xml

# vim amoeba.xml
更改的第一個地區修改port和ip  在第8,12,30,34行
#========================================================
<!-- proxy server綁定的連接埠 -->
更改port: <property name="port">9006</property>

<!-- proxy server綁定的IP -->

解開注釋改ip: <property name="ipAddress">10.0.0.203</property>

<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">20</property>

<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">30</property>

<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">30</property>

<!-- socket Send and receive BufferSize(unit:K)  -->
<property name="netBufferSize">128</property>

<!-- Enable/disable TCP_NODELAY (disable/enable Nagle‘s algorithm). -->
<property name="tcpNoDelay">true</property>

<!-- 對外驗證的使用者名稱 -->
<property name="user">root</property>

<!-- 對外驗證的密碼 -->

<property name="password">123456</property>

更改的第二個地區《配置master端登入的資訊》
dbserverlist下master的port和ip和amoeba的使用者名稱和密碼 在第74,78,83行
#========================================================
<dbServer name="server1">

<!-- PoolableObjectFactory實作類別 -->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>

<!-- 真實mysql資料庫連接埠 -->
<property name="port">3306</property>

<!-- 真實mysql資料庫IP -->
<property name="ipAddress">10.0.0.201</property>
<property name="schema">test</property>

<!-- 用於登陸mysql的使用者名稱 -->
<property name="user">amoeba</property>

<!-- 用於登陸mysql的密碼 -->


<property name="password">amoeba123</property>


</factoryConfig>

<!-- ObjectPool實作類別 -->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>

更改的第三個地區《配置slave端登入的資訊》
從64行起複製35行後修改第110行slave的ip
#========================================================

<dbServer name="server2">

<!-- PoolableObjectFactory實作類別 -->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>

<!-- 真實mysql資料庫連接埠 -->
<property name="port">3306</property>

<!-- 真實mysql資料庫IP -->
<property name="ipAddress">10.0.0.202</property>
<property name="schema">test</property>

<!-- 用於登陸mysql的使用者名稱 -->
<property name="user">amoeba</property>

<!-- 用於登陸mysql的密碼 -->


<property name="password">amoeba123</property>


</factoryConfig>

<!-- ObjectPool實作類別 -->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>

更改的第四個地區《配置master和slave負載平衡池(pool)》
#=======================================================
<dbServer name="master" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- 負載平衡參數 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>

<!-- 參與該pool負載平衡的poolName列表以逗號分割 -->
<property name="poolNames">server1</property>
</poolConfig>
</dbServer>
將上面的9行複製下來:

<dbServer name="slave" virtual="true">
<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
<!-- 負載平衡參數 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
<property name="loadbalance">1</property>

<!-- 參與該pool負載平衡的poolName列表以逗號分割 -->
<property name="poolNames">server1,server2</property>

                                                <!-- 此處可以進行一主多從的修改    -->
</poolConfig>
</dbServer>

更改的第五個地區《配置master和slave讀寫分離》
#=======================================================
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
<property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
<property name="LRUMapSize">1500</property>
<!-- 配置master和slave讀寫分離 Begin-->
<property name="defaultPool">master</property>
解開注釋: <property name="writePool">master</property>
<property name="readPool">slave</property>
<!-- 配置master和slave讀寫分離  End-->
<property name="needParse">true</property>
</queryRouter>


六、修改Amoeba啟動指令碼
# vim /usr/local/amoeba/bin/amoeba
#DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 將此行注釋掉,增加一下行
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"  增加這一行

七、啟動Amoeba指令碼

source /etc/profile
cd /usr/local/amoeba/bin


# nohup bash -x amoeba &
# cat nohup.out 日誌是否成功?
# ps -ef | grep amoeba   查看進程是否啟動成功
root      1896  1637  1 03:28 pts/3    00:00:06 /Amoeba/jdk1.7.0_40/bin/java -server -Xms256m -Xmx256m -Xss256k -Damoeba.home=/usr/local/amoeba -Dclassworlds.conf=/usr/local/amoeba/bin/amoeba.classworlds -classpath /usr/local/amoeba/lib/classworlds-1.0.jar org.codehaus.classworlds.Launcher


# mysql -uroot -p123456 -h 10.0.0.203 -P 9006

重新實驗時要kill -9 殺掉進程再nohup bash -x amoeba &





相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.