文档章节

Redis Cluster 运维总结

m
 moon888
发布于 2018/03/12 20:35
字数 885
阅读 462
收藏 6

集群总结:

1、Redis Cluster数据分区规则采用虚拟槽方式(16384个槽),每个节点负责一个部分槽和相关数据,实现数据和请求的负载均衡。

2、搭建集群划分四个步骤:准备节点、节点握手、分配槽、复制。redis-trib.rb工具用于快速搭建集群。

3、集群伸缩通过在节点之间移动槽和相关数据实现

- 扩展时根据槽迁移计划把槽从源节点迁移到新节点

- 收缩时如果下线的节点有负责的槽需要迁移到其他节点,在通过cluster forget命令让集群内所有节点忘记被下线节点

4、使用smart客户端操作集群达到通信效率最大化,客户端内部负责计算维护键值-> 槽 -> 节点的映射,用于快速定位到目标节点。

5、集群自动故障转移过程分为故障发现和节点恢复,节点下线分为主观下线和客户下线,当超过半数主节点认为故障节点为主观下线时标记它为客观下线状态。从节点负责对客观下线的主节点触发故障恢复流程,保证集群的可用性。

6、开发运维常见问题包括:超大规模集群带宽消耗、pub/sub广播问题,集群倾斜问题,单机和集群对比等。

 

思考-分布式Redis不一定好

1、Redis Cluster:满足容量和性能的扩展性,很多业务“不需要”

大多数是客户端性能会“降低”

命令无法跨节点使用:mget、keys、scan、flush、sinter等

Lua和事务无法跨节点使用

客户端维护更复杂:SDK和应用本身消耗(例如更多的连接池)

2、很多场景Redis Sentinel 已经足够好

 

 

1、节点和槽分配不均

redis-trib.rb info ip:port 查看节点、槽、键值分布

redis-trib.rb rebalance ip:port 进行均衡(谨慎使用)

2、不同槽对应键值数量差异较大

CRC16 正常情况下比较均匀

可能存在 hash_tag

cluster countkeysinslot {slot} 获取槽对应键值个数 

3、包含bikey

bigkey :例如大字符串、几百万的元素的hash、set等

从节点 :redis-cli --bigkeys

优化 :优化数据结构

4、请求倾斜

热点key:重要的key或者bigkey

优化:

避免bigkey

热键不要用hash_tag

当一致性不高时,可以用本地缓存 + MQ

5、集群读写分离

(1)只读链接:集群模式的从节点不接受任何读写请求

-重定向到负责槽的主节点

-readonly命令可以读:连接级别命令

(2)读写分离:更加复杂

- 同样的问题:复制延迟、读取过期数据、从节点故障

- 修改客户端:cluster slaves {nodeId}

6、离线/在线迁移

(1)官方迁移工具:redis-trib.rb import

- 只能从单机迁移到集群

- 不支持在线迁移:source需要停写

- 不支持断点续传

- 单线程迁移:影响速度

./redis-trib.rb import --form 127.0.0.1:6388 --copy 127.0.0.1:7000

(2)在线迁移

- 唯品会 redis-migrate-tool

- 豌豆荚:redis-port

7、集群限制

key批量操作支持有限:例如mget、mset必须在一个slot

key事物和Lua支持有限:操作的key必须在一个节点

key是数据分区的最小粒度:不支持bigkey分区

不支持多个数据库:几圈模式下只有一个db 0

复制只支持一层:不支持树形复制结构

© 著作权归作者所有

m
粉丝 10
博文 97
码字总数 36982
作品 0
程序员
私信 提问
Java开发——Redis云管理平台 实现方案CacheCloud 扫盲

本文简述一个redis云平台解决方案,该方案是搜狐TV云平台管理的解决方案CacheCloud ,感兴趣的可以持续关注我的发布。 一、CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多...

欧阳愠斐
2018/07/25
0
0
案例:Redis在唯品会的大规模应用

导读 目前在唯品会主要负责redis/hbase的运维和开发支持工作,也参与工具开发工作,本文是在Redis中国用户组给大家分享redis cluster的生产实践。 分享大纲 本次分享内容如下: 1、生产应用场...

问题终结者
02/21
134
0
搜狐视频Redis私有云平台CacheCloud

一、CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运...

linuxprobe16
2016/12/06
87
0
搜狐视频Redis私有云平台CacheCloud

一、CacheCloud是做什么的 CacheCloud提供一个Redis云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监控、运...

linuxprobe
2016/06/06
345
0
Redis 私有云平台--CacheCloud

一、CacheCloud 是做什么的 CacheCloud 提供一个 Redis 云管理平台:实现多种类型(Redis Standalone、Redis Sentinel、Redis Cluster)自动部署、解决Redis实例碎片化现象、提供完善统计、监...

carlosfu
2016/03/17
33.6K
7

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部