Tungsten replicator简介

 



Tungsten是一套用于数据库集群和复制的软件集合,包括replication, management, SQL routing, and proxying。

tungsten replicator则是这套软件中用于数据复制的一个组件。通过在主从服务器上部署的java程序对主数据库的binlog进行跟踪,并将更新的内容解析出来发送到从服务器,而从服务器的java则将接收到的更新写入从数据库。 


通过tungsten replicator实现mysql多主一从的备份架_服务器

 



测试环境

 


Master1 


192.168.1.8 


Master2 


192.168.1.4 


Slave 


192.168.1.7 



由于tungsten replicator是java程序,因此需要各个服务器都架设jdk环境 



Maser配置 


下载tungsten replicator1.0.2的压缩包,解压到一个单独的目录。将conf目录下的replicator.properties.mysql重命名为replicator.properties,并根据实际情况修改以下内容: 



#声明当前服务器是master模式 


replicator.role=master 


#服务启动后自动开始复制 


replicator.auto_enable=true 


#指定一个全局唯一的id,建议用服务器名 


replicator.source_id=dev08 


#指定用于存放复制数据的库名,在mysql手动生成一个空的库,并在my.cnf中将这个库加入binlog-ignore-db参数里。默认数据库为tungsten 


replicator.schema=tungsten 


#指定master的ip,本机则使用localhost 


replicator.thl.remote_uri=thl://localhost/ 


#如果replicator.schema参数指定了其他的数据库名,则需要把tungsten改成指定的数据库名。 


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程序使用的数据库用户名和密码,并在数据库中生成该用户,需要super权限。 


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查看服务器状态 


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: 




Max Seq No: 


179 


Monitor Intvl (S): 282740.011 


Extr Total: 


179 


Extr Last Seq No: 


179 


Extr/Sec: 


6.330904427029223E-4 


Recv Total: 




Recv Last Seq No: 


-1 


Recv Source TS: 


null 


Recv Target TS: 


null 


Recv Latency (S): 


0.0 


Recv/Sec: 


0.0 


Apply Total: 




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 


当state为ONLINE:MASTER说明启动成功。 


[font=Wingdings] 


[/font]

Slave配置 


由于要从2个master上同步数据,所以要将tungstereplicator解压到2个不同的目录,然后分别启动2个目录里的tungsten replicator程序。 


基本配置和master相同,只是replicator.properties的内容不同,根据实际情况修改以下内容: 



#声明本机是slave模式 


replicator.role=slave 


#服务启动后自动开始复制 


replicator.auto_enable=true 


#指定一个全局唯一的id,slave上2个replicator需要不同的id 


replicator.source_id=dev071 


#指定用于存放复制数据的库名,并在my.cnf中将这个库加入binlog-ignore-db参数里。2个replicator需要不同的库存放数据,在mysql里手动生成这2个空的库,并在my.cnf中将这2个库加入binlog-ignore-db参数里 


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用于复制数据库。 


replicator.thl.remote_uri=thl://192.168.1.4/ 


# replicator.schema参数,将svnrep改为实际的数据库名。 


replicator.thl.url=jdbc:mysql://localhost/svnrep 


其他配置与master相同。 



配置完成后使用bin目录下的trepsvc命令启动 


Trepsvc start 


用bin目录下的trepctl查看服务器状态 


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: 




Max Seq No: 




Monitor Intvl (S): 6509.153 


Extr Total: 




Extr Last Seq No: 


-1 


Extr/Sec: 


0.0 


Recv Total: 




Recv Last Seq No: 




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: 




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 


当state为ONLINE:SLAVE时,说明已经复制成功。 


  


由于当前版本的trepctl命令默认使用的是10000端口,所以查看端口为11000的replicator状态需要手动设置一下系统变量 


export REPLICATOR_RMI_PORT=11000 


然后再执行trepctl即可。 



Tungsten replicator的一些特点

 



Tungsten replicator被定义为是异构数据库复制框架,可实现不同版本,不同种类数据库之间的数据库复制。根据官方的说明,现在可以实现mysql各版本件,以及mysql与oracle间的数据库复制,但是一些函数上限制还是不能避免。 


本来测试这个软件是想用来代替mysql replication的,但是测试的效果不是很好,100万条记录同步,mysql replication需要4分10秒,tungsten replicator需要5分30秒。对行复制模式的binlog支持不是很好,对ddl语句支持不是很好。 


由于tungsten replicator使用的是jdbc进行数据操作,所以一些在数据库中可以进行的操作会被jdbc认为是非法操作而导致复制中止,例如像datetime字段插入一个空字符。,所以如果web应用层不是java程序的话还是有一定风险的。而且java程序本身也需要一定的内存,当数据库的写入和更新操作比较频繁导致内存不够的时候,master上的tungsten会因为内存不够而出错,但是不会造成数据丢失,只是复制会中止。测试中我的服务器是2G内存,innodb_buffer_pool_size为1G,当我批量生成100万的数据的时候就会出错。tungsten默认最大内存为256M,可以通过修改wrapper.conf的wrapper.java.maxmemory参数来增加内存上限。 


不过这个软件更新还是很快的,测试的时候还是1.0.1,测试完毕后就已经更新到1.0.2了。在这个软件的开发计划中,并行复制是比较让人期待的功能。