参考:
- windows下 redis 集群环境搭建教程(Redis官网版) - 知乎(有用!我主要参考它,如果看不懂我写的,那就看他的)
- redis-cli 连接集群(连接集群,有用!)
- redis报错:ERR SELECT is not allowed in cluster mode-腾讯云开发者社区-腾讯云
步骤1:准备多个redis环境
创建一个名为redis-cluster的文件夹,把redis安装目录拷贝多份放进来(没错,这就是多个redis了),以端口号命名,例如:
依次编辑每个 redis 的 redis.windows.conf 文件,修改这几个配置,例如7006的:
- port 7006
- cluster-enabled yes
- cluster-config-file nodes-7006.conf(例子,文件名而已,我喜欢和文件名对应起来)
- cluster-node-timeout 15000
- (密码相关)requirepass 你的密码
- (密码相关)masterauth 主节点的密码
前四个是要的。密码相关的,先不要设置,但是先不要关掉你的配置文件(如果你要设置密码,后面还要用到,,)。
然后,安装服务,在每个redis文件夹下打开命令行运行:
cmd
# 例如在7001文件夹下运行
.\redis-server.exe --service-install redis.windows.conf --service-name redis7001
这里要注意要使用本地的 .\redis-server.exe,避免冲突。
安装好之后能在服务中看到:
记得右键点击启动,,
步骤2:创建cluster
我使用 redis-cli.exe 安装的。
温馨提示(详见参考):
- 该命令程序在 redis 根目录下,无需另外安装其它东西
- 数量要求:至少要 6 个redis
- 优先启动要求:保证 redis 服务都已正常开启
- 主从参数的位置:使用 redis-cli 初始化不一样的命令在于:参数不是 --replicas 1 而是 --cluster-replicas 1 ;位置也不一样,放在最后面而不是中间
进入7001文件夹(虽然说任意一个redis都行),执行命令:
cmd
.\redis-cli --cluster create 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 127.0.0.1:7006 --cluster-replicas 1
如果没出错的话,结果类似于:
cmd
[OK] All 16384 slots covered
然后可以试试能不能连接了,比如我用 another redis desktop manager 连接是这样:
步骤3:看看这个集群的情况
可以使用 redis-cli 连接集群看看,首先要连接集群,方法是:
cmd
.\redis-cli.exe -c -h 127.0.0.1 -p 7001
为什么是7001这个redis,我也不知道具体原因,我是觉得它是命令行中的第一个,先连接它吧。连接成功后可以查看一些集群的信息:
cmd
# 连接就是会有这个ip和端口号
127.0.0.1:7001>
# 这个命令提供了集群的总体状态信息,但它不会明确告诉你哪些节点是主节点。
127.0.0.1:7001> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:159
cluster_stats_messages_pong_sent:154
cluster_stats_messages_sent:313
cluster_stats_messages_ping_received:154
cluster_stats_messages_pong_received:158
cluster_stats_messages_received:312
# 这个命令会返回一个列表,其中每个节点都有一个行条目,包括节点的 ID、地址、角色(master 或 slave)、哈希槽分配等信息。
# 查找标记为 master 的行,这些就是集群中的主节点。
127.0.0.1:7001> cluster nodes
445998eb13099af94b001efc52db3a9f26a9bc31 127.0.0.1:7001@17001 myself,master - 0 1714087256000 1 connected 0-5460
47cab5ade959d52db837a71cf960e7a576f8c47a 127.0.0.1:7002@17002 master - 0 1714087257000 2 connected 5461-10922
21f75f8d3d1aa3b965149e5a57a59dd01cb6e3c9 127.0.0.1:7006@17006 slave 47cab5ade959d52db837a71cf960e7a576f8c47a 0 1714087255000 6 connected
d470631cb4e498691bb2b5f5bf42d98a8e87923f 127.0.0.1:7005@17005 slave 445998eb13099af94b001efc52db3a9f26a9bc31 0 1714087258081 5 connected
028145f9ebf436e505f4d8b2f33e39c70ce35dbb 127.0.0.1:7004@17004 slave 948a2e477aa55103746777cb3abba31f669103e1 0 1714087255000 4 connected
948a2e477aa55103746777cb3abba31f669103e1 127.0.0.1:7003@17003 master - 0 1714087257011 3 connected 10923-16383
# 这个命令显示有关当前复制状态的信息,包括主从角色、连接的主服务器、复制偏移等信息。(我也看不太懂......,但是能看懂一点)
127.0.0.1:7001> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7005,state=online,offset=686,lag=0
master_replid:4da3d2aa3b79d1fe10dd25fca644277103dc9b9a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:686
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:686
# 这个命令可以用来获取所有 Redis 配置项,或者用 CONFIG GET repl* 来特别获取复制相关的配置。
127.0.0.1:7001> config get *
1) "dbfilename"
2) "dump.rdb"
3) "requirepass"
4) "12345678"
5) "masterauth"
6) ""
7) "cluster-announce-ip"
8) ""
9) "unixsocket"
10) ""
11) "logfile"
12) ""
13) "pidfile"
步骤4:(可选)为主从节点设置密码
在 Redis 集群环境中,如果主节点设置了访问密码,从节点确实需要正确配置以与主节点通信。这涉及两个方面:
- 客户端访问密码(requirepass):如果你的主节点配置了客户端访问密码(通过 requirepass 配置项),所有需要连接到该主节点的客户端,包括从节点,都需要提供这个密码。
- 主从复制认证密码(masterauth):当主节点设置了 requirepass,从节点需要使用 masterauth 配置项来设置相同的密码,以便它可以成功地复制主节点的数据。masterauth 的值应该与主节点的 requirepass 相同,以确保从节点可以作为复制客户端连接到主节点。
看完集群情况,应该知道哪些是主节点,哪些是从节点了,在刚才让别关的 redis.windows.conf 文件中查找 requirepass 和 masterauth,设置密码:
- 主节点:设置 requirepass
- 从节点:设置 requirepass 和 masterauth
我全设置一样的密码了,省事。
设置完之后,去服务那里重启所有redis服务就可以了,就是前面建的那些。也不用重新建立集群。
然后你再试试 redis-cli,会让你输入密码了:
cmd
# 执行命令会报错,要求输入密码
[ERR] Node 127.0.0.1:7001 NOAUTH Authentication required.
# 输入密码就ok了
127.0.0.1:7001> auth 你的密码
OK
基本就是这样了,验证的话就不说。