Mysql的主從復制的讀寫分離之Amoeba實現(xiàn)以前寫過了一篇Mysql的主從復制,但沒有實現(xiàn)Mysql的主從復制的讀寫分離。關于讀寫分離:讀寫分離(Read/WriteSplitting),
Mysql的主從復制的讀寫分離之Amoeba實現(xiàn)以前寫過了一篇Mysql的主從復制,但沒有實現(xiàn)Mysql的主從復制的讀寫分離。
關于讀寫分離:
讀寫分離(Read/Write Splitting),基本的原理是讓主數(shù)據(jù)庫處理事務性增、改、刪、操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理SELECT查詢操作。數(shù)據(jù)庫復制被用來把事務性操作導致的變更同步到集群中的從數(shù)據(jù)庫。
關于Mysql的讀寫分離實現(xiàn)大致有三種:
1、 程序修改Mysql操作類
就以程序來完成Mysql的讀寫操作,如以PHP程序、java程序等解決此需求。
優(yōu)點:直接和數(shù)據(jù)庫通信,簡單快捷的讀寫分離和隨機的方式實現(xiàn)的負載均衡,權限獨立分配
缺點:自己維護更新,增減服務器上的代碼處理。
2、 mysql-proxy
MySQL-Proxy是處在你的MySQL數(shù)據(jù)庫客戶和服務端之間的程序,它還支持嵌入性腳本語言Lua。這個代理可以用來分析、監(jiān)控和變換(transform)通信數(shù)據(jù),它支持非常廣泛的使用場景:
優(yōu)點:直接實現(xiàn)讀寫分離和負載均衡,不用修改代碼,master和slave用同一個賬號
缺點:字符集問題,lua語言編程,還只是alpha版本,時間消耗有點高
3、 Amoeba
參考官網(wǎng):,meidusa.com/
優(yōu)點:直接實現(xiàn)讀寫分離和負載均衡,不用修改代碼,有很靈活的數(shù)據(jù)解決方案
以上是三種常見的Mysql的讀寫分離方法。在這建議用第三種也就是amoeba來實現(xiàn)
關于Amoeba
Amoeba(變形蟲)項目,該開源框架于2008年開始發(fā)布一款Amoeba for Mysql軟件。這個軟件致力于Mysql的分布式數(shù)據(jù)庫前端代理層,它主要在應用層訪問Mysql的時候充當SQL路由功能,專注于分布式數(shù)據(jù)庫代理層(Database Proxy)開發(fā)。位于Client、DB Server(s)之間,虛擬主機,對客戶透明。具有負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關的到目標數(shù)據(jù)庫、可并發(fā)請求多臺數(shù)據(jù)庫合并結果。通過Amoeba你能夠完成多數(shù)據(jù)源的高可用、負載均衡、數(shù)據(jù)切片的功能,目前Amoeba已在很多企業(yè)的生產(chǎn)線上使用。
下面就來把 Mysql的主從復制和讀寫分離完整的實現(xiàn)一下。
先來做Mysql的主從復制。
我實現(xiàn)的環(huán)境如下:
System:Centos 5.4 32bit
主:192.168.1.107
從:192.168.1.139
讀寫分離:192.168.1.183
拓撲圖如下:
MySql的主從復制:
對主MysqL服務器,主要是開啟二進制日志,這個默認是開啟的,在配置文件中:
# vim /etc/my.cnf
server-id = 1 (默認為1)
log-bin = mysql-bin (這個也是默認開啟的)
下面連接到mysql數(shù)據(jù)庫中創(chuàng)建一個用戶并賦予復制權限。
mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.139' IDENTIFIED BY "123456";
這樣在主服務器上操作暫時完成了。
下面來在從服務器上操作:
修改主配置文件:my.cnf
因為在主mysql中已經(jīng)有數(shù)據(jù)了,所以要把主服務器的數(shù)據(jù)導入到從服務器中,所以在主服務器上的操作:
以上操作完成后就可以做把主從連接在一起了。
在從服務器上進入數(shù)據(jù)庫中
下面就可以在從服務器上開啟復制了
mysql> start slave;
查看是否連接成功:
可在主服務器上創(chuàng)建一個數(shù)據(jù)庫或表來在從服務器上來驗證一下。
下面來進行最為核心的內(nèi)容——讀寫分離
下面的操作要在讀寫分離的服務器上操作也就是:192.168.1.183
Amoeba的安裝:
安裝Amoeba前要先安裝JDK,因為Amoeba是用java開發(fā)的所要有JDK支持。
如果沒有安裝JDK,要先安裝,方法如下 :
安裝完成后就可以安裝Amoeba了
下載:
安裝:
解壓后就完成了。下面要做的就是配置。
下面就來配置一下。
# cd /usr/local/amoeba
# vim dbServer.xml
下面來配置amoeba.xml文件
配置完成后就可以啟動amoeba了。
從上面的一些信息可以看到amoeba已經(jīng)啟動,下面就可以測試一下了。
下面來做一測試:
為了更好的看到測試結果,要做以下這些步驟:
測試之前要先保證amoeba-server有訪問兩個主從服務器test庫的權限,在主mysql上執(zhí)行:
下面開始測試:
先讓主從開始復制,即在從服務器上執(zhí)行:
mysql> slave start;
再從讀寫分離的服務器上登錄:
# mysql -uroot -p123456 -h192.168.1.183 -P8066
進入之后,先來創(chuàng)建一個數(shù)據(jù)庫zhou,然后在這個數(shù)據(jù)庫中創(chuàng)建一個表test
mysql> create database zhou;
mysql> use zhou;
mysql> create table test (id int(10), name varchar(20),adress varchar(30));
做完這些,回到從服務器上執(zhí)行:
mysql> slave stop;
接著在主從服務器上各加入一條不同的數(shù)據(jù)。
在主上:
mysql> use zhou;
mysql> insert into test ('1','zhou','this_is_master');
在從上:
mysql> use zhou;
mysql> insert into test ('2','zhou','this_is_slave');
完成后就可以在讀寫分離服務器上測試讀寫了
在讀寫分離服務器上:
mysql> use zhou;
mysql> select * from test;
+------+------+---------------+
| id | name | address |
+------+------+---------------+
| 2 | zhou | this_is_slave |
+------+------+---------------+
1 row in set (0.01 sec)
從結果可以看出數(shù)據(jù)是讀的從服務器上的數(shù)據(jù),然后我們直接插入數(shù)據(jù),再來測試
mysql> insert into test values('3','hhh','test_write');
Query OK, 1 row affected (0.01 sec)
mysql> select * from test;
+------+------+---------------+
| id | name | address |
+------+------+---------------+
| 2 | zhou | this_is_slave |
+------+------+---------------+
1 row in set (0.00 sec)
結果顯示出的數(shù)據(jù)沒有改變,網(wǎng)站空間,因為我們把主從復制停了,所以數(shù)據(jù)沒有同步,從查詢的結果可以看到,數(shù)據(jù)還是來自從服務器。
然后們再在主服務器上查詢可以看到:
mysql> select * from test;
+------+------+--------------- +
| id | name | address |
+------+------+--------------- +
| 1 | zhou | this_is_master |
+------+------+--------------- +
| 3 | hhh | test_write |
+------+------+--------------- +
從上面的結果可以看出,數(shù)據(jù)的讀寫分離成功了。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com