tungsten本身就是一個資料複製的中介軟體,他支援不同的資料之間的資料轉送。 基本上做資料流平台的都會用到這個工具。
這個東西的作用簡單來說就是:你不必搭建Mysql主從複製關係,也能複製資料。
前面已經介紹過tungsten是什麼東西,現在主要介紹一下怎麼使用。
master-slave的tungsten安裝很簡單,因為我一台機器上我是一台機器上安裝了master,slave,所以我需要安裝兩次tungsten.
Mysql 部署好以後,搭建好主從複製關係,在slave上執行stop slave;
然後安裝兩個tungsten.命令分別為:
master:
到tungsten的home目錄下,執行
1 ./tools/tungsten-installer \2 –master-slave \3 –master-host=x.x.x.x \4 --cluster-hosts=x.x.x.x \5 –datasource-user=root \6 –datasource-password=123 \7 –service-name=sys \8 –home-directory=/home/ddb/zty/liky \9 –start
安裝之前確定許可權沒有問題。
slave:
1 ./tools/tungsten-installer \ 2 --master-slave \ 3 --cluster-hosts=x.x.x.x \ 4 --master-host=x.x.x.x \ 5 --master-thl-port=2112 \ 6 --datasource-port=6999 \ 7 --datasource-mysql-conf=./my2.cnf \ 8 --datasource-user=zty \ 9 --datasource-password=zty \10 --service-name=sys \11 --home-directory=/home/ddb/liky1 \12 --thl-port=4112 \13 --rmi-port=12000 \14 --start-and-report
同樣的安裝之前需要確認許可權沒有問題,同時thl-port,rmi-port都指定一下,因為master使用的預設值,slave就不能再使用了。
--datasource-mysql-conf這個也手動指定下,不然也會出錯。
更多的詳細配置參考:
./tools/tungsten-installer --help-all
還有一點需要注意的是,master和slave的server-name必須一樣。
查看安裝是否成功:
1 master: 2 ddb@db-35:~/zty/liky1/tungsten/tungsten-replicator/bin$ ./trepctl services 3 Processing services command... 4 NAME VALUE 5 ---- ----- 6 appliedLastSeqno: 1614963 7 appliedLatency : 0.212 8 role : master 9 serviceName : sys10 serviceType : local11 started : true12 state : ONLINE13 Finished services command...14 15 slave :16 ddb@db-35:~/zty/liky1/tungsten/tungsten-replicator/bin$ ./trepctl -port 12000 services17 Processing services command...18 NAME VALUE19 ---- -----20 appliedLastSeqno: 161496321 appliedLatency : 0.99422 role : slave23 serviceName : sys24 serviceType : local25 started : true26 state : ONLINE27 Finished services command...
下面我們類比往master上insert資料,看看tungsten會產生什麼格式的資料。
查看資料的命令很簡單:
在slave上查看。
1 ddb@db-35:~/zty/liky1/tungsten/tungsten-replicator/bin$ ./thl -conf ../conf/static-sys.properties list | less 2 3 SEQ# = 14 / FRAG# = 0 (last frag) 4 - TIME = 2012-08-17 12:38:08.0 5 - EPOCH# = 1 6 - EVENTID = mysql-bin.000034:0000000000002494;0 7 - SOURCEID = db-35 8 - METADATA = [mysql_server_id=999;service=sys;shard=test] 9 - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent10 - SQL(0) =11 - ACTION = INSERT12 - SCHEMA = test13 - TABLE = t114 - ROW# = 015 - COL(1: ) = 1116 - COL(2: ) = 1
在命令後面加一個 -sql會能更容易觀察。
ddb@db-35:~/zty/liky1/tungsten/tungsten-replicator/bin$ ./thl -conf ../conf/static-sys.properties list -sql
1 insert into test.t1(b) values (1) /* ___SERVICE___ = [sys] */;2 - METADATA = [mysql_server_id=999;service=sys;shard=test]3 - TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent4 SET INSERT_ID = 16294965 - OPTIONS = [##charset = ISO8859_1, autocommit = 1, sql_auto_is_null = 0, foreign_key_checks = 1, unique_checks = 1, sql_mode = '', character_set_client = 8, collation_connection = 8, collation_server = 8]6 USE ;
tungsten的LOG會在 安裝目錄/THL/server-name/ , 也是使用thl工具就能單獨查看。
有個問題,如果mysql使用的是ROW Base的binlog-format的話,tungsten就不支援使用-sql參數解析:
# SQL output on row change events is not supported yet.- METADATA = [mysql_server_id=999;service=sys;shard=test]- TYPE = com.continuent.tungsten.replicator.event.ReplDBMSEvent# SQL output on row change events is not supported yet.
你也可以通過這樣的命令查看tungsten的LOG的寫入狀態。
./trepctl -port 12000 status。
Tungsten支援從任意POST接收BINLOG,做法:
./trepctl offline
./trcpctl online -from-enent
如果寫入的過程中出現了問題,你也可以SKIP掉這個位置:
./trcpctl online -skip-seqno
具體請查看:
./trcpctl help
Tungsten會在Mysql上建立一個database,裡面有一些表,trep_commit_seqno表會記錄binlog的即時變化情況,如果binlog一直有變化,會一直有Update語句更新這個表,
這個表只有一條記錄,所以這是對應能有影響的。
不知道你注意到沒有我安裝兩個tungsten的時候,一直有指定–master-slave,其實是有兩種的:{--direct|--master-slave}
它是什麼意思呢?看圖吧:
master-slave
direct
同時tungsten也支援M-M也就是master-master,不過看了一下,沒啥特別的地方,還是一個同一時刻只能有一個master寫,second master 做臨時切換用的。大家自己找文檔看看吧。
http://code.google.com/p/tungsten-replicator/wiki/TRCMultiMasterInstallation#Multi-Master_Installation
http://code.google.com/p/tungsten-replicator/wiki/TRCMultiMasterInstallation#Multi-Master_Installation