本地以cluster模式启动(Windows)

参考:

  1. windows下 redis 集群环境搭建教程(Redis官网版) - 知乎(有用!我主要参考它,如果看不懂我写的,那就看他的)
  2. redis-cli 连接集群(连接集群,有用!)
  3. redis报错:ERR SELECT is not allowed in cluster mode-腾讯云开发者社区-腾讯云

步骤1:准备多个redis环境

创建一个名为redis-cluster的文件夹,把redis安装目录拷贝多份放进来(没错,这就是多个redis了),以端口号命名,例如:

依次编辑每个 redis 的 redis.windows.conf 文件,修改这几个配置,例如7006的:

  1. port 7006
  2. cluster-enabled yes
  3. cluster-config-file nodes-7006.conf(例子,文件名而已,我喜欢和文件名对应起来)
  4. cluster-node-timeout 15000
  5. (密码相关)requirepass 你的密码
  6. (密码相关)masterauth 主节点的密码

前四个是要的。密码相关的,先不要设置,但是先不要关掉你的配置文件(如果你要设置密码,后面还要用到,,)。

然后,安装服务,在每个redis文件夹下打开命令行运行:

cmd 复制代码
# 例如在7001文件夹下运行
.\redis-server.exe --service-install redis.windows.conf --service-name redis7001

这里要注意要使用本地的 .\redis-server.exe,避免冲突。

安装好之后能在服务中看到:

记得右键点击启动,,

步骤2:创建cluster

我使用 redis-cli.exe 安装的。

温馨提示(详见参考):

  1. 该命令程序在 redis 根目录下,无需另外安装其它东西
  2. 数量要求:至少要 6 个redis
  3. 优先启动要求:保证 redis 服务都已正常开启
  4. 主从参数的位置:使用 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 集群环境中,如果主节点设置了访问密码,从节点确实需要正确配置以与主节点通信。这涉及两个方面:

  1. 客户端访问密码(requirepass):如果你的主节点配置了客户端访问密码(通过 requirepass 配置项),所有需要连接到该主节点的客户端,包括从节点,都需要提供这个密码。
  2. 主从复制认证密码(masterauth):当主节点设置了 requirepass,从节点需要使用 masterauth 配置项来设置相同的密码,以便它可以成功地复制主节点的数据。masterauth 的值应该与主节点的 requirepass 相同,以确保从节点可以作为复制客户端连接到主节点。

看完集群情况,应该知道哪些是主节点,哪些是从节点了,在刚才让别关的 redis.windows.conf 文件中查找 requirepass 和 masterauth,设置密码:

  1. 主节点:设置 requirepass
  2. 从节点:设置 requirepass 和 masterauth

我全设置一样的密码了,省事。

设置完之后,去服务那里重启所有redis服务就可以了,就是前面建的那些。也不用重新建立集群。

然后你再试试 redis-cli,会让你输入密码了:

cmd 复制代码
# 执行命令会报错,要求输入密码
[ERR] Node 127.0.0.1:7001 NOAUTH Authentication required.

# 输入密码就ok了
127.0.0.1:7001> auth 你的密码
OK

基本就是这样了,验证的话就不说。

相关推荐
Themberfue1 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧3 分钟前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
让学习成为一种生活方式18 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画24 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
神里大人1 小时前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea
小冉在学习2 小时前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论