Redis集群
Redis cluster(redis集群)是在版本3.0后才支持的架构,和其他集群一样,都是为了解决单台服务器不够用的情况,也防止了主服务器宕机无备用服务器,多个节点网络互联数据共享,所有节点都是一主一从(也可以一主多从),其中不提供服务,只做为备份。直接进入主题。
所需软件
注意:版本不对应 可能会造成错误,我才疏学浅还没发现为什么会报错。强烈建议用本文中指定的版本!!
-
Redis: 地址 https://github.com/MSOpenTech/redis/releases 下载Redis-x64-3.2.100.zip
-
Ruby语言运行环境:http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.3.3.exe
-
Redis-trib.rb 下载 https://raw.githubusercontent.com/antirez/redis/unstable/src/redis-trib.rb(打开是网页,右键另存为redis-trib.rb )
-
Rubygems Redis 的 Ruby 支持环境 https://rubygems.org/rubygems/rubygems-2.6.12.zip
安装开始
- 在redis目录下创建6个节点的文件夹:7001-7006(要让集群正常运作,至少需要三个主节点,因此我们创建6个节点,三个主节点三个从节点。)
- 将下载好的Redis-x64-3.2.100.zip解压后的文件夹里的所有文件分别copy到7001-7006文件夹中
- 修改6个文件夹下redis.windows.conf 文件配置如下图,全部配置好之后启动所有redis节点,为了方便起见可以写一个脚本启动!
# 配置允许访问的ip 四个0代表所有
bind 0.0.0.0
# 默认为yes ,这里为no,此时外部网络可以直接访问
protected-mode no
# 端口 可以根据刚才新建的文件夹命名7001-7006
port 7001
# 设置redis最大内存 建议master节点设置大一点 slave设置小 这个取决于你的机器内存大小
maxmemory 1024m
# 设置内存淘汰策略
maxmemory-policy allkeys-lru
# 开启aof持久化
appendonly yes
# 设置aof持久化文件名
appendfilename "appendonly-7001.aof"
# 开启集群
cluster-enabled yes
# 集群节点配置文件
cluster-config-file nodes-7001.conf
# 集群节点超时时限
cluster-node-timeout 15000
注意:如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-node-timeout 调整为 15000,那么在创建集群的时候,不会超时。 cluster-config-file
nodes-7001.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
RubyInstaller 安装
打开exe文件,下一步安装就行了。注意把三项全部勾选。
Rubygems 安装
将下载好的rubygems-2.6.12.zip解压,
解压后,运行文件setup.rb。
执行 gem install redis 安装 Redis 依赖。
使用Redis cluster
创建集群
执行以下命令
redis-trib.rb create --replicas 1 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
命令分析:
1)redis-trib.rb create:表示希望创建一个新的集群。
2)replicas 1:表示为集群中的每个主节点创建一个从节点。后面其他参数表示实例的地址列表, 即:程序将使用这些地址所指示的实例来创建新集群。(节点角色由顺序决定,先master之后是slave。)
执行命令后,首先打印出配置信息。上图表示:
1)使用7000、7001、7002作为主节点。
2)主从节点的对应关系。
3)各节点对应的 slots 范围。
例如 7000 这台机 slots : 0-5460 的意思是:
若 key 进行 CRC16 校验和的值介于 0-5460 范围内,则被存储至7000。
因此,使用前应对业务进行梳理,根据系统中 key 的特点来调整各个机器的slots范围,以避免 key 集中于部分机器上,以致集群的效果不大。
确认配置信息后,输入 yes 并回车确认, 集群将配置应用到各个节点, 并连接起(join)各个节点 —— 也即是, 让各个节点开始互相通讯。
配置成功后,redis-trib 将输出以下信息:
这表示集群中的 16384 个槽都有至少一个主节点在处理, 集群运作正常。
创建成功后,nodes-*.conf 将存储 master 和 slave 的对应关系。以 nodes-7000.conf 为例:
上图表示:当前节点(127.0.0.1:7000)节点ID:cb4ea842827dd927058ec5b3abd516f35c697006,主节点,节点编号为1,对应 slots 的范围:0-5460,对应的从节点:127.0.0.1:7003。
进入集群环境
进去随便一个redis目录cmd运行
redis-cli -c -p 7001
测试
1、检查集群状态
C:\Redis> redis-trib.rb check 127.0.0.1:7001
若输出上述信息,则表示集群启动成功并处于ok状态。
2、从port 7003 set一个值,并从port 7005 get出来