v 下载Redis-x64-3.2.100.zip
Windows版本下载:https://github.com/MicrosoftArchive/redis/tags
v 修改redis.windows.conf配置文件支持集群
Redis-x64-3.2.100.zip解压为Redis-x64-3.2.100目录,把配置文件中的属性修改成以下配置,port改成你想要的端口,我这里使用7000、7001、7002、7003、7004、7005六个端口演示。其中cluster-enabled指开启集群模式, cluster-conf-file 设定保存节点配置文件的路径, 默认值为 nodes.conf,节点配置文件无须人为修改, 它由 Redis 集群在启动时创建, 并在有需要时自动进行更新。要让集群正常运作至少需要三个主节点,现在使用六个节点: 其中三个为主节点, 而其余三个则是各个主节点的从节点。
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
v 创建6个redis实例
在桌面C:\Users\sun\Desktop创建cluster-redis目录,复制6份上面Redis-x64-3.2.100目录到cluster-redis目录并分别重命名为端口名7000、7001、7002、7003、7004、7005方便区分,到各个目录修改redis.windows.conf的端口port和cluster-config-file值要加上端口(例如nodes-7000.conf),并分别在7000、7001、7002、7003、7004、7005下创建startup.bat文件,方便启动redis,双击就可以启动redis实例。
例如7000目录startup.bat的内容:
cd C:\Users\sun\Desktop\cluster-redis\7000\
redis-server.exe redis.windows.conf
分别到7000、7001、7002、7003、7004、7005双击运行startup.bat文件就可以启动6个redis实例。
v 使用 Redis集群命令行工具 redis-trib创建新集群, 检查集群, 或者对集群进行重新分片(reshared)等工作。
(1)下载Ruby
redis-trib是一个 Ruby 程序,所以要安装Ruby,我下载rubyinstaller-2.7.0-1-x64.exe
下载地址:https://rubyinstaller.org/downloads/
(2)安装Ruby,默认下一步即可。
(3)下载rubygems
下载地址:https://rubygems.org/pages/download,我下的是压缩包zip:rubygems-3.1.2.zip。
我解压到D:\download\rubygems-3.1.2,命令窗口切换到D:\download\rubygems-3.1.2下执行:
ruby setup.rb
(4)Redis集群需要通过gem install redis来安装相关依赖,定位到C:\Users\sun\Desktop\cluster-redis目录执行:gem install redis
成功的打印结果:
C:\Users\sun\Desktop\cluster-redis>gem install redis
Fetching redis-4.1.3.gem
Successfully installed redis-4.1.3
Parsing documentation for redis-4.1.3
Installing ri documentation for redis-4.1.3
Done installing documentation for redis after 1 seconds
1 gem installed
(5)下载redis-trib.rb文件
下载地址:https://github.com/beebol/redis-trib.rb
我放到C:\Users\sun\Desktop\cluster-redis目录下
(6)创建集群,在C:\Users\sun\Desktop\cluster-redis目录下执行:
ruby 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
中途要输入yes回车即可。
Redis集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽.集群的每个主节点负责一部分hash槽。
从下面创建集群时打印结果可以看到:
7000包含0到5460号哈希槽,7003是7000的从节点
7001包含5461到10922号哈希槽,7004是7001的从节点
7002包含10923到16383号哈希槽,7005是7002的从节点
v 测试
1.使用7000实例的客户工具添加key7000,值为7000,值放到6769哈希槽
C:\Users\sun\Desktop\cluster-redis\7000>redis-cli.exe -c -h 127.0.0.1 -p 7000
127.0.0.1:7000> set key7000 7000
-> Redirected to slot [6769] located at 127.0.0.1:7001
OK
2.使用7001实例的客户工具添加key7001,值为7001,值放到2640哈希槽
C:\Users\sun\Desktop\cluster-redis\7001>redis-cli.exe -c -h 127.0.0.1 -p 7001
127.0.0.1:7001> set key7001 7001
-> Redirected to slot [2640] located at 127.0.0.1:7000
OK
3.使用7001实例的客户工具从6769哈希槽中获取key7000和从2640哈希槽中获取key7001
127.0.0.1:7000> get key7000
-> Redirected to slot [6769] located at 127.0.0.1:7001
"7000"
127.0.0.1:7001> get key7001
-> Redirected to slot [2640] located at 127.0.0.1:7000
"7001"
结论:
无论客户端连接哪个redis实例,集群都会根据保存的key的哈希值存到响应的哈希槽中,不一定存储在所连接的redis实例中。获取值得时候也是根据key的哈希值去相应的哈希槽中读取。