Windows 平台 Redis Cluster 集群模式的坑

本贴最后更新于 1789 天前,其中的信息可能已经事过景迁

cover

在一台迷の Windows 机器上搭建了一个单节点模拟的三主三从 redis 集群,过程中有一些坑记录下。

cluster 模式

Redis 的 Cluster 模式工作至少需要三个主节点,所以一般采用三主三从实现负载。

较理想的环境是一个实例单节点部署主从,多个实例实现集群。

集群架构

由于 Redis Cluster 采用哈希分区规则,哈希分区一般有以下几种方式:

  1. 节点取余分区
  2. 一致性哈希分区
  3. 虚拟槽分区

其中 Redis Cluster 就是采用虚拟槽分区,虚拟分区也是利用哈希空间,使用分散使用分散度良好的哈希函数把所有 数据映射到一个固定范围的整数集合中,整数定义为槽(slot)。这个范围一般远远大于节点数,比如 Redis Cluster 槽范围是 0~16383。槽是集群内数据 管理和迁移的基本单位。采用大范围槽的主要目的是为了方便数据拆分和集群扩展。每个节点会负责一定数量的槽。

假设当前集群有 5 个节点,每个节点平均大约负责 3276 个槽。由于采用高质量的哈希算法,每个槽所映射的数据通常比较均匀,将数据平均划分到 5 个节点进行数据分区。

修改集群的配置文件

一般 redis.windows.conf 中有以下需要修改:

  1. port:端口号,三主三从的集群,由于是一台机器,需要 6 个进程模拟,所以端口号也需要 6 个,可以从 7001~7006;
  2. cluster-enabledyes 表示开启集群模式,存储方式 aof,会将写操作记录到日志中。
  3. cluster-config-file:定义一个文件,节点配置的一些信息,节点握手 🤝、连接时间戳这些都保存在一个配置文件中,由 redis 创建和更新。每个集群节点都需要不用饿集群配置文件。
  4. cluster-node-timeout:集群超时时间,单位毫秒,节点超过这个时间,依然无法建议通讯就可以判断是宕机了,如果可以的话需要启动从节点选举成主节点的机制。
  5. bind:绑定本机网卡的 ip 地址,这个比较重要,如果 bind 127.0.0.1 的话,即使集群所在的 ip 可达,外部服务不在同一 ip 下的话,是无法建立连接的。所以一般可以使用 ipconfig 或者 ifconfig 查看网卡的情况,选择合适的可达 ip 进行绑定。

遇到的坑

  • 用 redis-trib.rb 搭建集群

redis-trib.rb 是采用 Ruby 实现的 Redis 集群管理工具。内部通过 Cluster 相 关命令帮我们简化集群创建、检查、槽迁移和均衡等常见运维操作,使用之前需要安装 Ruby 依赖环境。但是网上的很多教程 redis-trib.rb 已经失效的,版本和 Ruby 环境不匹配。如果发现无法使用的话,请去 GitHub 的这个地址。Linux 环境在安装完 rubygem redis 依赖之后可以执行以下命令来安装 redis-trib.rb

sudo cp /{redis_home}/src/redis-trib.rb /usr/local/bin
  • 登陆到集群上之后执行 set key value 命令之后可能会提示“Redirected to solt [xxxx] located at ip:port”并且跳转到其他节点

因为分片的机制,这个提示的意思是该 key 根据哈希算法得到 slot 是 xxxx,这个 slot 应该分配在 xxxx 的所属区间,而不是当前节点,或者当前登陆的是 salve 节点,所以可能就会跳转到对应的 master 节点上。

  • You should use redis-cli instead

如果出现这个提示,表明原本的命令失效了,可以使用 redis-cli 命令

./redis-cli --cluster create masterIp:masterPort ...
  • can't connect to redis-server

首先先确认你的 Redis 集群服务开启了没,然后判断是否是密码的问题,最可能的还是配置文件 bind 填写的问题,假如没有部署在一个 ip 下的话,是否写成了 bind 127.0.0.1

  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 49 关注
  • 集群
    29 引用 • 65 回帖 • 1 关注
  • 缓存
    42 引用 • 70 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...