日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL+Amoeba实现数据库主从复制和读写分离

發(fā)布時(shí)間:2023/12/10 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL+Amoeba实现数据库主从复制和读写分离 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL讀寫分離是在主從復(fù)制的基礎(chǔ)上進(jìn)一步通過(guò)在master上執(zhí)行寫操作,在slave上執(zhí)行讀操作來(lái)實(shí)現(xiàn)的。通過(guò)主從復(fù)制,master上的數(shù)據(jù)改動(dòng)能夠同步到slave上,從而保持了數(shù)據(jù)的一致性。實(shí)現(xiàn)數(shù)據(jù)的讀寫分離能帶來(lái)的好處有:

  • 增加物理服務(wù)器,提升機(jī)器處理能力,也就是拿硬件換性能。

  • 主從只負(fù)責(zé)各自的讀和寫,極大程度緩解X鎖和S鎖爭(zhēng)用。

  • slave可以配置myIasm引擎,提升查詢性能以及節(jié)約系統(tǒng)開銷。

  • master直接寫是并發(fā)的,slave通過(guò)主庫(kù)發(fā)送來(lái)的binlog恢復(fù)數(shù)據(jù)是異步。

  • slave可以單獨(dú)設(shè)置一些參數(shù)來(lái)提升其讀的性能。

  • 增加冗余,提高可用性。

常見的實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫分離的方案大致有兩種:應(yīng)用層,代理層

在應(yīng)用層也就是在代碼中進(jìn)行操作,通過(guò)對(duì)數(shù)據(jù)庫(kù)操作類型的不同手動(dòng)指定數(shù)據(jù)源,可以通過(guò)AOP的方式進(jìn)行實(shí)現(xiàn),不過(guò)對(duì)于一個(gè)已經(jīng)搭建起來(lái)并正在運(yùn)行的系統(tǒng)來(lái)說(shuō),這個(gè)方案應(yīng)該比較復(fù)雜。

另外一種實(shí)現(xiàn)方式是通過(guò)數(shù)據(jù)庫(kù)代理層,代理對(duì)應(yīng)用層呢個(gè)是透明的,所有的讀寫分離操作由代理層來(lái)完成,好處就是對(duì)于開發(fā)應(yīng)用層來(lái)說(shuō)是透明的,不需要管理數(shù)據(jù)源,缺點(diǎn)在于應(yīng)用原來(lái)直接訪問(wèn)數(shù)據(jù)庫(kù)現(xiàn)在變成了通過(guò)代理訪問(wèn)數(shù)據(jù)庫(kù),性能上肯定會(huì)有影響,不過(guò)如果代理層實(shí)現(xiàn)的很優(yōu)秀的話這個(gè)影響應(yīng)該不大。

通過(guò)代理層實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫分離又有兩種方案可供選擇,其一是使用MySQL-Proxy,另一種是使用Amoeba。最開始找到的實(shí)現(xiàn)方案是基于MySQL-Proxy的,由于它沒(méi)有配置文件,所要完成的工作需要由Lua腳本來(lái)實(shí)現(xiàn),這對(duì)于一個(gè)Lua門外漢來(lái)說(shuō)壓力不小。后來(lái)找到的Amoeba實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,只需要簡(jiǎn)單地配置就能實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離,所以這里記錄我通過(guò)使用Amoeba來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫分離的過(guò)程。

Amoeba簡(jiǎn)介:

Amoeba(變形蟲)致力于MySQL的分布式數(shù)據(jù)庫(kù)前端代理層,它主要在應(yīng)用層訪問(wèn)MySQL的 時(shí)候充當(dāng)SQL路由功能,專注于分布式數(shù)據(jù)庫(kù)代理層(Database Proxy)開發(fā)。座落與 Client、DB Server(s)之間,對(duì)客戶端透明。具有負(fù)載均衡、高可用性、SQL 過(guò)濾、讀寫分離、可路由相關(guān)的到目標(biāo)數(shù)據(jù)庫(kù)、可并發(fā)請(qǐng)求多臺(tái)數(shù)據(jù)庫(kù)合并結(jié)果。 通過(guò)Amoeba你能夠完成多數(shù)據(jù)源的高可用、負(fù)載均衡、數(shù)據(jù)切片的功能。

Amoeba使用:

一、準(zhǔn)備工作

  • amoeba使用java編寫,所以運(yùn)行amoeba的運(yùn)行環(huán)境要安裝好java環(huán)境,并配置好環(huán)境變量,jdk版本要在1.5以上,因?yàn)閍moeba就是用jdk1.5編寫的;我的服務(wù)器java版本為1.7。
  • amoeba是在主從同步的基礎(chǔ)上工作的,所以要先配置好MySQL的主從同步功能,我在另一篇日志中記錄了我實(shí)現(xiàn)Mysql主從同步的過(guò)程,可以參考:MySQL主從復(fù)制(Master-Slave)實(shí)踐
  •   amoeba服務(wù)器 :虛擬機(jī) ip:182.92.172.80 ? amoeba版本3.0.5-RC ? mysql版本5. 5.32? ?Java環(huán)境1.7.0_60 ? ?操作系統(tǒng)linux

    ? ? master服務(wù)器 ? ?:虛擬機(jī) ip:182.92.172.80 ?mysql版本5. 5.32 ??操作系統(tǒng)centos6.5 (和amoeba在同一個(gè)服務(wù)器上,因?yàn)槲抑挥昧藘蓚€(gè)服務(wù)器)

    ? ? slave服務(wù)器 ? ? ? :虛擬機(jī) ip:123.57.44.85 ? mysql版本5.5.39 ? 操作系統(tǒng)centos6.5?

  • 二、下載安裝amoeba

    下載地址:https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/,選擇最新版本進(jìn)行下載,我下載的版本為:amoeba-mysql-3.0.5-RC-distribution.zip

    安裝:把zip安裝包解壓到自己指定的服務(wù)器路徑上就可以了,我把它放在了/usr/local/amoeba/amoeba-mysql-3.0.5-RC里面,解壓后的文件結(jié)構(gòu)如下圖:

    ?

    三、配置amoeba

    Amoeba基礎(chǔ)配置介紹:

    想象Amoeba作為數(shù)據(jù)庫(kù)代理層,它一定會(huì)和很多數(shù)據(jù)庫(kù)保持通信,因此它必須知道由它代理的數(shù)據(jù)庫(kù)如何連接,比如最基礎(chǔ)的:主機(jī)IP、端口、Amoeba使用的用戶名和密碼等等。這些信息存儲(chǔ)在$AMOEBA_HOME/conf/dbServers.xml中。

    Amoeba為了完成數(shù)據(jù)切分提供了完善的切分規(guī)則配置,為了了解如何分片數(shù)據(jù)、如何將數(shù)據(jù)庫(kù)返回的數(shù)據(jù)整合,它必須知道切分規(guī)則。與切分規(guī)則相關(guān)的信息存儲(chǔ)在$AMOEBA_HOME/conf/rule.xml中。

    當(dāng)我們書寫SQL來(lái)操作數(shù)據(jù)庫(kù)的時(shí)候,常常會(huì)用到很多不同的數(shù)據(jù)庫(kù)函數(shù),比如:UNIX_TIMESTAMP()、SYSDATE()等等。這些函數(shù)如何被Amoeba解析呢?$AMOEBA_HOME/conf/functionMap.xml描述了函數(shù)名和函數(shù)處理的關(guān)系。

    對(duì)$AMOEBA_HOME/conf/rule.xml進(jìn)行配置時(shí),會(huì)用到一些我們自己定義的函數(shù),比如我們需要對(duì)用戶ID求HASH值來(lái)切分?jǐn)?shù)據(jù),這些函數(shù)在$AMOEBA_HOME/conf/ruleFunctionMap.xml中定義。

    Amoeba可以制定一些可訪問(wèn)以及拒絕訪問(wèn)的主機(jī)IP地址,這部分配置在$AMOEBA_HOME/conf/access_list.conf中

    Amoeba允許用戶配置輸出日志級(jí)別以及方式,配置方法使用log4j的文件格式,文件是$AMOEBA_HOME/conf/log4j.xml。

    在開始配置amoeba配置文件之前我們需要先了解為什么要做這些配置工作。

    第一,如上第一條所述,Amoeba是通過(guò)代理MySQL服務(wù)來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的讀寫分離的,它必須要知道如何連接到需要被代理的數(shù)據(jù)庫(kù),因此需要被代理的數(shù)據(jù)庫(kù)需要?jiǎng)?chuàng)建一個(gè)訪問(wèn)用戶給amoeba,這樣amoeba才能連接到數(shù)據(jù)庫(kù)上。

    第二,amobea把對(duì)客戶端也就是應(yīng)用層是透明的,不管amoeba如何實(shí)現(xiàn)的讀寫分離,它既然把數(shù)據(jù)庫(kù)全都給代理了,那它就要為客戶端提供一個(gè)類似原來(lái)mysql那樣的連接,客戶端就把當(dāng)它是mysql,它其實(shí)是一個(gè)虛擬的mysql,對(duì)外提供mysql協(xié)議,客戶端連接amoeba就象連接mysql一樣,因此amoeba要為客戶端提供一個(gè)可供連接的用戶賬號(hào)。

    第三,amoeba內(nèi)部是實(shí)現(xiàn)了多數(shù)據(jù)庫(kù)的負(fù)載均衡、讀寫分離、可切片的,所以這部分的配置是它功能上的核心配置。

    下面就正式開始配置amoeba

  • 所有數(shù)據(jù)庫(kù)創(chuàng)建amoeba訪問(wèn)的用戶:
  • mysql>grant all on *.* to 'amoeba'@'182.92.172.80' identified by '123456' #創(chuàng)建用戶并授權(quán)mysql>flush privileges; #刷新權(quán)限

      為了方便統(tǒng)一管理就把所有數(shù)據(jù)庫(kù)創(chuàng)建的用戶名和密碼保持一致了

      2.配置conf文件

    在amoeba安裝目錄的conf文件夾下找到dbServer.xml和amoeba.xml文件,這兩個(gè)文件是需要我們配置的

    我的dbServer.xml文件配置如下:

    1 <?xml version="1.0" encoding="gbk"?> 2 3 <!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> 4 <amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"> 5 6 <!-- 7 Each dbServer needs to be configured into a Pool, 8 If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration: 9 add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig 10 such as 'multiPool' dbServer 11 --> 12 13 <dbServer name="abstractServer" abstractive="true"> 14 <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory"> 15 <property name="connectionManager">${defaultManager}</property> 16 <property name="sendBufferSize">64</property> 17 <property name="receiveBufferSize">128</property> 18 19 <!-- mysql port --> 20 <!--<property name="port">3306</property>--> 21 22 <!-- mysql schema --> 23 <property name="schema">yj_platform</property> 24 25 <!-- mysql user --> 26 <property name="user">amoeba</property> 27 28 <property name="password">123456</property> 29 </factoryConfig> 30 31 <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool"> 32 <property name="maxActive">500</property> 33 <property name="maxIdle">500</property> 34 <property name="minIdle">1</property> 35 <property name="minEvictableIdleTimeMillis">600000</property> 36 <property name="timeBetweenEvictionRunsMillis">600000</property> 37 <property name="testOnBorrow">true</property> 38 <property name="testOnReturn">true</property> 39 <property name="testWhileIdle">true</property> 40 </poolConfig> 41 </dbServer> 42 43 <dbServer name="master" parent="abstractServer"> 44 <factoryConfig> 45 <!-- mysql ip --> 46 <property name="ipAddress">182.92.172.96</property> 47 <!-- mysql port --> 48 <property name="port">3306</property> 49 </factoryConfig> 50 </dbServer> 51 52 <dbServer name="slave1" parent="abstractServer"> 53 <factoryConfig> 54 <!-- mysql ip --> 55 <property name="ipAddress">123.57.44.78</property> 56 <!-- mysql port --> 57 <property name="port">13306</property> 58 </factoryConfig> 59 </dbServer> 60 61 <!-- <dbServer name="multiPool" virtual="true"> 62 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> 63 #Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA 64 <property name="loadbalance">1</property> 65 66 #Separated by commas,such as: server1,server2,server1 67 <property name="poolNames">slave1,slave2</property> 68 </poolConfig> 69 </dbServer> 70 --> 71 </amoeba:dbServers>

    ?

    需要我們關(guān)注的元素用標(biāo)紅字體顯示出來(lái)了,在這里是指幾個(gè)dbServer元素,需要手動(dòng)修改的部分用黃色背景表示出來(lái)。

    第一個(gè)dbServer元素其abstractive="true"屬性表示這個(gè)一個(gè)抽象元素可以被其他dbServer元素?cái)U(kuò)展,類似于java里面的抽象類和類的繼承之間的關(guān)系。這個(gè)dbServer里面配置amoeba連接它所代理的mysql數(shù)據(jù)庫(kù)的連接信息,因?yàn)橹耙呀?jīng)說(shuō)過(guò)為了方便管理把每個(gè)數(shù)據(jù)庫(kù)為amoeba訪問(wèn)創(chuàng)建的用戶都統(tǒng)一了賬號(hào),在這里我把端口信息給注釋掉了,因?yàn)槲业膕lave數(shù)據(jù)庫(kù)端口用的不是默認(rèn)的3306,這種和ip,端口不一樣的信息就沒(méi)辦法配置在通用的抽象dbServer里面了。

    第二個(gè)dbServer取名為"maser",其parent="abstractServer"表示拓展了上面的抽象dbServer,在這里設(shè)置的是amoeba連接數(shù)據(jù)庫(kù)具體的信息,因?yàn)槊總€(gè)數(shù)據(jù)庫(kù)的ip肯定是不同的。

    同樣第三個(gè)dbServer取名為“slave”,連接信息是slave服務(wù)器。

    在下面被我注釋掉的第四個(gè)dbServer其name="multiPool" virtual="true"屬性表示這是一個(gè)對(duì)多服務(wù)器池,這個(gè)配置使得amoeba可以把多個(gè)讀數(shù)據(jù)庫(kù)管理成一個(gè)讀池,把多個(gè)寫數(shù)據(jù)庫(kù)管理成寫池,在每個(gè)池中amoeba就能夠?qū)崿F(xiàn)負(fù)載均衡。由于我的主從同步只設(shè)置了一主一從,并不涉及到多個(gè)讀數(shù)據(jù)庫(kù)組成池的情況,所以我就把這個(gè)配置注釋掉了。

    接下來(lái)配置amoeba.xml文件,同樣放上我的配置文件:

    1 <?xml version="1.0" encoding="gbk"?> 2 3 <!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd"> 4 <amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/"> 5 6 <proxy> 7 8 <!-- service class must implements com.meidusa.amoeba.service.Service --> 9 <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService"> 10 <!-- port --> 11 <property name="port">8066</property> 12 13 <!-- bind ipAddress --> 14 15 <!--<property name="ipAddress">127.0.0.1</property>--> 16 17 18 <property name="connectionFactory"> 19 <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory"> 20 <property name="sendBufferSize">128</property> 21 <property name="receiveBufferSize">64</property> 22 </bean> 23 </property> 24 25 <property name="authenticateProvider"> 26 <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator"> 27 28 <property name="user">amoeba</property> 29 30 <property name="password">password</property> 31 32 <property name="filter"> 33 <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController"> 34 <property name="ipFile">${amoeba.home}/conf/access_list.conf</property> 35 </bean> 36 </property> 37 </bean> 38 </property> 39 40 </service> 41 42 <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext"> 43 44 <!-- proxy server client process thread size --> 45 <property name="executeThreadSize">128</property> 46 47 <!-- per connection cache prepared statement size --> 48 <property name="statementCacheSize">500</property> 49 50 <!-- default charset --> 51 <property name="serverCharset">utf8</property> 52 53 <!-- query timeout( default: 60 second , TimeUnit:second) --> 54 <property name="queryTimeout">60</property> 55 </runtime> 56 57 </proxy> 58 59 <!-- 60 Each ConnectionManager will start as thread 61 manager responsible for the Connection IO read , Death Detection 62 --> 63 <connectionManagerList> 64 <connectionManager name="defaultManager" class="com.meidusa.toolkit.net.MultiConnectionManagerWrapper"> 65 <property name="subManagerClassName">com.meidusa.toolkit.net.AuthingableConnectionManager</property> 66 </connectionManager> 67 </connectionManagerList> 68 69 <!-- default using file loader --> 70 <dbServerLoader class="com.meidusa.amoeba.context.DBServerConfigFileLoader"> 71 <property name="configFile">${amoeba.home}/conf/dbServers.xml</property> 72 </dbServerLoader> 73 74 <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> 75 <property name="ruleLoader"> 76 <bean class="com.meidusa.amoeba.route.TableRuleFileLoader"> 77 <property name="ruleFile">${amoeba.home}/conf/rule.xml</property> 78 <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property> 79 </bean> 80 </property> 81 <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property> 82 <property name="LRUMapSize">1500</property> 83 <property name="defaultPool">slave1</property> 84 <property name="writePool">master</property> 85 <property name="readPool">slave1</property> 86 <property name="needParse">true</property> 87 </queryRouter> 88 </amoeba:configuration>

    ?

    amoeba.xml文件中需要配置的地方也不多,首先要配置的是service標(biāo)簽,其中需要配置的地方有三個(gè)port,user,password。這里的端口,用戶名和密碼其實(shí)就是為了虛擬出一個(gè)mysql鏈接做準(zhǔn)備的(非真實(shí),amoeba服務(wù)器可以不安裝真實(shí)的mysql數(shù)據(jù)庫(kù)),端口默認(rèn)的事8066,可以修改但是不要跟現(xiàn)有的端口沖突,用戶名和密碼是客戶端連接amoeba虛擬出來(lái)的mysql連接的用戶名密碼,和之前mysql數(shù)據(jù)庫(kù)創(chuàng)建給amoeba的用戶賬號(hào)不同。在這里有一個(gè)注釋掉的ipAddress屬性,如果Amoeba所在的服務(wù)器在多個(gè)網(wǎng)絡(luò)環(huán)境內(nèi)你可以定義該機(jī)器的其中一個(gè)IP來(lái)指定Amoeba所服務(wù)的網(wǎng)絡(luò)環(huán)境,但是如果設(shè)置為127.0.0.1將導(dǎo)致其他機(jī)器無(wú)法訪問(wèn)Amoeba的服務(wù)。

    之后配置queryRouter標(biāo)簽,這是amoeba真正實(shí)現(xiàn)讀寫分離所產(chǎn)生作用的地方,之前的配置都是為了該處做準(zhǔn)備。

    該處有三個(gè)地方需要我們配置,首先是defaultPool,一些除了SELECT\UPDATE\INSERT\DELETE的語(yǔ)句都會(huì)在defaultPool執(zhí)行。

    之后是writePool,這里是配置寫庫(kù)也就是主數(shù)據(jù)庫(kù),在這里是前面dbServer.xml中配置的master。

    resdPool配置的是讀庫(kù),我這里是slave1,如果讀庫(kù)有多個(gè)這里可以填讀池,也就是我在dbServer.xml中注釋掉的那個(gè)dbServer配置的信息。在這里就完成了讀寫分離(主寫從讀)的配置。我的配置中是把寫操作限制在了master中,把讀限制在了slave中,如果我把defaultPool改成master的話那么讀操作就會(huì)在master和slave之間做負(fù)載均衡了。

    ?

    四、配置jvm運(yùn)行參數(shù)

    運(yùn)行在jdk1.7環(huán)境中的amoeba要求xss參數(shù)必須大于228才能啟動(dòng)JVM

    所以在amoeba安裝目錄下的jvm.properties文件中進(jìn)行參數(shù)設(shè)置:

    1 # app名字 2 APP_NAME=Amoeba-MySQL 3 4 # app版本號(hào) 5 APP_VERSION=3.0.0-beta 6 7 # 日志輸出路徑,log4j中可引用參數(shù) ${project.output} 8 9 APP_OUTPUT_PATH=$PROJECT_HOME/logs 10 11 # 應(yīng)用程序的PID文件存放路徑, 默認(rèn)存放在: ${project.home}/${APP_NAME}.pid 12 13 #APP_PID_PATH=/temp/logs/$APP_NAME 14 15 16 # 控制臺(tái)輸出到日志文件 17 18 APP_CONSOLE_LOG=$APP_OUTPUT_PATH/console.log 19 20 21 # 程序相關(guān)的配置參數(shù) 22 23 #APP_OPTIONS="-DmyParam=value1 -DmyParam2=value2" 24 25 # 啟動(dòng)參數(shù) 26 27 #APP_ARGS="args0 " 28 29 30 # JVM相關(guān)的參數(shù),包括內(nèi)存配置、垃圾回收策略 31 32 JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m" 33 34 35 # 應(yīng)用程序忽略的信號(hào)列表,以逗號(hào)分割,程序shutdown的信號(hào)為15(可用 kill -15 pid 可讓程序文明的shutdown,請(qǐng)不要在這兒填15) 36 37 IGNORE_SIGNALS=1,2

    ?

    如上所有的配置工作就已經(jīng)完成了,可以看出amoeba所需的全部配置工作還是比較少的。

    啟動(dòng)amoeba:

    啟動(dòng)腳本在amoeba安裝目錄的bin目錄下運(yùn)行l(wèi)ancher:

    root@iZ25j1wvn7pZ:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin# ./launcher 2016-12-12 21:38:05,748 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf 2016-12-12 21:38:06,037 INFO net.ServerableConnectionManager - Server listening on /127.0.0.1:8066.2016-12-12 22:14:44 [INFO] Project Name=Amoeba-MySQL, PID=2596 , System shutdown ....2016-12-12 22:14:48 [INFO] Project Name=Amoeba-MySQL, PID=3324 , starting... log4j:WARN log4j config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/log4j.xml 2016-12-12 22:14:49,405 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf 2016-12-12 22:14:49,664 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.2016-12-14 15:02:14 [INFO] Project Name=Amoeba-MySQL, PID=3324 , System shutdown ....2016-12-14 15:02:20 [INFO] Project Name=Amoeba-MySQL, PID=12246 , starting... log4j:WARN log4j config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/log4j.xml 2016-12-14 15:02:20,955 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-3.0.4-BETA log4j:WARN ip access config load completed from file:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/access_list.conf 2016-12-14 15:02:21,224 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.

    ?

    ?

    運(yùn)行結(jié)果如上所示表示啟動(dòng)成功。

    之后可以通過(guò)amoeba連接到數(shù)據(jù)庫(kù),連接信息如下:

    root@iZ25j1wvn7pZ:/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin# mysql -h182.92.172.80 -P8066 -uamoeba -ppassword Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2049945506 Server version: 5.1.45-mysql-amoeba-proxy-3.0.4-BETA (Ubuntu)Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

    ?

    五、amoeba服務(wù)測(cè)試

    從連接的server version 可以看出連接數(shù)據(jù)可的實(shí)例是amoeba-proxy實(shí)例不是mysql實(shí)例,這樣就表示可以通過(guò)amoeba的訪問(wèn)賬戶連接amoeba服務(wù)了。之后就可以進(jìn)行測(cè)試了,首先向數(shù)據(jù)庫(kù)中添加一條記錄,可以看見數(shù)據(jù)同時(shí)更新到master和slave中,主從同步功能是可以用的。之后在slave上停止slave服務(wù),再通過(guò)amoeba寫入數(shù)據(jù),這時(shí)amoeba重新讀出的數(shù)據(jù)就沒(méi)有新插入的數(shù)據(jù)了,因?yàn)橹鲝耐焦δ芤呀?jīng)關(guān)掉了,寫入的數(shù)據(jù)在master中,沒(méi)有同步到slave中,而amoeba讀數(shù)據(jù)是從slave中讀取的,因此沒(méi)有新加入的數(shù)據(jù)。之后打開slave的同步服務(wù),再在amoeba中讀取就可以讀到之前添加的數(shù)據(jù)了。整體測(cè)試下來(lái)就保證了amoeba實(shí)現(xiàn)了讀寫分離功能。

    ?

    參考資料:

    mysql基于amoeba的讀寫分離

    MySQL基于amoeba的讀寫分離及負(fù)載均衡

    CentOS系統(tǒng) Amoeba+MySql主從讀寫分離配置 適合新手傻

    通過(guò)Amoeba對(duì)一個(gè)數(shù)據(jù)庫(kù)實(shí)例進(jìn)行操作

    轉(zhuǎn)載于:https://www.cnblogs.com/gl-developer/p/6178608.html

    總結(jié)

    以上是生活随笔為你收集整理的MySQL+Amoeba实现数据库主从复制和读写分离的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。