9. mysql (linux) 讀寫分離,mysqllinux

來源:互聯網
上載者:User

9. mysql (linux) 讀寫分離,mysqllinux

Mysql主從互備之後,為了將兩台(或多台)機器充分利用,讀寫分離的必要性凸顯出來。優缺點這裡不是討論的重點!

Mysql讀寫分離有三種方法:

1.    Mysql-proxy

2.    Amoeba(變形蟲)

3.    另一種用的很少

這裡所用的是amoeba,第一種用到lua語言,而且聽說效能上有些許不好!

所需機器:

寫:192.168.1.111

讀:192.168.1.112   (此兩台機器已經設定了主從,否則讀寫分離就失去了意義)

Amoeba:192.168.1.112(本人這裡,amoeba安裝的機器和mysql(讀)在一台機器)

一、 準備工作

1.    安裝java支援

1) 下載java SE 1.6

地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

官網,沒有找到1.6 所以勉強下了1.7版本。

2) 安裝

# mkdir /usr/local/jdk

# tar zxvf jdk-7u71-linux-x64.gz –C /usr/local/jdk

2.    安裝amoeba

1) 下載

地址:http://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download

2) 安裝

# mkdir /usr/local/amoeba

# tar zxvf amoeba-mysql-binary-2.1.0-RC5.tar.gz–C /usr/local/amoeba

# chmod –R +x /usr/local/amoeba/bin


二、         配置環境

1.    Java

 #vi /etc/profile

#for java

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$JAVA_HOME/bin:$PATH

2.    Amoeba

#vi /etc/profile

#for amoeba

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

完成後: 

#source /etc/profile

3.    測試是否成功

Java:

#java –version   //顯示如下

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

Amoeba:

#amoeba    //顯示如下

amoeba start|stop


三、         配置amoeba

需要配置兩個檔案:dbServer.xml 和 amoeba.xml

1.    配置dbServer.xml,直接貼出我的配置

# vi dbServer.xml

修改26行
原                        <property name="user">root</property>
改                        <property name="user">amoeba</property>//串連兩個伺服器(讀寫)都要用,即這個賬戶可以串連讀伺服器,也可以串連寫伺服器,如果沒有需要都添加這個使用者,並且給這個ip授權(需要理解)
修改28,29,,30行
28                        <property name="password">amoeba</property>//mysql伺服器的通用用 戶密碼
複製一下代碼,並在此代碼下面粘貼兩次
42        <dbServer name="server1"  parent="abstractServer">
43                <factoryConfig>
44                        <!-- mysql ip -->
45                        <property name="ipAddress">127.0.0.1</property>
46                </factoryConfig>
47        </dbServer>
修改後的效果如下:添加兩個db伺服器定義,並且分別設定三個mysql server的ip地址,ip地址使用的是mysql-mmm的虛擬IP。
42        <dbServer name="Master"  parent="abstractServer">
 43                <factoryConfig>
 44                        <!-- mysql ip -->
 45                        <property name="ipAddress">192.168.1.111</property>
 46                </factoryConfig>
 47        </dbServer>
 48          
 49        <dbServer name="Slave1"  parent="abstractServer">
 50                <factoryConfig>
 51                       <!-- mysql ip -->
 52                       <property name="ipAddress">192.168.1.112</property>
 53                 </factoryConfig>
 54        </dbServer>
修改設定檔的最下方
64        <dbServer name="ReadPool" virtual="true">  //定義虛擬節點池的名字
65                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
66                        <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
67                        <property name="loadbalance">1</property> //負載平衡演算法
68                         
69                        <!-- Separated by commas,such as: server1,server2,server1 -->
70                        <property name="poolNames">Slave1 </property> //虛擬節點池的成員
71                </poolConfig>
72        </dbServer>

2.    配置amoeba.xml

11 <propertyname="port">8066</property> //amoeba監聽連接埠,不用修改
修改第30行
原                                        <property name="user">root</property>
改                                        <property name="user">amoeba</property>//修改amoeba的使用者名稱為amoeba
修改第32行
原                                        <property name="password"></property>
改                                        <property name="password">amoeba</property>//修改amoeba的使用者名稱為amoeba

115行 –120行

115     <property name="defaultPool">Master</property>
116 
117    <property name="writePool">Master</property>
118    <property name="readPool">Slave1</property>
119    <propertyname="needParse">true</property>
120         </queryRouter>

 

四、         測試

1.    啟動amoeba

# amoeba start &

log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2015-01-08 11:20:15,858 INFO  context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.1.0-RC5
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2015-01-08 11:20:16,061 INFO  net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2015-01-08 11:20:16,066 INFO  net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:37064.

跳出這些以後,自己ctrl+c即可,已經後台啟動!

2.    測試

在 192.168.1.112

a.     mysql –u amoeba –P8806 –h 192.168.1.112 –pamoeba  //測試amoeba是否正常啟動

b.     mysql –u amoeba –h192.168.1.111 –pamoeba  //測試能否登入寫資料庫

c.     mysql –u amoeba –h192.168.1.112 –pamoeba//測試能否登入讀伺服器

如果三個都能登入成功,在繼續以下測試,不能成功,需要檢驗:a.是否有此使用者 b.是否授權此IP登入等

3.    測試amoeba的讀寫

在 192.168.1.112(讀)上,mysql>stop slave;//關閉主從複製

# mysql –u amoeba –P8806 –h 192.168.1.112–pamoeba //登入amoeba

Mysql> use test;

Mysql> insert into test1 (a)values (123);

Mysql> select *from test1;

發現剛才插入的並沒有查詢出來,說明讀寫已經分離


五、         問題

1. Q: amoeba start 跳出

The stack size specified  too small, Specify at least 228k

Error: Could not create the Java Virtual Machine.

Error: A fatal exception has occurred. Program will exit.

修改: vi /usr/local/amoeba/bin/amoeba

 DEFAULT_OPTS=”-server -Xms256m -Xmx256m –Xss128k”改為 

 DEFAULT_OPTS=”-server -Xms256m -Xmx256m -Xss256k”

 

2.     Q : 登入了amoeba後做一些資料操作是彈出以下:

Could not create a validatedobject, cause: ValidateObject failed

A: 在192.168.1.112上測試

mysql –u amoeba –h192.168.1.111 –pamoeba

mysql –u amoeba –h192.168.1.112 –pamoeba

有一個或都不能登入,建立使用者,並給此ip授權

 

3.     Q:   串連MySQL失敗出錯資訊:Host XXX is blocked because of many connectionerrors, unblock with 'mysqladmin flush-hosts'。

原因:MySQL伺服器已經從某個host接收了大量中途終止的串連,於是決定終止繼續接收來自該host的串連,允許最大的串連錯誤數為max_connect_errors,通過showvariables命令可以查詢,一般為10。

A:登入進mysql執行flush hosts(本機host已經不允許登入!)。

 

4.     Q: 啟動amoeba時跳出了一長串

A: 檢查設定檔


註:歡迎提出自己的建議、疑問、意見等。


相關文章

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.