Amoeba實現MySQL資料庫讀寫分離

來源:互聯網
上載者:User

Amoeba實現MySQL資料庫讀寫分離

一 環境以及軟體版本:
系統:CentOS Linux release 7.2.1511 (Core)
mysql:Server version: 5.6.33
Amoeba:amoeba-mysql-3.0.5-RC-distribution
JDK:1.7.0_80-b15 (Amoeba的運行需要jdk)

二 安裝Amoeba:
1 下載好所需軟體:

    # lsamoeba-mysql-3.0.5-RC-distribution.zip    jdk-7u80-linux-x64.rpm

2 安裝jdk

# yum -y install jdk-7u80-linux-x64.rpm#  java -version    java version "1.7.0_80"Java(TM) SE Runtime Environment (build 1.7.0_80-b15)Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

3 解壓Amoeba

# unzip amoeba-mysql-3.0.5-RC-distribution.zip # mv amoeba-mysql-3.0.5-RC /usr/local/amoeba # mv amoeba-mysql-3.0.5-RC /usr/local/amoeba # cd /usr/local/amoeba/conf/ # vim amoeba.xml<property name="port">3306</property>   #設定amoeba監聽的連接埠,預設是8066    <property name="ipAddress">10.0.0.159</property>  #設定amoeba監聽的ip地址<property name="user">root</property>    #設定串連amoeba的使用者<property name="password">123456</property>  #設定串連amoeba的密碼    #(這裡的帳號密碼和amoeba串連後端資料庫伺服器的密碼無關)    <property name="defaultPool">master</property>  #設定amoeba預設的池,這裡設定為matster    #這兩個選項預設是登出掉的,需要取消注釋,這裡用來指定寫庫和讀庫 <property name="writePool">master</property>     <property name="readPool">multiPool</property> #這給的是一個組,如果這個組裡有多個dbServers則可以負載平衡,此組在 dbServers.xml中設定

設定mysql庫的資訊,在目前的目錄下的dbServers.xml檔案裡

        # vim dbServers.xml            <!-- mysql port --> #設定amoeba串連後端mysql的連接埠       <property name="port">3306</property>        <!-- mysql schema --> #設定預設的資料庫,當串連amoeba時,動作表必須顯式的指定資料庫名,即採用dbname.tablename的方式,不支援 use dbname指定預設庫,因為操作會調度到各個後端dbserver         <property name="schema">test</property>           <!-- mysql user --> #設定amoeba串連後端mysql的使用者名稱和密碼           <property name="user">amoeba</property>            <property name="password">123456</property>   <dbServer name="master"  parent="abstractServer">#設定一個後端的dbServer,這裡設定串連可寫的master庫,此名字可自訂,但要和amoeba.xml中調用的名字一致即可。            <factoryConfig>                    <!-- mysql ip -->  #後端mysql的ip地址                    <property name="ipAddress">10.0.0.176</property>            </factoryConfig>    </dbServer>    <dbServer name="slave"  parent="abstractServer"> #設定一個後端的dbServer,這裡設定串連可讀的salve,此名字可自訂,但要和amoeba.xml中調用的名字一致即可。            <factoryConfig>                    <!-- mysql ip -->  #後端mysql的ip地址                    <property name="ipAddress">10.0.0.193</property>            </factoryConfig>    </dbServer> <dbServer name="multiPool" virtual="true"> #定義一個dbserver組            <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">                    <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->                                            ##選擇調度演算法,1表示輪詢負載平衡,2表示權重,3表示HA, 這裡選擇1                    <property name="loadbalance">1</property>                    <!-- Separated by commas,such as: server1,server2,server1 -->                    <property name="poolNames">slave</property> #群組成員,當有多個時用逗號分隔            </poolConfig>    </dbServer>

三 mysql授權amoeba使用者登入(此處我的兩台mysql伺服器master和slave已經做好了主從同步,並且已經驗證成功,需要做主從同步請看 )
master上授權:
mysql> grant select,insert,update,delete on . to 'amoeba'@'10.0.0.%' identified by '123456';
mysql> flush privileges;
slave上授權:
mysql> grant select on . to 'amoeba'@'10.0.0.%' identified by '123456';
mysql> flush privileges;
注意:此處授權的使用者密碼要和dbServers.xml中配置的一致。如果你的mysql開啟所有庫主從同步則你在主上授權的使用者會同步到從庫,解決方案是:1在從庫上降權;2主從同步時不讓mysql庫同步

四 啟動amoeba:

 #cd /usr/local/amoeba/bin
vim launcher
添加JAVA_HOME:

JAVA_HOME=/usr/java/jdk1.7.0_80

    # cd /usr/local/amoeba/ # vim jvm.properties 修改VM_OPTIONS: JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k -XX:PermSize=16m -XX:MaxPermSize=96m"       #   /usr/local/amoeba/bin/launcher        2018-01-02 23:34:21 [INFO] Project Name=Amoeba-MySQL, PID=48981 , starting... log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml 2018-01-02 23:34:22,152 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-           mysql-amoeba-proxy-3.0.4-BETAlog4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf2018-01-02 23:34:22,520 INFO  net.ServerableConnectionManager - Server listening on /10.0.0.159:3306.    #啟動成功    # ss -tanlp    LISTE    128     ::ffff:10.0.0.159:3306     :::*

五 測試:用另外的mysql用戶端串連amoeba,測試時我暫停了主從同步,以便更直接的看出效果

#  mysql -uroot -p123456  -h10.0.0.159


主庫上新增一條資料

從庫上加入一條資料

回到mysql串連的用戶端驗證:

只能查看從庫的資料,說明基本成功,進一步驗證,在用戶端插入一條資料

並且用戶端在從庫上沒有查詢到新插入的資料,回到主庫確認下:

到此驗證成功,開啟主從同步即可實現讀寫分離(開始同步前,請自行清理掉有差異的資料,以便主從能正常運行)

相關文章

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.