文档章节

RedisCluster 集群快速入门备忘

我爱吃炒鸡
 我爱吃炒鸡
发布于 02/15 15:56
字数 1528
阅读 76
收藏 0

[TOC]

RedisCluster 集群快速入门备忘

PS : 该教程基于Redis5.0+

Redis cluster集群需要注意:

  1. 可以线性扩张到1000个节点
  2. 节点使用P2P而非Proxy方式交互,牺牲了数据一致性.
  3. 客户端容忍一定程度的数据丢失
  4. 数据按照Slot存储分布在多个Redis实例上
  5. 集群节点挂掉会自动故障转移

需要知道:

所有的主节点对应到[0-16383]整数区间--槽道slot;各自的主节点维护一批槽道号(0-5000,5001-10000,10001-16383);

所以如果一条数据保存在0-5000的槽中,而此槽保存在节点1中,那么如果用户一直请求这条数据或者说在打这一条数据,此时的性能还不如单机Redis性能.

Redis集群的整体性能和单机这一块需要分清楚才能更好的在项目利用.

集群常用命令与配置

常用命令

# 下载Redis
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz

# 查看进程
$ ps -ef | grep redis 

# 连接到指定的节点(一定要加入-c,否则进入的就不是集群环境)
$ redis-cli -h 127.0.0.1 -p 7000 -c

# 创建集群(需要Redis位于启动状态)
# create : 创建集群
# --cluster-replicas 1 一台为副本机(备份机)如果数据冗余是1的话,至少要3个Master和3个Slave,共6台
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

# 追加节点
$ redis-cli --cluster add-node 127.0.0.1:7000 127.0.0.1:7001

# 查看集群状态(输入任意节点,即可会带出所有的节点状态)
$ redis-cli  --cluster check 127.0.0.1:7000

# 查看节点
$ redis-cli cluster nodes -h 127.0.0.1 -p 7000 -c

# 删除节点
$ redis-cli --cluster del-node 127.0.0.1:7000

# 关闭节点(关闭redis集群不能直接kill掉进程,否则无法保存数据,必须这样正常关闭)
$ redis-cli -h 127.0.0.1 -p 7000 shutdown

# 如果你不想混了可以这样关闭进程
ps -ef | grep redis | awk '{print $2}' | xargs kill

集群命令

Redis集群的命令
以下命令不需要redis-cli --cluster 而是redis-cli cluster即可

集群
  cluster info :打印集群的信息
  cluster nodes :列出集群当前已知的所有节点( node),以及这些节点的相关信息。


节点
  cluster meet <ip> <port> :将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
  cluster forget <node_id> :从集群中移除 node_id 指定的节点(保证空槽道)。
  cluster replicate <node_id> :将当前节点设置为 node_id 指定的节点的从节点。
  cluster saveconfig :将节点的配置文件保存到硬盘里面。


槽(slot)
  cluster addslots <slot> [slot ...] :将一个或多个槽( slot)指派( assign)给当前节点。
  cluster delslots <slot> [slot ...] :移除一个或多个槽对当前节点的指派。
  cluster flushslots :移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
  cluster setslot <slot> node <node_id> :将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给
  另一个节点,那么先让另一个节点删除该槽>,然后再进行指派。
  cluster setslot <slot> migrating <node_id> :将本节点的槽 slot 迁移到 node_id 指定的节点中。
  cluster setslot <slot> importing <node_id> :从 node_id 指定的节点中导入槽 slot 到本节点。
  cluster setslot <slot> stable :取消对槽 slot 的导入( import)或者迁移( migrate)。


键
  cluster keyslot <key> :计算键 key 应该被放置在哪个槽上。
  cluster countkeysinslot <slot> :返回槽 slot 目前包含的键值对数量。
  cluster getkeysinslot <slot> <count> :返回 count 个 slot 槽中的键 


集群配置

# 绑定登录的IP地址,别忘了注销咯,或者改成当前服务器的IP地址
# 注销后外部无法访问,本地测试就所谓了
bind 127.0.0.1
# 开启安全模式,一旦为yes上面就必须bind ip地址, 如果注释了上面的bind, 这里也要注释掉
# 否则平时无法用redis-cli -h 来远程访问该节点
protected-mode yes
# 监听的端口号
port 7000
# 以守护进程运行Redis
daemonize yes
# redis日志保存位置
logfile "./redis-7000.log"
# 设置库的数量,集群下只支持一个库
databases 16
# 开启AOF日志
appendonly yes

# 开启cluster集群
cluster-enabled yes
# 集群节点日志文件名
cluster-config-file nodes-7000.conf
# 集群节点同步超时时间 5s
cluster-node-timeout 5000
# 集群所有节点状态为ok才提供服务。建议设置为no,可以在slot没有全部分配的时候提供服务。
# 默认是yes,只要有结点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,所以一定要改为no
# 为no时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用,下面论证该情况。
# 为yes时,表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群不可用,下面论证该情况。
cluster-require-full-coverage no
# 在进行故障转移的时候全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了导致数据过于陈旧,不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor)+ repl-ping-slave-period如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移
cluster-slave-validity-factor 10  
# master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数被设为2,那么只有当一个主节点拥有2个可工作的从节点时,它的一个从节点才会尝试迁移。
cluster-migration-barrier 1

© 著作权归作者所有

我爱吃炒鸡

我爱吃炒鸡

粉丝 2
博文 154
码字总数 474880
作品 0
东城
高级程序员
私信 提问
加载中

评论(0)

Spring Boot + RedisCluster分布式问题

公司最近在做项目整改,框架用到了springboot,用redis做缓存,而且用rediscluster实现了redis的集群。如果做分布式,该怎么实现对redis操作的加锁解锁呢?问下各位大佬有什么比较好的方案?...

小虫625
2018/05/11
1.1K
0
JFinal 使用RedisCluster

@jFinal 如何集成RedisCluster

伟大可乐
2016/02/22
272
1
Springboot+RedisCluster配置+重写单机redis scan

Springboot配置RedisCLuster集群跟单机的玩法有很多不一样. 资源文件 redis:cache: 两个配置文件 @Component@Data@ConfigurationProperties(prefix = "redis.cache")public class RedisPrope......

算法之名
2018/10/07
1.7K
0
redis cluster jedis client 示例

redis cluster 基本的redis操作示例: JedisCluster jc = null; @Before public void before(){ Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); //Jedis Cluster will a......

zgw06629
2015/05/05
1.7W
0
Redis Cluster集群快速搭建

想在3分钟以内搭建一个Redis Cluster集群吗?说3分钟可能有点久,实际上好像不到一分钟就完成了Redis Cluster集群的搭建。 介绍 redis cluster是官方提供的一种集群方案,Redis-Cluster采用无...

艾贺521
2018/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 提高不了工作效率和脸有关系

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 1 《夏令时记录(piano.ver)》- ゆめこ 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
67
2
List的一波操作

public static void main(String[] args) { List<Entity> list = new ArrayList<>(); list.add(new Entity(1)); list.add(new Entity(2)); list.add(new Entity(3)); ......

那个猩猩很亮
今天
75
0
Spring基础

主要用于service层; 轻量级java开发框架; 各层 web层:struts,spring-MVC service层:spring dao层:hibernate,mybatis , jdbcTemplate --> spring-data Spring核心:控制反转IOC 切面编...

七宝1
今天
30
0
解决overflow+border-radius+transform圆角问题

网上还有其他版本,但是对我来说都不好使,下面是我在Chrome上的代码。overflow:hidden依然是不能正常使用,换成unset就可以,读者如果有更好的解决方案,请留言,谢谢。 <figure> <img...

hi懒喵
今天
53
0
《C语言》—— 数组

书籍使我变成了一个幸福的人,使我的生活变成轻松而舒适的诗。——高尔基 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 点关注,不迷路!...

龙跃十二
今天
84
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部