001.Amoeba讀寫分離部署

一 Amoeba簡介

Amoeba(變形蟲)項目,該開源框架於2008年 開始發佈一款 Amoeba forMysql軟件。這個軟件致力於MySQL的分佈式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當SQL路由功能,專一於分佈式數據庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具備負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標數據庫、可併發請求多臺數據庫合併結果。經過Amoeba你可以完成多數據源的高可用、負載均衡、數據切片的功能,目前Amoeba已在不少企業的生產線上面使用。
主要解決:
• 下降 數據切分帶來的複雜多數據庫結構
• 提供切分規則並下降 數據切分規則 給應用帶來的影響
• 下降db 與客戶端的鏈接數
• 讀寫分離

二 前期規劃

1.1 主機規劃

image

1.2 虛擬IP規劃

image

 

1.3 用戶列表

image

 
提示:以上角色須要在全部節點添加。
 

1.4 總體架構

1111

三 MySQL-MMM基礎部署

略,具體可參考《002.MMM雙主-雙從讀寫分離部署》。

四 基礎JDK安裝

4.1 JDK下載

下載連接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
JDK版本:jdk-8u144-linux-x64.rpm

4.2 JDK安裝及配置

  1 [root@Amoeba tmp]# rpm -ivh jdk-8u144-linux-i586.rpm
  2 [root@Amoeba ~]# vi /etc/profile
  3 #set java environment
  4 JAVA_HOME=/usr/java/jdk1.8.0_144/
  5 JRE_HOME=/usr/java/jdk1.8.0_144/jre/
  6 CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  7 PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  8 export JAVA_HOME JRE_HOME CLASS_PATH PATH
  9 [root@Amoeba ~]# source /etc/profile
 10 [root@Amoeba ~]# java -version			#驗證是否安裝成功
 
02

五 Amoeba安裝

5.1 Amoeba下載

  1 [root@Amoeba tmp]# wget https://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
  2 [root@Amoeba tmp]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
  3 [root@Amoeba ~]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
 

5.2 Amoeba-dbServers配置

  • dbServers.xml:讀寫分離配置文件
  • access_list.conf:IP訪問列表控制配置文件
  • Amoeba的配置文件路徑:/usr/local/amoeba/conf
  1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/dbServers.xml
  2 ……
  3             <property name="port">3306</property>	#設置Amoeba要鏈接的mysql數據庫的端口,默認是3306。
  4             <property name="schema">testdb</property>
  5 #設置缺省的數據庫,當鏈接amoeba時,操做表必須顯式的指定數據庫名,即採用dbname.tablename的方式,不支持use dbname指定缺省庫,由於操做會調度到各個後端dbserver。
  6 <property name="user">test1</property>
  7             <property name="password">x12345678</property>
注意:設置amoeba鏈接後端數據庫服務器的帳號和密碼,所以須要在全部後端數據庫上建立該用戶,並受權amoeba服務器可鏈接。
  1 ……
  2             <property name="maxActive">500</property>	#最大鏈接數,默認500
  3             <property name="maxIdle">500</property>	#最大空閒鏈接數
  4             <property name="minIdle">1</property>	#最新空閒鏈接數
  5 ……
  6     <dbServer name="writedb"  parent="abstractServer">
  7 #設置一個後端可寫的dbServer,這裏定義爲writedb,這個名字能夠任意命名,後面還會用到。
  8         <factoryConfig>
  9             <property name="ipAddress">172.24.8.100</property>
 10 #設置後端可寫dbserver ip。
 11         </factoryConfig>
 12     </dbServer>
 13 
 14     <dbServer name="slave01"  parent="abstractServer">
 15         <factoryConfig>
 16             <property name="ipAddress">172.24.8.101</property>
 17         </factoryConfig>
 18     </dbServer>
 19 
 20     <dbServer name="slave02"  parent="abstractServer">
 21         <factoryConfig>
 22             <property name="ipAddress">172.24.8.102</property>
 23         </factoryConfig>
 24     </dbServer>
 25 
 26     <dbServer name="slave03"  parent="abstractServer">
 27         <factoryConfig>
 28             <property name="ipAddress">172.24.8.103</property>
 29         </factoryConfig>
 30     </dbServer>
 31 
 32     <dbServer name="slave04"  parent="abstractServer">
 33         <factoryConfig>
 34             <property name="ipAddress">172.24.8.104</property>
 35         </factoryConfig>
 36     </dbServer>				                #以上設置四臺後端可讀節點信息。
 37     <dbServer name="myslave" virtual="true">
 38 #設置定義一個虛擬的dbserver,實際上至關於一個dbserver組,這裏將可讀的數據庫ip統一放到一個組中,將這個組的名字命名爲myslave。
 39         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
 40             <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
 41             <property name="loadbalance">1</property>	#選擇調度算法,1表示負載均衡,2表示權重,3表示HA, 這裏選擇1。
 42 
 43             <!-- Separated by commas,such as: server1,server2,server1 -->
 44             <property name="poolNames">slave01,slave02,slave03,slave04</property>	#myslave組成員。
 45         </poolConfig>
 46     </dbServer>
 

5.3 Amoeba-amoeba配置

  1 [root@Amoeba ~]# vi /usr/local/amoeba/conf/amoeba.xml
  2 ……
  3             <property name="port">8066</property>	#設置amoeba監聽的端口,默認是8066
  4 ……
  5 <property name="ipAddress">127.0.0.1</property>   	#配置監聽的接口,若是不設置,默認監聽因此的IP
  6 ……
  7 <property name="user">root</property>
  8 <property name="password">x120952576</property>
 
注意:
  • 以上配置客戶端鏈接amoeba時須要使用這裏設定的帳號;
  • 此處帳號密碼和amoeba鏈接後端數據庫服務器的密碼無關;
  • 前端應用程序鏈接數據庫的地址就是Amoeba服務器的值,鏈接用戶名和密碼即爲此處配置的用戶名和密碼。
  1 ……
  2 <property name="defaultPool">writedb</property>        #設置amoeba默認的池,這裏設置爲writedb
  3 <property name="writePool">writedb</property>
  4 <property name="readPool">myslave</property>
  5 <property name="needParse">true</property>             #取消註釋,則指定前面定義好的倆個讀寫池。
 

六 數據庫配置

6.1 建立數據庫

  1 [root@Client ~]# mysql -ummm_test -px120952576 -h172.24.8.100        #從客戶端使用可寫vip鏈接數據庫
  2 mysql> create database testdb;				         #曾經testdb數據庫
  3 [root@Master02 ~]# mysql -uroot -px120952576		         #使用Master02進入
  4 mysql> show databases;					         #驗證是否複製成功
 
03
提示:其餘節點測試略。

6.2 受權Amoeba用戶

  1 [root@Master01 ~]# mysql -uroot -px120952576
  2 mysql> grant all on testdb.* to 'test1'@'172.24.8.14' identified by 'x12345678';
 
注意:其餘全部節點均須要受權此用戶。

七 啓動Amoeba

  1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher
可能會出現如下報錯,緣由是stack size過小,致使JVM啓動失敗
04
可執行以下修復操做:
  1 [root@Amoeba ~]# vim /usr/local/amoeba/jvm.properties
  2 JVM_OPTIONS="-server -Xms2048m -Xmx2048m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
 
提示:原爲:JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m"
  1 [root@Amoeba ~]# /usr/local/amoeba/bin/launcher &	#建議直接放入後臺啓動
  2 [root@Amoeba ~]# echo "/usr/local/amoeba/bin/launcher &" >> /etc/rc.local
 
05
[root@Amoeba ~]# netstat -unlpt | grep java #查看進程
06

八 測試

8.1 打開日誌記錄

  1 [root@Master01 ~]# touch /var/log/mysql_query_log
  2 [root@Master01 ~]# chown mysql:mysql /var/log/mysql_query_log
  3 [root@Master01 ~]# vi /etc/my.cnf
  4 general_log=ON
  5 general_log_file=/var/log/mysql_query_log.log
 
注意:
打開MySQL日誌記錄,必須存在log文件,且同時對MySQL具備權限;
全部節點均須要打開日誌記錄,方便記錄測試狀況。

8.2 新增對應數據

  1 [root@Master01 ~]# mysql -uroot -px120952576
  2 mysql> use testdb;
  3 mysql> create table mmm_test(id int,email varchar(60));
  4 mysql> insert into mmm_test (id,email) values (100,'ip is 172.24.8.10');
 
提示:
建立用於測試的表mmm_test,並插入含該節點IP的條目,方便以後測試;
全部節點均須要執行以上操做,但ip更換爲對應的ip節點便可。

8.3 讀寫分離測試

  1 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P8066
  2 mysql> select * from testdb.mmm_test;
 
07
提示:
  • 此處在Client端使用的是Amoeba的IP鏈接,端口爲Amoeba服務的8066端口;
  • 屢次執行查詢,可知select請求均衡的分配在MMM集羣中的4個節點,因爲Master01和Master02同步複製,由於有兩條相同結果。
  1 [root@Master01 ~]# tail -f /var/log/mysql_query_log | grep mmm_test
  2 #全部節點執行此命令,觀察log信息。
  3 [root@Client ~]# mysql -uroot -h172.24.8.14 -px120952576 -P8066
  4 mysql> create table mmm_test1(id int,email varchar(60));
  5 mysql> insert into mmm_test1 (id,email) values (104,'ip is 172.24.8.14');
 
08
提示:全部寫操做均在Master01上執行,其餘節點的均由複製而來,由此可知已實現讀寫分離。

九 其餘附加

Amoeba主配置文件:$AMOEBA_HOME/conf/amoeba.xml,用來配置Amoeba服務的基本參數,如Amoeba主機地址、端口、認證方式、用於鏈接的用戶名、密碼、線程數、超時時間、其餘配置文件的位置等。
數據庫服務器配置文件:$AMOEBA_HOME/conf/dbServers.xml,用來存儲和配置Amoeba所代理的數據庫服務器的信息,如:主機IP、端口、用戶名、密碼等。
切分規則配置文件:$AMOEBA_HOME/conf/rule.xml,用來配置切分規則。
數據庫函數配置文件:$AMOEBA_HOME/conf/functionMap.xml,用來配置數據庫函數的處理方法,Amoeba將使用該配置文件中的方法解析數據庫函數。
切分規則函數配置文件:$AMOEBA_HOME/conf/ruleFunctionMap.xml,用來配置切分規則中使用的用戶自定義函數的處理方法。
訪問規則配置文件:$AMOEBA_HOME/conf/access_list.conf,用來受權或禁止某些服務器IP訪問Amoeba。
日誌規格配置文件:$AMOEBA_HOME/conf/log4j.xml,用來配置Amoeba輸出日誌的級別和方式。
 
相關文章
相關標籤/搜索