MYSQL讀寫分離

在企業中,大量數據請求下,單臺數據庫將沒法承擔全部讀寫操做。解決方法:配置多臺數據服務器以實現主從複製+讀寫分離java

用的代理服務器是 Amoebamysql

特色是:1負載均衡,2高可用,3SQL過濾,4讀寫分離,5高併發請求多臺數據庫。linux

試驗環境算法

amoeba:  192.168.100.123sql

mysql-master:  192.168.100.111數據庫

mysql-slave1:   192.168.100.222vim

mysql-slave2:   192.168.100.250bash

client:    192.168.100.22服務器

首先實現主從複製  主 從 從,這裏就很少說了,略併發

先配置amoeba:192.168.100.123

1:安裝Amoeba上安裝java環境(推薦安裝jdk1.5/1.6,不建議安裝1.7)

我用的是jdk-6u14-linux-x64.bin

chmod +x jdk-6u14-linux-x64.bin

bash jdk-6u14-linux-x64.bin    一路空格,輸入yes,回城完成

mv  jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile  在最後添加

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin   添加到變量裏  注意不要寫錯

. /etc/profile 執行

java -version 查看    注意若是有自帶的openjava  刪掉或者轉移

2:安裝配置Amoeba

mkdir /usr/local/amoeba

tar xf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba    amoeba start |stop  //出現此行說明配置無誤

3:配置amoeba實現mysql-slave一、slave2讀負載均衡

在三臺MYSQL服務器上對amoeba受權

mysql>grant all on *.* to 'amoeba'@'192.168.100.%' identified by '123123';  //測試環境給的權限最大 生產環境根據須要

mysql>flush privileges;    //刷新一下

編輯amoeba.xml配置文件,設置讀寫分離(amoeba服務器)

cd /usr/local/amoeba/conf/

vim amoeba.xml    //修改任何文件時,養成習慣備份。  cp amoeba.xml amoeba.xml.$(date +%F)

11<property name="port">8066</property>   //默認端口8066,無需更改

30 <property name="user">amoeba</property>   //設置一個用戶,後面客戶端訪問時使用,切勿打錯,要否則後期測試會進去不mysql

32  <property name="password">123123</property>    //設置登陸密碼

115  <property name="defaultPool">master</property>     //默認的服務器池

117  <property name="writePool">master</property>  //寫服務器池

118  <property name="readPool">slaves</property>  //讀服務器池

有註釋<--   -->刪掉

編輯dbServer.xml配置文件,設置登陸MYSQL服務器的用戶及密碼、MYSQL服務器節點的IP地址、負載均衡算法/usr/local/amoeba/conf/

vim dbServers.xml

20 <property name="port">3306</property>  //設置MYSQL鏈接端口,默認3306

26 <property name="user">amoeba</property>  //設置訪問MYSQL服務器所用的用戶名

27  <property name="password">123123</property>   //設置訪問MYSQL服務器的密碼

43  <dbServer name="master"  parent="abstractServer">    //設置MYSQL服務器的IP地址

46 <property name="ipAddress">192.168.100.111</property>   主的

50 <dbServer name="slave1"  parent="abstractServer">    從的IP

53 <property name="ipAddress">192.168.100.222</property>

56 <dbServer name="slave2"  parent="abstractServer">    從2的IP

59 <property name="ipAddress">192.168.100.250</property>

63 <dbServer name="slaves" virtual="true">  //在amoeba.xml文件中設置的readPool

69 <property name="poolNames">slave1,slave2</property>   //前面定義的服務器節點

4:啓動amoeba

/usr/local/amoeba/bin/amoeba start &

jobs 能夠查看後臺

5:測試

在主MYSQL服務器上建立db_test及庫下的test表

mysq>create database db_test;

mysq> use db_test;

mysq>create table test(id int(10),name varchar(20));

能夠在slave1和slave2上查看

mysq>show databases;

在slave1和slave2服務上中止主從備份

mysq>stop slave;

在master上添加表內容

mysql>insert into test values(1,'master');

此前在服務器上同步了表,因此在從服務器上能夠直接手動插入其餘內容

在slave1上

mysql>use db_test;

mysql>insert into test values(2,'slave1');

在slave2上

mysql>use db_test;

mysql>insert into test values(3,'slave2');

在客戶機上進行讀測試

client上

yum -y install mysql mysql-devel

進入mysql  

mysql -uamoeba -p123123 -h 192.168.100.123  -P8066  //注意 這是進入amoeba服務器的mysql。

讀測試

mysql>select * from db_test.test;  //來兩遍 會發現輪詢

此時讀取數據時,輪詢的方式從slave1,slave2上讀取

(2)寫入測試

mysql>insert into db_test.test values(4,'client');

mysq>select * from db_test.test;    //會多出一個

此時寫入數據到數據庫時,會寫到主服務器,不會寫到從服務器上,實現了讀寫分離。

相關文章
相關標籤/搜索