携程redis多数据中心实践

本文介绍了携程redis多数据中心数据复制,高可用性和机房切换的解决方案
展开查看详情

1.孟文超

2.

3.S oftw are Load B alance

4. Redis  支持多种数据结构  高性能、高可用  携程使用情况  2000多组实例  每秒访问量200万(写入10万)

5. 多数据中心  Redis多数据中心?  业务压力  Cache  高可用  内存数据库  多数据中心阶段  备份  双活  多活

6. 数据复制  机房切换  一致性  反向复制  实时性  高可用  复制高可用  redis failover

7. console zookeeper zookeeper zookeeper zookeeper zookeeper zookeeper m eta server m eta server senti nel senti nel senti nel senti nel senti nel sentinel m aster keeper keeper keeper keeper slave slave slave slave X -P ipe O thers

8. Console  元信息配置、监控、报警  Meta Server  Keeper Leader选举、状态切换  HA  Keeper  Redis replication log数据管理  Zookeeper  Meta server集群协调

9. 数据复制  机房切换  一致性  反向复制  实时性  高可用  复制高可用  redis failover

10. redis redis w rite w rite client1 client2 client client3

11.redis redis W rite W rite proxy W rite client

12. 多个redis写同时成功?  特殊命令处理  系统时间相关  time  随机数  randomkey

13.

14. runid  redis运行时生成随机id  重启之后变化  标记唯一的redis进程 Head  RDB  redis内存数据映像  可以导出到磁盘 ring buffer  replication log(复制日志)  增量命令日志 Tail  内存  Ring buffer  replication log offset(复制日志偏移量)  redis启动时设置  随着写入命令增加而增加

15.slave com m ands m aster com m ands client

16. 初次(全量同步)  PSYNC ? -1  FULLSYNC masterrunid offset  master导出rdb,向slave传输  slave接收rdb完成,加载数据至内存 (无法对外提供服务)  向slave传输replication log  Slave不可用时间  10GB内存1-2min

17. 网络中断,重连(增量同步成功)  PSYNC masterrunid currentOffset  CONTINUE  网络中断,重连(增量成功失败)  复制日志缺失  masterrunid不一致

18.Ring buffer复制日志有限 Master压力,多数据中心带宽

19.

20.

21. 磁盘缓存log数据  多机房Log server—log server数据传输  数据中心内redis通过log server获取数据  数据中心之间通过keeper复制  压缩  Replication log server  命名:keeper

22. 测试  5w QPS, value 100字节  测试结果  master->slave 0.2ms  master->keeper->slave 0.3ms  跨机房延时  同城几毫秒  异地十几、几十毫秒

23. 实现方案  流式处理  减少gc  Netty(pooled direct memory)  操作系统(ZeroCopy)  通知  JDK  AbstractQueuedSynchronizer  (volatile long)

24. 数据复制  机房切换  一致性  反向复制  实时性  高可用  复制高可用  redis failover

25.主备切换 runid相同 offset相同

26. 功能  keeper主备选举  Keeper主备用(active/backup)  keeper管理  增加、删除  多个meta server分片,负责不同的redis实例  meta server挂,负责的分片迁移  Zookeeper  Meta server leader选举  Meta server分片信息存储

27.

28. Sentinel  高可用性解决方案  流程  Sentinel选择一个slave(node2)为新的master  Sentinel提升node2为master  Keeper从新的master(node2)复制数据  全量同步

29. redis无全局offset  官方解决方案https://gist.github.com/antirez/ae068f95c0d084891305  全局replication id  尚未实现  Slave同步速度不一致  同步慢的slave被提升为master