Tungsten replicator簡介 Tungsten是一套用于數(shù)據(jù)庫集群和復(fù)制的軟件集合,包括replication, management, SQL routing, and proxying。Ppc2009大會對這套軟件專門做了介紹,下載地址如下 [url=http://sourceforge.net/project/showfiles.php?group_id=256125]http://sourceforge.net/project/showfiles.php?group_id=256125 tungsten replicator則是這套軟件中用于數(shù)據(jù)復(fù)制的一個組件。通過在主從服務(wù)器上部署的java程序?qū)χ鲾?shù)據(jù)庫的binlog進(jìn)行跟蹤,并將更新的內(nèi)容解析出來發(fā)送到從服務(wù)器,而從服務(wù)器的java則將接收到的更新寫入從數(shù)據(jù)庫。 ![]() 測試環(huán)境 Master1 192.168.1.8 Master2 192.168.1.4 Slave 192.168.1.7 由于tungsten replicator是java程序,因此需要各個服務(wù)器都架設(shè)jdk環(huán)境 Maser配置 下載tungsten replicator1.0.2的壓縮包,解壓到一個單獨的目錄。將conf目錄下的replicator.properties.mysql重命名為replicator.properties,并根據(jù)實際情況修改以下內(nèi)容: #聲明當(dāng)前服務(wù)器是master模式 replicator.role=master #服務(wù)啟動后自動開始復(fù)制 replicator.auto_enable=true #指定一個全局唯一的id,建議用服務(wù)器名 replicator.source_id=dev08 #指定用于存放復(fù)制數(shù)據(jù)的庫名,在mysql手動生成一個空的庫,并在my.cnf中將這個庫加入binlog-ignore-db參數(shù)里。默認(rèn)數(shù)據(jù)庫為tungsten replicator.schema=tungsten #指定master的ip,本機(jī)則使用localhost replicator.thl.remote_uri=thl://localhost/ #如果replicator.schema參數(shù)指定了其他的數(shù)據(jù)庫名,則需要把tungsten改成指定的數(shù)據(jù)庫名。 replicator.thl.url=jdbc:mysql://localhost/tungsten #指定binlog文件所在的目錄 replicator.extractor.mysql.binlog_dir=/usr/local/mysql/var #指定binlog文件名的前綴 replicator.extractor.mysql.binlog_file_pattern=mysql-bin #指定replicator程序使用的數(shù)據(jù)庫用戶名和密碼,并在數(shù)據(jù)庫中生成該用戶,需要super權(quán)限。 replicator.thl.user=tungsten replicator.thl.password=secret replicator.applier.mysql.host=localhost replicator.applier.mysql.port=3306 replicator.applier.mysql.user=tungsten replicator.applier.mysql.password=secret replicator.extractor.mysql.host=localhost replicator.extractor.mysql.user=tungsten replicator.extractor.mysql.password=secret 配置完成后使用bin目錄下的trepsvc命令啟動 Trepsvc start 用bin目錄下的trepctl查看服務(wù)器狀態(tài) Trepctl status Name Value =============================================== System ID dev08 System Version: 1.0-beta5 System State: ONLINE:MASTER System Uptime (S): 282739.972s State Uptime (S): 282739.351s Error: null Error Exception: null Min Seq No: 0 Max Seq No: 179 Monitor Intvl (S): 282740.011 Extr Total: 179 Extr Last Seq No: 179 Extr/Sec: 6.330904427029223E-4 Recv Total: 0 Recv Last Seq No: -1 Recv Source TS: null Recv Target TS: null Recv Latency (S): 0.0 Recv/Sec: 0.0 Apply Total: 0 Apply Last Seq No: -1 Apply Source TS: null Apply Target TS: null Apply Latency (S): 0.0 Apply/Sec: 0.0 State: ONLINE:MASTER Seqno Range: 0 -> 179 當(dāng)state為ONLINE:MASTER說明啟動成功。 [font=Wingdings] [/font]Slave配置 由于要從2個master上同步數(shù)據(jù),所以要將tungstereplicator解壓到2個不同的目錄,然后分別啟動2個目錄里的tungsten replicator程序。 基本配置和master相同,只是replicator.properties的內(nèi)容不同,根據(jù)實際情況修改以下內(nèi)容: #聲明本機(jī)是slave模式 replicator.role=slave #服務(wù)啟動后自動開始復(fù)制 replicator.auto_enable=true #指定一個全局唯一的id,slave上2個replicator需要不同的id replicator.source_id=dev071 #指定用于存放復(fù)制數(shù)據(jù)的庫名,并在my.cnf中將這個庫加入binlog-ignore-db參數(shù)里。2個replicator需要不同的庫存放數(shù)據(jù),在mysql里手動生成這2個空的庫,并在my.cnf中將這2個庫加入binlog-ignore-db參數(shù)里 replicator.schema=svnrep #指定rmi端口,2個replicator需要指定不同端口 replicator.rmi_port=11000 #指定thl端口,2個replicator需要指定不同端口 replicator.thl.uri=thl://0.0.0.0:12112/ #指定master的ip,2個replicator指定不同master用于復(fù)制數(shù)據(jù)庫。 replicator.thl.remote_uri=thl://192.168.1.4/ # replicator.schema參數(shù),將svnrep改為實際的數(shù)據(jù)庫名。 replicator.thl.url=jdbc:mysql://localhost/svnrep 其他配置與master相同。 配置完成后使用bin目錄下的trepsvc命令啟動 Trepsvc start 用bin目錄下的trepctl查看服務(wù)器狀態(tài) Trepctl status Name Value =============================================== System ID dev071 System Version: 1.0-beta5 System State: ONLINE:SLAVE System Uptime (S): 6509.149s State Uptime (S): 6325.891s Error: null Error Exception: null Min Seq No: 0 Max Seq No: 5 Monitor Intvl (S): 6509.153 Extr Total: 0 Extr Last Seq No: -1 Extr/Sec: 0.0 Recv Total: 2 Recv Last Seq No: 5 Recv Source TS: 2009-06-22 15:53:54.581 Recv Target TS: 2009-06-22 15:58:26.343 Recv Latency (S): 271.762 Recv/Sec: 3.072588835840643E-4 Apply Total: 1 Apply Last Seq No: 5 Apply Source TS: 2009-06-22 15:53:54.581 Apply Target TS: 2009-06-22 15:58:26.352 Apply Latency (S): 271.771 Apply/Sec: 1.536292765781721E-4 State: ONLINE:SLAVE Seqno Range: 0 -> 5 當(dāng)state為ONLINE:SLAVE時,說明已經(jīng)復(fù)制成功。 由于當(dāng)前版本的trepctl命令默認(rèn)使用的是10000端口,所以查看端口為11000的replicator狀態(tài)需要手動設(shè)置一下系統(tǒng)變量 export REPLICATOR_RMI_PORT=11000 然后再執(zhí)行trepctl即可。 Tungsten replicator的一些特點 Tungsten replicator被定義為是異構(gòu)數(shù)據(jù)庫復(fù)制框架,可實現(xiàn)不同版本,不同種類數(shù)據(jù)庫之間的數(shù)據(jù)庫復(fù)制。根據(jù)官方的說明,現(xiàn)在可以實現(xiàn)mysql各版本件,以及mysql與oracle間的數(shù)據(jù)庫復(fù)制,但是一些函數(shù)上限制還是不能避免。 本來測試這個軟件是想用來代替mysql replication的,但是測試的效果不是很好,100萬條記錄同步,mysql replication需要4分10秒,tungsten replicator需要5分30秒。對行復(fù)制模式的binlog支持不是很好,對ddl語句支持不是很好。 由于tungsten replicator使用的是jdbc進(jìn)行數(shù)據(jù)操作,所以一些在數(shù)據(jù)庫中可以進(jìn)行的操作會被jdbc認(rèn)為是非法操作而導(dǎo)致復(fù)制中止,例如像datetime字段插入一個空字符。,所以如果web應(yīng)用層不是java程序的話還是有一定風(fēng)險的。而且java程序本身也需要一定的內(nèi)存,當(dāng)數(shù)據(jù)庫的寫入和更新操作比較頻繁導(dǎo)致內(nèi)存不夠的時候,master上的tungsten會因為內(nèi)存不夠而出錯,但是不會造成數(shù)據(jù)丟失,只是復(fù)制會中止。測試中我的服務(wù)器是2G內(nèi)存,innodb_buffer_pool_size為1G,當(dāng)我批量生成100萬的數(shù)據(jù)的時候就會出錯。tungsten默認(rèn)最大內(nèi)存為256M,可以通過修改wrapper.conf的wrapper.java.maxmemory參數(shù)來增加內(nèi)存上限。 不過這個軟件更新還是很快的,測試的時候還是1.0.1,測試完畢后就已經(jīng)更新到1.0.2了。在這個軟件的開發(fā)計劃中,并行復(fù)制是比較讓人期待的功能。 |