1. 所需软件
Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxxx.gem、创建Redis集群的工具redis-trib.rb
2.安装配置redis
下载Redis-x64-3.2.100.zip,这里不作多解析了,自己去官网找。
把集群规划有三个节点的集群,每个节点有一主一备。理论需要6台虚拟机,实际可以通过不同端口模拟虚拟机,这里就通过端口模拟,搭建 伪集群。
把 redis 解压后,再复制出 5 份,配置 三主三从集群。 由于 redis 默认端口号为 6379,那么其它5份的端口可以为6380,6381,6382,6383,6384。 并且把目录使用端口号命名。
打开目录6379下有一个文件 redis.windows.conf,修改里面的端口号,以及集群支持配置。
修改其他配置支持集群
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes
如果cluster-enabled 不为yes, 那么在使用JedisCluster集群代码获取的时候,会报错。
cluster-node-timeout 调整为 15000,那么在创建集群的时候,不会超时。
cluster-config-file nodes-6379.conf 是为该节点的配置信息,这里使用 nodes-端口.conf命名方法。服务启动后会在目录生成该文件。
编写一个 bat 来启动 redis,在每个节点目录下建立 启动脚本,如第一个命名为:redis6379.start.bat,第二个脚本redis6380.start.bat,以此类推,都添加如下内容:
title redis-6380
redis-server.exe redis.windows.conf
这样就可以带配置文件启动一个redis实例,但是这样我们有6个redis实例,所以我们可以再写一个命名为redis.start.bat的总启动脚本来一次性启动刚才每个实例添加的脚本,总脚本内容如下:
start cmd /k "g: && cd g:\redisCluster\6379 && redis6379.start.bat.bat"
start cmd /k "g: && cd g:\redisCluster\6380 && redis6380.start.bat.bat"
start cmd /k "g: && cd g:\redisCluster\6381 && redis6381.start.bat.bat"
start cmd /k "g: && cd g:\redisCluster\6382 && redis6381.start.bat.bat"
start cmd /k "g: && cd g:\redisCluster\6383 && redis6383.start.bat.bat"
start cmd /k "g: && cd g:\redisCluster\6384 && redis6384.start.bat.bat"
有兴趣的可以百度windows的start或者cmd命令脚本命令。
3.安装Ruby
redis的集群使用 ruby脚本编写,所以系统需要有 Ruby 环境 ,下载地址 http://dl.bintray.com/oneclick/rubyinstaller/:rubyinstaller-2.3.3-x64.exe。 Downloads (rubyinstaller.org)http://dl.bintray.com/oneclick/rubyinstaller/:rubyinstaller-2.3.3-x64.exe。
安装时3个选项都勾选。
下载完成后打开exe文件安装就好了。
安装完成出现此内容时选1
如果出现这种东西就是网速太慢(我是开代理解决的,各位可以关掉窗口打开CMD输入
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l)
使用ruby-v出现下图内容时表示安装完成
4.安装Redis的Ruby驱动redis-xxxx.gem
4.1下载地址 https://rubygems.org/pages/download(或者redis源码里也可以找到), 下载后解压,当前目录切换到解压目录中,如 D:\Program Files\redis\rubygems-2.6.12 然后在命令行执行 ruby setup.rb。
4.2 然后GEM 安装 Redis :切换到redis安装目录,需要在命令行中,执行 gem install redis。
解决gem install无反应 | 我的编程人生 (iyaozhen.com)
安装redis依赖
gem install redis
5.安装集群脚本redis-trib
redis-trib.rb 下载_new Girl的博客-CSDN博客_redis-trib.rb下载 这位老哥这里可以下载。
打开该链接如果没有下载,而是打开一个页面,那么将该页面保存为redis-trib.rb,建议保存到一个Redis的目录下,例如放到6379目录下。
下载后放到这个位置中
cmd到redis-trib.rb文件中,执行
ruby redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6389 127.0.0.1:6398 127.0.0.1:6380 127.0.0.1:6390 127.0.0.1:6399 命令
(--replicas的意义是指定集群中每个master配备几个slave。)
最后一行是问我们是否接收此分配:输入yes。
可以看到这次分配 6380,6390,6399是master,其他三台是slave。
至此Redis的集群搭建完成。
通过集群方式连接redis cluster
创建bat文件,
redis-cli -c -p 6379
运行bat文件,
使用cluster nodes命令查看集群信息:
关于slot的说明
每个Redis集群中总共有16383个slot(简单理解为一个范围),当有一个K V键值对想被放入集群时,首先对key进行计算,看此值属于哪个slot(范围),这一对键值对就会被放入哪个master中,因为此机制,redis集群才能实现水平扩容。
可以看到5493值被放入了6389,正好符合上面的slot。
关于Redirected说明
如果要get的值或者set的值不在此次连接的实例上,因为redis的无中心化配置,将会切换到对应的实例上。
7. 测试--当master故障会如何?
关闭6398实例。
当6398故障时,我们任然可以从6399实例获取到k1的value
可以看到6399实例被提升为master了。 当6398重启时,角色将从master转为slave
如果某一节点的master-slave全部挂掉了,集群是否还可用?此时我们关掉6379与6380。
所以,此处在配置文件总的配置cluster-require-full-coverage如果设置为yes时,整个集群也会down。如果配置为no, 那么集群可以使用,该slot范围无法再存储与读取数据。有兴趣的小伙伴可以试一试。
至此已将所有的redis集群模式介绍完成,有何不妥之处还请各位指正,谢谢!x
————————————————
版权声明:本文为CSDN博主「一念花开_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43163317/article/details/121604369
————————————————
版权声明:本文为CSDN博主「SimpleSimpleSimples」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SimpleSimpleSimples/article/details/78778114