饿了么zk多活方案

1.zookeeper簡介2.多活下的挑戰3.方案&組件簡介4.難點解析5.運維技巧 zookeeper簡介 高可靠的分佈式協調服務,為分佈式⽽⽣ 使⽤場景:數據發布訂閱(配置管理),命名服務,集群管理,分佈式鎖等⼀一個帶通知功能的存儲! 使⽤zab協議(改進版/簡化版的Paxos協議)廣泛應⽤在大數據,微服等場景下 hadoop kafka storm dubbo等
展开查看详情

1.zookeeper多活實踐 主講⼈人:趙⼦子明 2017.08.11

2. 餓了了麼簡介 願景:以創新科技打造全球領先的本地⽣生活平台 主營業務:外賣、商超、即時配送、餐飲供應鍊鍊等 業務覆蓋城市/地區:2000+ C端⽤用⼾戶: 2.6億 B端商家: 130萬 註冊配送員:300萬 訂單量量:千萬級

3.Make Everything 30’

4.目錄: 1.zookeeper簡介 2.多活下的挑戰 3.⽅方案&組件簡介 4.難點解析 5.運維技巧

5. zookeeper簡介 ⾼高可靠的分佈式協調服務,為分佈式⽽而⽣生 使⽤用zab協議(改進版/簡化版的Paxos協議) 使⽤用場景:數數據發布訂閱(配置管理理),命名服務,集群管理理,分佈式鎖等 廣泛應⽤用在⼤大數數據,微服務等場景下 hadoop kafka storm dubbo等 ⼀一個帶通知功能的存儲!

6.集群需要奇數數節點 ⼀一個事務需n/2+1節點投票 Quorum 必須超過⼀一半多機器器可⽤用,集群才可⽤用

7. /serviceA IP1 IP2 服务注册中⼼心(zookeeper) 2.獲取服務註冊信息 監聽變化 1.註冊服務信息 4.變更更通知 服务消费者 服务提供者 3.調⽤用服務 服務註冊發現:餓了了麼zookeeper最重要的使⽤用場景

8. 餓了麼多活 異異地多機房數數據分⽚片+按POI做流量量分發,隨時可容災切換 數數據:多寫+實時雙向複製 流量量:按POI做流量量分發+可全局切換 服務:每個機房提供完整交易易服務鏈路路,機房內調⽤用閉環 萬台服務器器,千個⼯工程師

9. 多活概覽 API Gateway A机房 B机房 ezone1 ezone2 交易易服务集群 sharding1 sharding1 交易易服务集群 调⽤用闭环 调⽤用闭环 sharding2 sharding2 global zone 服务(写) 服务(读) master slave

10. 多活下的服務調用 A机房 B机房 ServiceA Proxy GZS Proxy ServiceB ServiceB 核⼼心交易易鏈路路服務調⽤用閉環(下單) 其他服務跨機房調⽤用(⽤用⼾戶積分)

11. 多活對zookeeper的要求 任何⼀一个机房出问题,其他机房内zookeeper可⽤用(超過⼀一半多機器器 可⽤用連接),服务可调⽤用! 正常情況下可以跨機房調⽤用

12.Zookeeper常⽤用部署⽅方案在多活中有什什麼問題?

13.常⽤用部署⽅方案: 1.主機房voter 其他機房observer 2.多機房voter 3.多機房多集群 注: voter是參參與投票的節點(leader/follower)

14. voter+observer部署方案 B机房 A机房 ob1 voter1 C机房 ob2 ob4 voter2 ob3 ob5 voter3 ob6

15.問題 : 寫延遲適中(事務只在⼀一個機房投票完成) observer機器器讀延時⼤大 voter所在機房有問題,其他所有機房zookeeper 都不不可⽤用

16. 多voter部署方案 A机房 B机房 C机房 voter1 voter4 voter6 voter2 voter5 voter7 voter3 N1=(N-1)/2 N2= 1~(N-N1)/2 N3=N-N1-N2 3 2 2 ⼀一個機房有問題,其他兩個機房超過⼀一半機器器連接,服務可⽤用

17.問題: 寫延遲⼤大(事務需在多個機房間投票完成) 個別機房讀延遲⼤大 ⼀一個機房掛掉或網絡問題,其他兩個機房可⽤用

18.我們需要可⽤用性更更⾼高的⽅方案!

19. zookeeper多活方案 A机房 B机房 voter1 voter1’ voter2 voter2’ voter3 voter3’ 優先保證機房內部可⽤用 多機房獨⽴立集群+數數據雙向同步

20. 组件简介 zk(B1) zk(B2) zk(B3) zk(A1) zk(A2) zk(A3) B机房 zk(Publisher) A机房 replicator MQ

21. publisher publisher 在zookeeper observer基礎上擴展 observer 接收leader發來來的事務並發送到mq中 mq pub

22. replicator zk(sid=1) zk(sid=2) 消費消息+寫⼊入zookeeper 可訂閱多個topic zkclient zkclient 只寫到固定機器器上 sub1 sub2 ⽬目標zookeeper需要配置超級權限 topic1 topic2

23. MQ B机房 和publisher同機房部署,跨机房sub sub 選運維同學熟悉的mq ⽀支持持久化 A机房 pub MQ C机房 sub

24.這個方案(組件)第一大難點: 循環複製

25. Txn1 DataBaseA DataBaseB Txn1’

26. 午休帶來了靈感:找到標識過濾 app zk4(L) zk3(F) zk2(O) zk1(O) zk1(O) zk2(O) zk3(F) zk4(L) zk(Publisher) replicator replicator zk(Publisher) sid>2 sid>2 MQ MQ 根據sessionId中的機器器號區分內外數數據

27.第二大難點: 事務連續性 超過500條,觸發leader -> publisher之間內存鏡像全量量同步,會丟失中間狀狀態!

28. Quorum歸併方案 zk1 zk2 zk3 log log log log log log 归并 MQ publisher

29. 運維技巧 連接串串 Domain > IP(切換⽅方便便) 最多5個節點,擴容⽤用observer 無影響集群擴容:⼀一台台增加myid ⾼高於voter集群的observer