一, Redis Cluster 集群简介
Redis Cluster 是 Redis 官方提供的分布式解决方案, 在 3.0 版本后推出的, 有效地解决了 Redis 分布式的需求, 当一个节点挂了可以快速的切换到另一个节点, 当遇到单机内存, 并发等瓶颈时, 可以采用分布式方案要解决问题.
二, 集群原理
Redis Cluster 架构图
Redis Cluster 集群采用了 P2P 的模式, 完全去中心化, Redis 把所有的 Key 分成了 16384 个 slot, 每个 Redis 实例负责其中一部分 slot, 集群中的所有信息 (节点, 端口, slot 等), 都通过节点之间定期的数据交换而更新, Redis 客户端可以在任意一个 Redis 实例发出请求, 如果所需数据不在该实例中, 通过重定向命令引导客户端访问所需的实例.
其结构特点:
所有的 Redis 节点彼此互联 (PING-PONG 机制), 内部使用二进制协议优化传输速度和带宽.
节点的 fail 是通过集群中超过半数的节点检测失效时才生效.
客户端与 Redis 节点直连, 不需要中间 proxy 层. 客户端不需要连接集群所有节点, 连接集群中任何一个可用节点即可.
Redis-cluster 把所有的物理节点映射到 [0-16383]slot 上 (不一定是平均分配),cluster 负责维护 node<->slot<->value.
Redis 集群预分好 16384 个桶, 当需要在 Redis 集群中放置一个 key-value 时, 根据 CRC16(key) mod 16384 的值, 决定将一个 key 放到哪个桶中.
三, 集群搭建
要让集群正常工作至少需要 3 个主节点, 一共就需要 6 个节点, 其中 3 个为主节点, 3 个为从节点, 为了简单在下面在一台机器上演示, 演示使用了 Linux 服务器上 7000 到 7005 的 6 个端口.
下载 Redis, 解压, 安装
- wget http://download.redis.io/releases/redis-3.2.4.tar.gz
- tar -zxvf Redis-3.2.4.tar.gz
- cd Redis-3.2.4/
- make && make install
将 Redis-trib.rb 复制到 / usr/local/bin 目录下
- cd src
- cp Redis-trib.rb /usr/local/bin
创建 Redis 节点并修改配置文件
- mkdir redis_cluster
- cd redis_cluster/
- mkdir 7000 7001 7002 7003 7004 7005
- cp Redis.conf redis_cluster/7000
- cp Redis.conf redis_cluster/7001
- cp Redis.conf redis_cluster/7002
- cp Redis.conf redis_cluster/7003
- cp Redis.conf redis_cluster/7004
- cp Redis.conf redis_cluster/7005
按下面提示修改 6 个配置文件
port 7000 // 端口 7000,7001,7002...
bind 本机 ip // 默认 ip 为 127.0.0.1 需要改为其他节点机器可访问的 ip 否则创建集群时无法访问对应的端口, 无法创建集群
- daemonize yes //Redis 后台运行
- pidfile /var/run/redis_7000.pid //pidfile 文件对应 7000,7001,7002
- cluster-enabled yes // 开启集群 把注释 #去掉
- cluster-config-file nodes.conf // 集群的配置 配置文件首次启动自动生成
- cluster-node-timeout 15000 // 请求超时 默认 15 秒, 可自行设置
- appendonly yes //aof 日志开启 有需要就开启, 它会每次写操作都记录一条日志
- dir /root/Redis-3.2.4/redis_cluster/7000 // 目录, 端口 7000,7001,7002... , 必须配置, 否则无法启动
启动 6 个 Redis 实例, 并且要指定配置文件, 这些配置文件分别在各自的子目录下面
- ./src/Redis-server redis_cluster/7000/Redis.conf
- ./src/Redis-server redis_cluster/7001/Redis.conf
- ./src/Redis-server redis_cluster/7002/Redis.conf
- ./src/Redis-server redis_cluster/7003/Redis.conf
- ./src/Redis-server redis_cluster/7004/Redis.conf
- ./src/Redis-server redis_cluster/7005/Redis.conf
安装 Ruby
- yum install Ruby
- yum install -y RubyGems
- Gem install Redis -v 3.2.2
使用 Redis-trib.rb 创建集群
- cd /usr/local/bin
- ./Redis-trib.rb create --replicas 1 192.168.0.204:7000 192.168.0.204:7001 192.168.0.204:7002 192.168.0.204:7003 192.168.0.204:7004 192.168.0.204:7005
运行结果如下:
Redis Cluster 启动成功截图
如果一切顺利, 你会看到类似截图上的消息: [OK] All 16384 slots covered, 这说明 Redis 的 Cluster 集群环境搭建成功.
简单解释一下这个命令: 调用 Ruby 命令来进行创建集群,--replicas 1 表示主从节点比例为 1:1, 即一个主节点对应一个从节点; 然后, 默认给我们分配好了每个主节点和对应从节点服务, 以及 solt 的大小, 因为在 Redis 集群中有且仅有 16383 个 solt, 默认情况会给我们平均分配, 当然你可以指定, 后续的增减节点也可以重新分配.
M: 5237fa04bd793832b605d92ceb1d2f493da22e43 为主节点 Id
S: b6b696c11bbffa8f9d4e6397ef4d27b0b54fea32 192.168.0.204:7003 replicates 5237fa04bd793832b605d92ceb1d2f493da22e43 从节点下对应主节点 Id
目前来看, 7000-7002 为主节点, 7003-7005 为从节点, 并向你确认是否同意这么配置, 输入 yes 后, 会开始集群创建.
四, 验证集群
通过 Cluster Nodes 命令和 Cluster Info 命令来看看集群效果
- ./Redis-cli -c -h 192.168.0.204 -p 7001
- cluster info
- cluster nodes
运行结果如下:
运行成功截图
在集群上通过增加数据来测试集群效果
运行结果如下:
测试集群截图
下面的是我的公众号二维码图片, 欢迎关注, 欢迎留言, 一起学习, 一起进步.
Java 碎碎念公众号
来源: https://www.cnblogs.com/haha12/p/10480534.html