主從多線程同步工具,Transfer 2.0 發布
背景
Transfer是一個主從多線程同步工具,直接patch在MySQL中。2011年開發完成。于去年的12.12上線,并撐住高峰期主從,保證從庫無延遲,使得應用能夠直接從從庫上讀數據。
新功能
Transfer第一版本存在兩個可改進的點:單表并發和事務支持。
a) Transfer2.0支持單表并發,基本原理就是按照更新行的主鍵id (因此有一個限制是同步的表必須要有主鍵)。
b) Transfer2.0支持slave回放主庫事務時以事務為單位執行。
內部基本結構
Transfer1.0
為什么不直接寫到slave里面?由于DBA同學覺得直接寫在slave里面擔心數據安全性,因此改造成第一個第三方工具。
Transfer2.0
外部主庫和備庫的行為相同,Trasnfer內部改為
性能效果
上周五在一個緊急項目中由于其他方案出問題,上線測試,從庫tps性能從300+提升到2000+。
安裝配置
Transfer的推薦配置結構是
Master ==> Transfer ==> Slave
假設你已經有Master和Slave,Transfer建議部署在slave同一個機器,當時我們上線是這么配置的,當然如果你機器多,也可以考慮放在單獨一個機器,只是不必要。
Transfer的安裝步驟:
a) 附件中三個mysqld,分別是官方版本mysql-5.1.48, percona 版本5.5.18和淘寶MySQL分支5.5.18打入patch后生成的三個bin文件。
需要你先安裝你選擇的對應的官方版本,然后替換mysqld。
b) My.cnf里面新增如下幾行配置:
remote_slave_hostname = 127.0.0.1
remote_slave_username = root
remote_slave_password =
remote_slave_port = 3306
transfer_slave_thread = 16
slave_skip_errors=1062,1032
c) 將Slave中需要同步的表結構,導入到Transfer中。注意,只需要表結構,不需要數據。
其中remote_slave系列配置的是一個有super權限訪問Slave的帳號。
重啟即可。
在Transfer中的操作與在Slave中原本的操作相同,只是現在的關系是,Transfer注冊為Master的主庫,得到操作步驟后,更新Slave.
Transfer變身Slave
有的同學說我不想維護多一個實例。其實就so easy,只要把trasnfer的目標指向自己即可。
為了安全起見,配置規則必須是
remote_slave_hostname配置為127.0.0.1 且 remote_slave_port與Transfer端口相同。
當然,如果Transfer自己是slave,配置時還少了一步拷貝表結構
三個可執行文件下載地址
文章地址Transfer2.0 發布啦