SlideShare a Scribd company logo
Double Sync Replication
—— 對 MySQL 原生複製可靠性的改進
阿里巴巴云計算 彭立勛
原生異步 Replication 機制
異步復制存在的缺陷
• 主庫事務提交并不需要備庫 ACK
• 備庫無法得知拖取的是否是最新的日志
• 宕機后無法利用備庫本身的信息得知是否跟主庫一致
• 所以,備庫無法及時得知主庫的狀態
原生 Semi-Sync Replication 機制
SemiSync 存在的缺陷
• 主庫事務提交需要備庫 ACK
• 網絡超時后備庫降級為異步復制
• 超時設太小,則經常發生超時
• 超時設太大,則經常導致主庫 hang
• 網絡恢復后需要追趕日志,追趕期間備庫狀態依然不可知
• 因為無法得知宕機時備庫是否跟主庫是 SemiSync 狀態
• 所以依然無法得知備庫是否跟上主庫
• 因此, SemiSync 并沒有解決異步復制的根本缺陷
異步復制 /SemiSync 存在的問題
我們要達成的目標
• 前提
• 主機保證可用性 5 個 9
• 網絡保證可用性 5 個 9
• 宕機瞬時沒有發生網絡超時
• 目標
• 備庫隨時可以得知自己的狀態(跟主庫同步 或 沒有跟主庫同步)
• 在確認跟主庫不同步時,通知應用參與數據補償,并且告知所缺數據范圍
• 在確認跟主庫同步時,可以保證備庫執行到跟主庫一致狀態再提供服務
• 核心:避免備庫狀態不可知!
攻破 SemiSync 的缺點
• SemiSync 一旦超時斷開,即使網絡恢復,依然需要補償拖取斷開期
間的日志
• 如果 SemiSync 超時斷開,網絡恢復后不再補償數據,只發最新日志,如何
?
• 只要宕機時網絡正常,備庫始終會知道主庫最新位點
• 依此可以判斷備庫是否跟主庫日志有差異
• 備庫如果只接收最新數據,那么中斷期間的數據如何處理?
• 異步復制可以在不影響主庫提交的情況下拖取日志
• 利用異步復制的日志可以進行完整的日志回放
結合兩種復制
• 異步復制( Async_Channel )
• 拖取連續日志,保證備庫接收的日志不中斷
• 接收到日志后直接執行
• 半同步復制( Sync_Channel )
• 拖取最新日志,保證備庫始終知道最新的日志位置
• 接收到日志后并不執行,只保留位置
• 一致性判斷
• 比較異步復制和半同步復制的日志段,可以判斷備庫日志可否連續接上
結合兩種復制
兩個通道如何做到( 1 )
• 多源復制可以在一個 Slave 上創建多個獨立通道分別進行復制
• 問題 1 :同一個 ServerID 發起兩個通道到 Master , Master 會認為
是原 Slave 斷開沒有主動發起 close 連接,從而會踢掉先連上的通道
• 解決:可以將 SemiSync 通道偽裝一個 ServerID ,避免被踢
兩個通道如何做到( 2 )
• 問題 2 :一個 Slave 同時有一個非 SemiSync 通道和一個 SemiSync
通道,而 SemiSync 設置是保存在全局的
• 解決:把 SemiSync 改為 Per-Channel 的設置,將 SemiSyncSlave 類
轉移到 Master_info 結搆體中
如何判斷兩個通道日志是否連續
• 利用兩個通道收到的 GTID 序號作對比
• 利用兩個通道收到日志的 Log_file_name 和 Log_file_pos
• 如果半同步通道的日志起始點小於等於異步通道結束點,那么備庫
其實有完整的日志,反之備庫無法跟上主庫
如何判斷兩個通道日志是否連續
CASE 1: 無需補償
• 備庫兩通道數據結束點完全一致
CASE 2: 無法補償
• 備庫兩通道數據合集存在斷點
CASE 3: 可以補償
• 備庫兩通道數據合集沒有斷點
如何補償數據
• 利用半同步通道收到的日志,在異步通道應用完日志后,啟用半同
步通道應用日志
• 利用 GTID 來過濾重復 Event
• 提供 REPAIR SLAVE 命令來嘗試補償數據并返回備庫狀態,根據
Result 列的結果判斷備庫是否跟主庫一致
THANKS!

More Related Content

What's hot

Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
Onnie Fong
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
Shengyou Fan
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
Shengyou Fan
 
Route 機制
Route 機制Route 機制
Route 機制
Shengyou Fan
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
Shengyou Fan
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
Shengyou Fan
 
MySQL Replication新功能介绍
MySQL Replication新功能介绍 MySQL Replication新功能介绍
MySQL Replication新功能介绍 orczhou
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
Shengyou Fan
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
Alan Tsai
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
Vincent Chi
 
應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署
Shengyou Fan
 

What's hot (13)

Vagrant教學
Vagrant教學Vagrant教學
Vagrant教學
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Route 機制
Route 機制Route 機制
Route 機制
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
MySQL Replication新功能介绍
MySQL Replication新功能介绍 MySQL Replication新功能介绍
MySQL Replication新功能介绍
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
 
應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署
 

Viewers also liked

Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongMichael Zhang
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南
学峰 司
 
J Query简介及入门指南
J Query简介及入门指南J Query简介及入门指南
J Query简介及入门指南AppZ
 
Go语言学习指南
Go语言学习指南Go语言学习指南
Go语言学习指南
清平 张
 
DSL简介
DSL简介DSL简介
DSL简介
a596620989
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
王峰:阿里搜索实时流计算技术
王峰:阿里搜索实时流计算技术王峰:阿里搜索实时流计算技术
王峰:阿里搜索实时流计算技术
hdhappy001
 
Ab test -互联网渐进式解决方案
Ab test -互联网渐进式解决方案Ab test -互联网渐进式解决方案
Ab test -互联网渐进式解决方案
文波 张
 
iOS 10 HCI: Information Architecture
iOS 10 HCI: Information ArchitectureiOS 10 HCI: Information Architecture
iOS 10 HCI: Information Architecture
WANGCHOU LU
 
深入浅出Netty l.t
深入浅出Netty   l.t深入浅出Netty   l.t
深入浅出Netty l.toleone
 
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评技术团队
 
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
Jerry Wen
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术Feng Yu
 
Nginx深度開發與客制化
Nginx深度開發與客制化Nginx深度開發與客制化
Nginx深度開發與客制化
Joshua Zhu
 
Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用
OpenRestyCon
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
Shengyou Fan
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
Kris Mok
 

Viewers also liked (18)

Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南来自 Google 的 r 语言编码风格指南
来自 Google 的 r 语言编码风格指南
 
J Query简介及入门指南
J Query简介及入门指南J Query简介及入门指南
J Query简介及入门指南
 
Ice
IceIce
Ice
 
Go语言学习指南
Go语言学习指南Go语言学习指南
Go语言学习指南
 
DSL简介
DSL简介DSL简介
DSL简介
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
王峰:阿里搜索实时流计算技术
王峰:阿里搜索实时流计算技术王峰:阿里搜索实时流计算技术
王峰:阿里搜索实时流计算技术
 
Ab test -互联网渐进式解决方案
Ab test -互联网渐进式解决方案Ab test -互联网渐进式解决方案
Ab test -互联网渐进式解决方案
 
iOS 10 HCI: Information Architecture
iOS 10 HCI: Information ArchitectureiOS 10 HCI: Information Architecture
iOS 10 HCI: Information Architecture
 
深入浅出Netty l.t
深入浅出Netty   l.t深入浅出Netty   l.t
深入浅出Netty l.t
 
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践美团点评沙龙012-从零到千万量级的实时物流平台架构实践
美团点评沙龙012-从零到千万量级的实时物流平台架构实践
 
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
BDTC2015 阿里巴巴-鄢志杰(智捷)-deep learning助力客服小二:数据技术及机器学习在客服中心的应用
 
Cpu高效编程技术
Cpu高效编程技术Cpu高效编程技术
Cpu高效编程技术
 
Nginx深度開發與客制化
Nginx深度開發與客制化Nginx深度開發與客制化
Nginx深度開發與客制化
 
Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用Nginx+lua在阿里巴巴的使用
Nginx+lua在阿里巴巴的使用
 
Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南Visual Studio Code 快速上手指南
Visual Studio Code 快速上手指南
 
Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)Java Crash分析(2012-05-10)
Java Crash分析(2012-05-10)
 

Similar to 8 彭立勳-double binlog方案

主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
jinqing zhu
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
mysqlops
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3redhat9
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
redhat9
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结redhat9
 
Phx sql设计与实现
Phx sql设计与实现Phx sql设计与实现
Phx sql设计与实现
Junchao Chen
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
XiaoJun Hong
 

Similar to 8 彭立勳-double binlog方案 (9)

主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3Bypat博客出品-服务器运维集群方法总结3
Bypat博客出品-服务器运维集群方法总结3
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结Bypat博客出品-服务器运维集群方法总结
Bypat博客出品-服务器运维集群方法总结
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 
Phx sql设计与实现
Phx sql设计与实现Phx sql设计与实现
Phx sql设计与实现
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 

More from Ivan Tu

7 吕智超-ssd101
7 吕智超-ssd1017 吕智超-ssd101
7 吕智超-ssd101
Ivan Tu
 
5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範
Ivan Tu
 
4 葉金榮-my sql優化 - 20151219
4 葉金榮-my sql優化 - 201512194 葉金榮-my sql優化 - 20151219
4 葉金榮-my sql優化 - 20151219
Ivan Tu
 
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
Ivan Tu
 
2 ivan ma-mysql複製的演進和應用-twn- v1
2 ivan ma-mysql複製的演進和應用-twn- v12 ivan ma-mysql複製的演進和應用-twn- v1
2 ivan ma-mysql複製的演進和應用-twn- v1
Ivan Tu
 
1 my sql20151219-kaji_ivan
1 my sql20151219-kaji_ivan1 my sql20151219-kaji_ivan
1 my sql20151219-kaji_ivan
Ivan Tu
 
My sql fabric webinar tw2
My sql fabric webinar tw2My sql fabric webinar tw2
My sql fabric webinar tw2Ivan Tu
 
My sql overview 2012 04-25 by scott chen - 30min - tw-1
My sql overview 2012 04-25 by scott chen - 30min - tw-1My sql overview 2012 04-25 by scott chen - 30min - tw-1
My sql overview 2012 04-25 by scott chen - 30min - tw-1Ivan Tu
 
My sql resources_april2012_zht
My sql resources_april2012_zhtMy sql resources_april2012_zht
My sql resources_april2012_zhtIvan Tu
 
My sql 56_roadmap_april2012_zht2
My sql 56_roadmap_april2012_zht2My sql 56_roadmap_april2012_zht2
My sql 56_roadmap_april2012_zht2Ivan Tu
 
My sql cluster_taipei_event
My sql cluster_taipei_eventMy sql cluster_taipei_event
My sql cluster_taipei_eventIvan Tu
 
My sql introduction for Bestcom
My sql introduction for BestcomMy sql introduction for Bestcom
My sql introduction for BestcomIvan Tu
 
My S Q L Introduction for 1 day training
My S Q L  Introduction for 1 day trainingMy S Q L  Introduction for 1 day training
My S Q L Introduction for 1 day trainingIvan Tu
 

More from Ivan Tu (13)

7 吕智超-ssd101
7 吕智超-ssd1017 吕智超-ssd101
7 吕智超-ssd101
 
5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範5 古雷my sql源碼與資料庫規範
5 古雷my sql源碼與資料庫規範
 
4 葉金榮-my sql優化 - 20151219
4 葉金榮-my sql優化 - 201512194 葉金榮-my sql優化 - 20151219
4 葉金榮-my sql優化 - 20151219
 
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
3 周彦偉-隨需而變 我所經歷的my sql架構變遷﹣周彥偉﹣acmug@2015.12台北
 
2 ivan ma-mysql複製的演進和應用-twn- v1
2 ivan ma-mysql複製的演進和應用-twn- v12 ivan ma-mysql複製的演進和應用-twn- v1
2 ivan ma-mysql複製的演進和應用-twn- v1
 
1 my sql20151219-kaji_ivan
1 my sql20151219-kaji_ivan1 my sql20151219-kaji_ivan
1 my sql20151219-kaji_ivan
 
My sql fabric webinar tw2
My sql fabric webinar tw2My sql fabric webinar tw2
My sql fabric webinar tw2
 
My sql overview 2012 04-25 by scott chen - 30min - tw-1
My sql overview 2012 04-25 by scott chen - 30min - tw-1My sql overview 2012 04-25 by scott chen - 30min - tw-1
My sql overview 2012 04-25 by scott chen - 30min - tw-1
 
My sql resources_april2012_zht
My sql resources_april2012_zhtMy sql resources_april2012_zht
My sql resources_april2012_zht
 
My sql 56_roadmap_april2012_zht2
My sql 56_roadmap_april2012_zht2My sql 56_roadmap_april2012_zht2
My sql 56_roadmap_april2012_zht2
 
My sql cluster_taipei_event
My sql cluster_taipei_eventMy sql cluster_taipei_event
My sql cluster_taipei_event
 
My sql introduction for Bestcom
My sql introduction for BestcomMy sql introduction for Bestcom
My sql introduction for Bestcom
 
My S Q L Introduction for 1 day training
My S Q L  Introduction for 1 day trainingMy S Q L  Introduction for 1 day training
My S Q L Introduction for 1 day training
 

8 彭立勳-double binlog方案