免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 27365 | 回复: 7

通过tungsten replicator实现mysql多主一从的备份架构 [复制链接]

论坛徽章:
0
发表于 2009-06-22 18:06 |显示全部楼层
Tungsten replicator简介

Tungsten是一套用于数据库集群和复制的软件集合,包括replication, management, SQL routing, and proxying。Ppc2009大会对这套软件专门做了介绍,下载地址如下
http://sourceforge.net/project/showfiles.php?group_id=256125
tungsten replicator则是这套软件中用于数据复制的一个组件。通过在主从服务器上部署的java程序对主数据库的binlog进行跟踪,并将更新的内容解析出来发送到从服务器,而从服务器的java则将接收到的更新写入从数据库。


测试环境
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:
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
当state为ONLINE:MASTER说明启动成功。

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:
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
当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了。在这个软件的开发计划中,并行复制是比较让人期待的功能。

[ 本帖最后由 voxxu 于 2009-6-22 18:31 编辑 ]

评分

参与人数 1可用积分 +4 收起 理由
Coolriver + 4 原创内容

查看全部评分

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
发表于 2009-06-22 18:32 |显示全部楼层
多出现一些解决方案总是好的

论坛徽章:
0
发表于 2009-06-24 18:25 |显示全部楼层
顶楼主的分享精神。
可以看出来Tungsten replicator目前还不成熟,如果有多主一丛的需要的话,可以考虑自己写中间程序读binlog,然后在slave上应用,做好数据验证即可。

论坛徽章:
0
发表于 2009-06-25 09:40 |显示全部楼层
确实还不是很成熟,使用中有很多限制

论坛徽章:
0
发表于 2009-06-25 11:25 |显示全部楼层
谢谢lz分享

论坛徽章:
0
发表于 2009-07-01 00:13 |显示全部楼层
好东西,顶一下

论坛徽章:
0
发表于 2009-07-01 09:32 |显示全部楼层
好东西,感谢LZ分享,不知道WINDOWS下面有没有这么好的软件

论坛徽章:
0
发表于 2009-07-01 11:06 |显示全部楼层
的确不错,不知道楼主说的限制指哪些

[ 本帖最后由 bitterness 于 2009-7-1 11:09 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP