- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
携程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