主从多线程同步工具,Transfer 2.0 发布

jopen 12年前
   <p><strong>背景</strong></p>    <p>       Transfer是一个主从多线程同步工具,直接patch在MySQL中。2011年开发完成。于去年的12.12上线,并撑住高峰期主从,保证从库无延迟,使得应用能够直接从从库上读数据。</p>    <br />    <p><strong>新功能</strong></p>    <p>       Transfer第一版本存在两个可改进的点:单表并发和事务支持。</p>    <p>a)      Transfer2.0支持单表并发,基本原理就是按照更新行的主键id (因此有一个限制是同步的表必须要有主键)。</p>    <p>b)      Transfer2.0支持slave回放主库事务时以事务为单位执行。</p>    <p><strong>内部基本结构</strong></p>    <p>Transfer1.0</p>    <p><img class="alignnone" alt="主从多线程同步工具,Transfer 2.0 发布" src="https://simg.open-open.com/show/b17e908e65ddbcc3419e4f6d3a9cd7e6.jpg" width="573" height="316" /></p>    <p>为什么不直接写到slave里面?由于DBA同学觉得直接写在slave里面担心数据安全性,因此改造成第一个第三方工具。</p>    <p>Transfer2.0</p>    <p><img class="alignnone wp-image-6333" alt="主从多线程同步工具,Transfer 2.0 发布" src="https://simg.open-open.com/show/c5d0b959a44207a30c6566fb889400ac.jpg" width="563" height="283" /></p>    <p>       外部主库和备库的行为相同,Trasnfer内部改为</p>    <p><strong>性能效果</strong></p>    <p>       上周五在一个紧急项目中由于其他方案出问题,上线测试,从库tps性能从300+提升到2000+。</p>    <p><strong>安装配置</strong></p>    <p>       Transfer的推荐配置结构是</p>    <p>      Master  ==> Transfer ==> Slave</p>    <p>       假设你已经有Master和Slave,Transfer建议部署在slave同一个机器,当时我们上线是这么配置的,当然如果你机器多,也可以考虑放在单独一个机器,只是不必要。</p>    <p>       Transfer的安装步骤:</p>    <p>a)    附件中三个mysqld,分别是官方版本mysql-5.1.48, percona 版本5.5.18和淘宝MySQL分支5.5.18打入patch后生成的三个bin文件。</p>    <p>   需要你先安装你选择的对应的官方版本,然后替换mysqld。</p>    <p>b)   My.cnf里面新增如下几行配置:</p>    <p>remote_slave_hostname = 127.0.0.1<br /> remote_slave_username = root<br /> remote_slave_password =<br /> remote_slave_port = 3306<br /> transfer_slave_thread = 16<br /> slave_skip_errors=1062,1032</p>    <p><strong>c)      </strong>将Slave中需要同步的表结构,导入到Transfer中。<strong>注意,只需要表结构,不需要数据。<br /> </strong>       其中remote_slave系列配置的是一个有super权限访问Slave的帐号。<br />       重启即可。</p>    <p>在Transfer中的操作与在Slave中原本的操作相同,只是现在的关系是,Transfer注册为Master的主库,得到操作步骤后,更新Slave.</p>    <p><strong>Transfer</strong><strong>变身</strong><strong>Slave</strong></p>    <p><strong>       </strong>有的同学说我不想维护多一个实例。其实就so easy,只要把trasnfer的目标指向自己即可。<br /> 为了安全起见,配置规则必须是<br /> remote_slave_hostname配置为127.0.0.1 且 remote_slave_port与Transfer端口相同。<br /> 当然,如果Transfer自己是slave,配置时还少了一步拷贝表结构</p>    <p>三个可执行文件<a href="http://pan.baidu.com/share/link?shareid=17453&uk=1191507911/">下载地址</a></p>    <div style="font-style:italic;margin-top:15px;">     <p>文章地址<a href="/misc/goto?guid=4958523460194964731">Transfer2.0 发布啦</a></p>    </div>