MySQL讀寫分離(基于Amoeba)-創(chuàng)新互聯(lián)

一.MySQL讀寫分離

成都創(chuàng)新互聯(lián)公司憑借專業(yè)的設計團隊扎實的技術支持、優(yōu)質高效的服務意識和豐厚的資源優(yōu)勢,提供專業(yè)的網站策劃、成都做網站、網站建設、網站優(yōu)化、軟件開發(fā)、網站改版等服務,在成都10余年的網站建設設計經驗,為成都成百上千家中小型企業(yè)策劃設計了網站。

  主數據庫處理事務性查詢,從數據庫處理select查詢。數據庫復制用來把事務性查詢導致的變更同步到從數據庫中。

MySQL 讀寫分離 (基于Amoeba)

二.最為常見的讀寫分離有兩種:

1.基于程序代碼實現

  在代碼中根據select,insert進程路由分類;

  優(yōu)點:性能好,因為在代碼中實現,不需要額外的硬件設備;

  缺點:需要開發(fā)人員來實現,對代碼改動比較大,不適合大型復雜應用;

2.基于代理層實現

 MySQL-Proxy:隸屬于MySQL開源項目;

 Amoeba:Amoeba是一個以MySQL為底層數據存儲,并對應用提供MySQL協(xié)議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規(guī)則,將SQL請求發(fā)送到特定的數據庫上執(zhí)行。基于此可以實現負載均衡、讀寫分離、高可用性等需求;

三.實驗環(huán)境

OS:CentOS 6.5 x64

Amoeba:192.168.0.128

master:192.168.0.134

slave:192.168.0.135

client:192.168.0.137

三.配置主從復制

1.MySQL讀寫分離是基于主從復制配置的,先配置好主從復制,再配置讀寫分離。

 主從復制博文連接:http://guoxh.blog.51cto.com/10976315/1922643

2.添加授權賬號供Amoeba訪問

 master和slave:

mysql> grant all on *.* to  'proxy'@'192.168.0.128' identified by '123456'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

四.Amoeba安裝配置

1. Amoeba是基于JDK開發(fā)的,所有先安裝JAVA環(huán)境

[root@amoeba ~]# chmod +x jdk-6u14-linux-x64.bin  [root@amoeba ~]# ./jdk-6u14-linux-x64.bin  [root@amoeba ~]# cat /etc/profile.d/java.sh  export JAVA_HOME=/usr/local/jdk1.6 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/lib:$PATH:$HOME/bin [root@amoeba ~]# source  /etc/profile.d/java.sh  [root@amoeba ~]# java -version java version "1.6.0_14" Java(TM) SE Runtime Environment (build 1.6.0_14-b08) Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode) #JAVA環(huán)境配置完成

2.安裝Amoeba

[root@amoeba ~]# mkdir /usr/local/amoeba [root@amoeba ~]# tar xf  amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba [root@amoeba ~]# ls /usr/local/amoeba/ benchmark  bin  changelogs.txt  conf  lib  LICENSE.txt  README.html [root@amoeba ~]# cat /etc/profile.d/amoeba.sh  export AMOEBA_HOME=/usr/local/amoeba/ export PATH=$PATH:$AMOEBA_HOME/bin [root@amoeba ~]# source  /etc/profile.d/amoeba.sh  [root@amoeba ~]# /usr/local/amoeba/bin/amoeba amoeba start|stop  # Amoeba安裝成功

3.編輯amoeba.xml配置文件

[root@amoeba conf]# cd /usr/local/amoeba/conf/ [root@amoeba conf]# cp amoeba.xml  amoeba$(date +"%Y_%m_%d").xml #修改前備份一份 [root@amoeba conf]# vim amoeba.xml 27  <property name="authenticator"> 28       <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> 29  30           <property name="user">amoeba</property>   #設置client連接的用戶 31  32           <property name="password">amoeba</property> #設置client連接的密碼 33  34              <property name="filter"> 35              <bean class="com.meidusa.amoeba.server.IPAccessController"> 36                <property name="ipFile">${amoeba.home}/conf/access_list.conf</property> 37              </bean> 38            </property> 39       </bean> 40  </property> 112                 </property> 113                 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property> 114                 <property name="LRUMapSize">1500</property> 115                 <property name="defaultPool">master/property> #指定默認為master 116  117                 <!--  #刪除注釋 118                 <property name="writePool">master</property> #指定寫操作為master 119                 <property name="readPool">slaves</property> #指定讀操作為slave 120                 -->  #刪除注釋 121                 <property name="needParse">true</property>

3.編輯dbServers.xml

25       <!-- mysql user --> 26       <property name="user">proxy</property>  #填mysql授權的用戶 27  28       <!--  mysql password --> 29       <property name="password">123456</property> #填MySQL授權的用戶密碼 30   45         <dbServer name="master"  parent="abstractServer"> 46                 <factoryConfig> 47                         <!-- mysql ip --> 48                         <property name="ipAddress">192.168.0.134</property> #指定master的IP 49                 </factoryConfig> 50         </dbServer> 51  52         <dbServer name="slave"  parent="abstractServer"> 53                 <factoryConfig> 54                         <!-- mysql ip --> 55                         <property name="ipAddress">192.168.0.135</property> #指定slave的IP 56                 </factoryConfig> 57         </dbServer> 58         <dbServer name="slaves" virtual="true"> 59                 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> 60                         <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> 61                         <property name="loadbalance">1</property> 62  63                         <!-- Separated by commas,such as: server1,server2,server1 --> 64                         <property name="poolNames">slave</property> 65                 </poolConfig> 66         </dbServer>

4.啟動服務

[root@amoeba ~]# amoeba start & [1] 2666 [root@amoeba ~]# log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml 2017-05-07 00:42:16,692 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.2.0 log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf 2017-05-07 00:42:17,064 INFO  net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066. 2017-05-07 00:42:17,067 INFO  net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:56460. [root@amoeba ~]# netstat -anptl | grep java tcp        0      0 ::ffff:127.0.0.1:56460      :::*                        LISTEN      2666/java            tcp        0      0 :::8066                     :::*                        LISTEN      2666/java            tcp        0      0 ::ffff:192.168.0.128:37361  ::ffff:192.168.0.135:3306   ESTABLISHED 2666/java            tcp        0      0 ::ffff:192.168.0.128:35241  ::ffff:192.168.0.134:3306   ESTABLISHED 2666/java            #Amoeba默認端口為8066

五.測試

1.客戶端連接Amoeba

[root@client ~]# mysql -uamoeba -p123456 -h 192.168.0.128  -P8066

2.新建一個數據庫

mysql> create database guoxh; Query OK, 1 row affected (0.01 sec) mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | aaa                | | guoxh              | | mysql              | | test               | +--------------------+ 5 rows in set (0.01 sec)

3.master和slave查看數據庫

mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | aaa                | | guoxh              | #剛建的數據庫已經同步 | mysql              | | test               | +--------------------+ 5 rows in set (0.00 sec)

五.測試讀寫分離:

1.在master新建一個表,同步到slave上,然后關掉slave功能,在slave上插入區(qū)別語句

master:創(chuàng)建名為student的表

mysql> show tables; Empty set (0.00 sec) mysql> create table student (id int(10),name varchar(10),info varchar(50)); Query OK, 0 rows affected (0.01 sec) mysql> show tables; +-----------------+ | Tables_in_guoxh | +-----------------+ | student         | +-----------------+ 1 row in set (0.00 sec)

slave:停止同步

mysql> show tables; +-----------------+ | Tables_in_guoxh | +-----------------+ | student         | +-----------------+ 1 row in set (0.00 sec) mysql> stop slave; Query OK, 0 rows affected (0.00 sec)

master:插入區(qū)別數據

mysql> insert into student values('1','zhangsan','Mysql_master'); Query OK, 1 row affected (0.01 sec) mysql> select * from student; +------+----------+--------------+ | id   | name     | info         | +------+----------+--------------+ |    1 | zhangsan | Mysql_master | +------+----------+--------------+ 1 row in set (0.00 sec)

slave:插入區(qū)別數據

mysql> select * from student; Empty set (0.00 sec) mysql> insert into student values('2','lisi','Mysql_slave'); Query OK, 1 row affected (0.00 sec) mysql> select * from student; +------+------+-------------+ | id   | name | info        | +------+------+-------------+ |    2 | lisi | Mysql_slave | +------+------+-------------+ 1 row in set (0.00 sec)

3.測試讀操作:

client:

mysql> show tables; +-----------------+ | Tables_in_guoxh | +-----------------+ | student         | +-----------------+ 1 row in set (0.00 sec) mysql> select * from student; +------+------+-------------+ | id   | name | info        | +------+------+-------------+ |    2 | lisi | Mysql_slave | +------+------+-------------+ 1 row in set (0.00 sec) mysql> select * from student; +------+------+-------------+ | id   | name | info        | +------+------+-------------+ |    2 | lisi | Mysql_slave | +------+------+-------------+ 1 row in set (0.00 sec)

# 此時,讀操作已經已經全部分配到slave上面。

4.測試寫操作

client:插入一條數據,這里是看不到數據的,得到master查看

mysql> insert into student values('3','wangwu','Mysql_client'); Query OK, 1 row affected (0.00 sec) mysql> select * from student; +------+------+-------------+ | id   | name | info        | +------+------+-------------+ |    2 | lisi | Mysql_slave | +------+------+-------------+ 1 row in set (0.00 sec)

master:

mysql> select * from student; +------+----------+--------------+ | id   | name     | info         | +------+----------+--------------+ |    1 | zhangsan | Mysql_master | |    3 | wangwu   | Mysql_client | +------+----------+--------------+ 2 rows in set (0.00 sec)

#此時,寫操作全部分給了master。

到此為止,MySQL已經實現了讀寫分離!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:MySQL讀寫分離(基于Amoeba)-創(chuàng)新互聯(lián)
地址分享:http://www.bm7419.com/article38/dpcgsp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供虛擬主機App設計、網站制作、網站設計公司、網站收錄、標簽優(yōu)化

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網站建設