京東云開發者|京東云RDS數據遷移常見場景攻略( 二 )


14 源端目標端版本必須一致嗎?
數據遷移要求兩邊版本一致;數據同步目前支持低->高版本遷移 。
場景二:異地災備用戶經常會對數據有異地災備的需求,京東云目前提供了兩種方式 , 一種是可以配置跨地域備份同步,如下圖:

京東云開發者|京東云RDS數據遷移常見場景攻略

文章插圖
這種方式簡單免費,會定期將最新備份同步到異地,缺點是數據是非實時的,如果災備恢復會有數據丟失 。
另外一種方案是災備同步(目前暫只支持MySQL),可以在京東云控制臺創建一個異地災備實例 , 然后利用DTS的數據同步功能將災備實例和源實例進行數據同步,同步方式選擇災備同步 。和普通同步機制不同,災備同步利用的是MySQL的原生復制 , 因此災備實例和源實例是完全一致的,相當于一個異地的只讀實例,這樣就可以達到異地災備的目的 。
對于災備實例 , 有幾點需要注意:
  • 災備實例目前只支持和京東云MySQL進行同步,暫不支持自建或第三方云實例 。
  • 災備實例無法進行變配/重啟/主從切換等操作,需要提前選好規格 。
  • 災備實例也是主從實例 , 可以讀但無法進行寫操作,類似異地只讀實例 , 可以手工提升為主備實例 。
  • 災備實例是基于dts同步的,一旦手工結束同步,災備實例將自動提升為普通主備實例 。
場景三:數據訂閱很多業務場景都會用到數據訂閱,比如訂閱數據到ES擴展搜索、上下游訂閱價格變更/服務通知、多業務庫數據合并/構建寬表等 。京東云提供了數據訂閱功能來滿足類似需求,目前源端支持MySQL/Percona/MariaDB/PostgreSQL,目標端僅支持Kafka 。
目標端使用json格式記錄訂閱信息,下面是一個update操作的例子:
{"version": "0.1","database": "dbtest","table": "t1","type": "update","ts": 1582617997,"time_zone": "Asia/Shanghai","host": "mysql-internet-cn-north-1-c52cb616874d4d29.rds.jdcloud.com","data": {"created": "2020-02-25 16:01:46","flag": "10691","info": "dts_test","pkid": "11663","uuid": "11cae53d-57a5-11ea-98a6-fa163ea31339"},"old": {"created": "2020-02-25 16:01:46","flag": "10691","info": null,"pkid": "11663","uuid": "11cae53d-57a5-11ea-98a6-fa163ea31339"},"pks": {"pkid": "11663"}}數據訂閱有幾點需要注意:
  • 訂閱的消息長度如果超過中間件的最大消息長度,消息將被丟棄,因此理論上會有丟失數據風險 。
  • 目標端接受的數據起點默認為訂閱的實時時間點,如果需要全量訂閱可以聯系京東云技服人員 。
場景四:自建MySQL和云上MySQL相互復制用戶經常有這樣的需求,是否可以用自建MySQL來同步云上MySQL?或者反過來,是否可以云上MySQL作為自建MySQL的從庫來滿足某些場景?
  • 從MySQL復制機制來看,理論上應該都是可以的,但京東云的賬號不支持賦予super權限,無法執行change master操作,所以云上MySQL無法作為自建MySQL的從庫 。
  • 反過來,自建MySQL可以有super權限,是可以作為云上MySQL的從庫 。但這個是非標準操作,并不建議用戶使用 。主要原因是在某些情況下,會造成復制中斷 。比如云上MySQL配置變更后需要主從切換,而此時自建從庫和切換前的源主庫有復制延遲 , 部分binlog還未傳遞到自建從庫,此時主從切換后復新主庫由于沒有這些binlog,會造成自建從庫報1236的錯誤 。針對這種情況,用戶可以在擴容時選擇延遲切換,可以避開業務高峰,在一定程度上避免類似問題 。
作者:翟振興
【京東云開發者|京東云RDS數據遷移常見場景攻略】

推薦閱讀