开源地址:https://github.com/tporadowski/redis(下载链接)
1.下载解压后,解压成6份,为了好区分把文件夹分别命名为:6001,6002,6003,6004,6005,6006
2.修改redis.windows-service.conf文件,复制第一个到其他文件夹里,替换对应端口号
bind 127.0.0.1 #绑定的IP,也可以为0.0.0.0或者注释掉 任意IP
port 6001 #修改为与当前文件夹名字一样的端口号
masterauth redis@123 #配置redis密码
requirepass redis@123 #配置redis密码
appendonly yes #开启aof持久化
no-appendfsync-on-rewrite yes #开启aof持久化重写期间同步
cluster-enabled yes #开启集群
cluster-config-file nodes-6001.conf # 开启节点配置文件(nodes-端口.conf命名方式,服务启动时自动生成)
cluster-node-timeout 15000 #开启集群节点宕机超时时间
注意:(前面不要留空格,否则会出现类似:Invalid argument during startup: unknown conf file parameter : cluster-enabled问题)
3.在每个redis目录下打开一个cmd 窗口,把redis.windows-service.conf安装成服务启动
#安装成服务
redis-server --service-install redis.windows-service.conf --service-name redis6001
redis-server --service-install redis.windows-service.conf --service-name redis6002
redis-server --service-install redis.windows-service.conf --service-name redis6003
redis-server --service-install redis.windows-service.conf --service-name redis6004
redis-server --service-install redis.windows-service.conf --service-name redis6005
redis-server --service-install redis.windows-service.conf --service-name redis6006
#卸载服务
redis-server --service-uninstall redis.windows-service.conf --service-name redis6001
redis-server --service-uninstall redis.windows-service.conf --service-name redis6002
redis-server --service-uninstall redis.windows-service.conf --service-name redis6003
redis-server --service-uninstall redis.windows-service.conf --service-name redis6004
redis-server --service-uninstall redis.windows-service.conf --service-name redis6005
redis-server --service-uninstall redis.windows-service.conf --service-name redis6006
3.创建Redis集群
#如redis设置了密码,则需要在创建集群的时候加 -a password ,要是没有会提示(Node 127.0.0.1:6001 NOAUTH Authentication required.)
#进入任意一个Redis中执行,只需要执行一次即可,后面哪怕我们重启了整个redis,也不需要执行第二次了
redis-cli -a redis@123 --cluster create
127.0.0.1:6001
127.0.0.1:6002
127.0.0.1:6003
127.0.0.1:6004
127.0.0.1:6005
127.0.0.1:6006
--cluster-replicas 1 #1表示占比,表示主和从的比例数据,这里是三主三从,所以是1
##命令
redis-cli -a redis@123 --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
##执行创建集群命令
输入 yes
集群创建分配插槽成功.
4.测试集群是否正常
##连接集群其中的一个主节点
redis-cli.exe -c -h 127.0.0.1 -p 6001 -a redis@123 # -c 表示集群 -h bind 地址 -p 端口 -a 密码
#添加值
set test 111
##查看是否存在
get test 或者 keys test
注意:如果set 值出现:NOAUTH Authentication required. 则需要 -a 密码
查看从节点信息,并连接
#输入查
info replication
#连接从节点
redis-cli.exe -c -h 127.0.0.1 -p 6004
#查询test 是否存在
get test
5.集群的扩容和收缩
集群扩容,复制两份redis,分别为6007,6008,把端口改6007,6008 ,安装成服务(安装方式同上),并启动
##添加6007节点到集群
redis-cli.exe -a redis@123 --cluster add-node 127.0.0.1:6007 127.0.0.1:6001
##第一个127.0.0.1:6007是新增的集群节点 第二个127.0.0.1:6001是集群中正常存活的节点
查看集群节点,发现新添加的节点没有被分配插槽
为新添加的节点分配插槽并为主节点
##执行分配插槽
redis-cli.exe -a redis@123 --cluster reshard 127.0.0.1:6002
#127.0.0.1:6002为集群中一个节点,如果设置了密码,则需要添加-a 密码
提示我们需要分配多少个插槽,后面需要输入数字,这里我分配100个
回车键确认,系统需要我们输入接受的节点ID,我们这里是新添加6007节点
回车确认,会提示,分配插槽的方式,all=系统随机分配100个插槽,done=手动分配,我这里先选择系统随机all,回车后,会展现分配的插槽信息,然后输入yes,回车确认完成。
查看集群节点信息
#查看集群信息
cluster nodes
把6008添加到集群节点,并为6007节点的从节点
#添加到集群节点
redis-cli.exe -a redis@123 --cluster add-node 127.0.0.1:6008 127.0.0.1:6001
##第一个127.0.0.1:6008是新增的集群节点 第二个127.0.0.1:6001是集群中正常存活的节点
把新添加的6008节点设置6007节点的从节点
#连接6008节点
redis-cli.exe -a redis@123 -c -h 127.0.0.1 -p 6008
#把6008设置为6007的从节点
cluster replicate 6011881505a0a70778c191548021b1340db3d00e
#6011881505a0a70778c191548021b1340db3d00e为6007节点ID
查询集群信息,6008已变成6007节点的从节点
##查看
cluster nodes
集群收缩,移除6007主节点和6008从节点
#首先移除6008从节点
redis-cli.exe -a redis@123 --cluster del-node 127.0.0.1:6008 ccabb81d9fc74ed1b1e94c7305007d096d6d9eb5
#ccabb81d9fc74ed1b1e94c7305007d096d6d9eb5 为6008从节点ID
注意如果6008节点已打开,需要关闭后才能移除掉。
查看集群信息
##查看集群信息
cluster nodes
移除主节点6007的插槽
##移除主节点6007的插槽
##首先要把主节点的插槽还回到集群中去,
redis-cli.exe -a redis@123 --cluster reshard 127.0.0.1:6007
回车确认,提示要移除多少个插槽,这里移除所有100个,输入100
回车确认,提示说输入一个接受节点ID,这里输入存活的主节点任何一个ID即可
回车确认,提示输入源节点,即是6007节点ID
输入all或done,回车确认,我这里输入done看看效果,前面分配的时候输入all,会输出移除的节点信息
输入yes ,回车移除完成
删除主节点6007
#首先移除6007主节点
redis-cli.exe -a redis@123 --cluster del-node 127.0.0.1:6007 6011881505a0a70778c191548021b1340db3d00e
#6011881505a0a70778c191548021b1340db3d00e 为6007从节点ID
查看集群信息,发现主节点6007没有了
##查看集群信息
cluster nodes
最后题外话:redis5.0.14.1 修复版本cluster 集群模式会出现以下问题,因此我又恢复到redis5.0.14
Reading the configuration file, at line 0
>>> '(null)'
replicaof directive not allowed in cluster mode
fork operation failed