搭建 Redis 集群模式(三主六从)

因服务器资源限制,只是在一台服务器上操作的。Redis版本:redis-6.2.6
Redis安装见:Redis安装篇

1、将redis安装到指定路径下

cd /usr/local/soft/

mkdir redis-cluster

# 安装后,redis-sentinel目录下只有bin文件夹
make PREFIX=/usr/local/soft/redis-cluster/ install

2、复制redis.conf 到不同节点目录下

创建三个文件夹:7000(主节点)、7001(从节点)、7002(从节点)、8000(主节点)、8001(从节点)、8002(从节点)、9000(主节点)、9001(从节点)、9002(从节点);分别在九个文件夹下放置 redis.conf 配置文件。

cd /usr/local/soft/redis-cluster

mkdir 7000
mkdir 7001
mkdir 7002
mkdir 8000
mkdir 8001
mkdir 8002
mkdir 9000
mkdir 9001
mkdir 9002

# 复制配置文件redis.conf
cd /usr/local/soft/redis-6.2.6
cp redis.conf /usr/local/soft/redis-cluster/7000/
cp redis.conf /usr/local/soft/redis-cluster/7001/
cp redis.conf /usr/local/soft/redis-cluster/7002/
cp redis.conf /usr/local/soft/redis-cluster/8000/
cp redis.conf /usr/local/soft/redis-cluster/8001/
cp redis.conf /usr/local/soft/redis-cluster/8002/
cp redis.conf /usr/local/soft/redis-cluster/9000/
cp redis.conf /usr/local/soft/redis-cluster/9001/
cp redis.conf /usr/local/soft/redis-cluster/9002/

3、修改配置文件

各个节点的配置文件大部分都是相同的,区别的配置项为:

  1. 端口;
  2. dir 保存路径、logfile文件、pidfile 等其他路径相关;
tcp-backlog 511
# 超时时间,300秒
timeout 300
# TCP连接保活策略,server端300秒向客户端发送一次ACK请求,检测客户端是否存活,0表示不会进行保活检测。
tcp-keepalive 300
# 后台启动,会写一个pid文件到pidfile指定的目录下
daemonize yes
databases 16

# 保存路径
dir /usr/local/soft/redis-cluster/7000/

bind 0.0.0.0
protected-mode yes
port 7000
# 密码
requirepass abc123
pidfile /usr/local/soft/redis-cluster/7000/redis.pid
# 日志打印级别,默认notice。有四大级别:debug\verbose\notice\warning
loglevel notice
# 日志文件位置,若不指定路径,会在启动目录下生成一个redis.log
logfile "/usr/local/soft/redis-cluster/7000/redis.log"


######### 集群模式的配置项 #########

# 主节点的密码,SYSC时需要密码,不然从节点同步时会失败
masterauth abc123

# 是否开启集群模式,默认不开启。
cluster-enabled yes

# 集群配置文件的名称,每个cluster节点都有一个集群相关的配置文件,持久化保存集群的信息。不需要手动配置,由Redis生成并更新.
cluster-config-file nodes.conf

# 集群节点超时时间,节点持续超时的时间超过阀值,才认定该节点出现故障。默认为15000毫秒,即15秒。
cluster-node-timeout 15000

####### 如果是云服务器上部署的redis集群,需要指定公网ip ######
# 云服务器上部署需指定公网ip,否则创建集群时,节点ip可能会是内网ip
cluster-announce-ip 121.37.1.255
# cluster-announce-port
# cluster-announce-tls-port
# Redis总线端口,用于与其它节点通信,若不配置,则为redis端口 + 10000;例如,redis端口为7000,则该节点的集群总线端口为17000
# cluster-announce-bus-port 17000

4、启动服务端

创建启动脚本

cd /usr/local/soft/redis-cluster

touch start-all-server.sh

chmod +x start-all-server.sh

start-all-server.sh 启动文件中的内容为:

./bin/redis-server 7000/redis.conf
./bin/redis-server 7001/redis.conf
./bin/redis-server 7002/redis.conf
./bin/redis-server 8000/redis.conf
./bin/redis-server 8001/redis.conf
./bin/redis-server 8002/redis.conf
./bin/redis-server 9000/redis.conf
./bin/redis-server 9001/redis.conf
./bin/redis-server 9002/redis.conf

启动后,ps -ef|grep redis 查看九个服务是否启动。此时使用redis-cli连接后,是不能使用的,因为虽然启动了集群服务,但是暂时不在一个集群中,服务之间互相发现不了对方。
在这里插入图片描述
2018年十月 Redis 发布了稳定的 5.0 版本,推出了非常多的新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli 的方式。
所以说现在有两种方式来创建集群:
● 一种是ruby启动方式;
● 另外一个是 C语言的方式。
因为我用的 redis 版本是 6.2.6,如果要用ruby创建集群的方式,还需要安装ruby语言的一些东西,所以这里使用的 redis-cli 的方式创建集群。
介绍 ruby 创建集群的方式
进入到redis源码存放目录redis-6.2.6/src下,执行redis-trib.rb,此脚本是ruby脚本,它依赖ruby环境。
命令为:./redis-trib.rb create --replicas 1 ip:端口1 ip:端口2 …
–replicas 1 表示为每个主节点创建1个子节点。

# 复制源码包下的
cd /usr/local/soft/redis-6.2.6/src
# --replicas 1 表示为每个主节点创建1个子节点
./redis-trib.rb create --replicas 1 121.37.1.255:7000 121.37.1.255:8000 121.37.1.255:9000 121.37.1.255:7001 121.37.1.255:7002 121.37.1.255:8001 121.37.1.255:9001

5、使用 redis-cli 的方式创建集群

5.1、使用命令创建集群

redis-cli 会按照给定的顺序设置主节点和从节点,比如下面121.37.1.255:7000、121.37.1.255:8000、121.37.1.255:9000设置在前,所以会被定为主节点。

# 创建集群命令(无密码时)
# 启动集群命令为:./bin/redis-cli --cluster create ip:port1 ip:port2 ...  --cluster-replicas 2
# --cluster-replicas 2 表示每个主节点有两个从节点,如果是三主三从,应该设置1
./bin/redis-cli --cluster create 121.37.1.255:7000 121.37.1.255:8000 121.37.1.255:9000 121.37.1.255:7001 121.37.1.255:7002 121.37.1.255:8001 121.37.1.255:8002 121.37.1.255:9001 121.37.1.255:9002 --cluster-replicas 2

如果加了密码,那么创建集群时就需要加 -a password 参数:

./bin/redis-cli --cluster create 121.37.1.255:7000 121.37.1.255:8000 121.37.1.255:9000 121.37.1.255:7001 121.37.1.255:7002 121.37.1.255:8001 121.37.1.255:8002 121.37.1.255:9001 121.37.1.255:9002 --cluster-replicas 2 -a abc123

输入创建集群的命令后会出现以下提示,注意Can I set the above configuration? (type ‘yes’ to accept): yes,该处请输入yes,不然好像分配不了哈希槽(别人说的,没试过)。
在这里插入图片描述
输完yes后,会出现如下提示,[OK] All 16384 slots covered. 说明成功啦。
在这里插入图片描述

5.2、集群完整性检查

集群完整性是指所有的槽都分配到存活的redis主节点上,只要16384个槽中有一个槽未被分配,则表示集群不完整。
出现一下信息说明所有槽都分配到节点了。
在这里插入图片描述

5.3、可能出现的错误1

如果加了密码,那么创建集群时就需要加-a password参数:

./bin/redis-cli --cluster create 121.37.1.255:7000 121.37.1.255:8000 121.37.1.255:9000 121.37.1.255:7001 121.37.1.255:7002 121.37.1.255:8001 121.37.1.255:8002 121.37.1.255:9001 121.37.1.255:9002 --cluster-replicas 2 -a abc123
5.4、可能出现的错误2

如果一直 Waiting for the cluster to join…,原因可能是:没有开通集群总线端口。
因为 redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口号为:redis客户端连接的端口 + 10000。
举例:如果 redis端口为 7000,则集群总线端口为 17000。
所以,所有服务节点都需要开通redis的服务端的端口和集群总线端口。

6、验证

# 连接服务端时,使用 -c 参数表示以集群模式连接
./bin/redis-cli -c -p 7000 -a abc123

# 连接服务端后,查看各节点信息,哈希槽信息。
cluster nodes
cluster slots
cluster info
# 可以在不同的节点使用set/get/del等命令进行测试。

连接后,使用 cluster nodes 展示的各节点信息:
在这里插入图片描述
如果连接服务端时,没有使用 -c 参数,会有下面的错误:
在这里插入图片描述

7、关闭

创建关闭脚本

cd /usr/local/soft/redis-cluster

touch stop-all-server.sh

chmod +x stop-all-server.sh

stop-all-server.sh 脚本内容为:

./bin/redis-cli -h 127.0.0.1 -p 7000 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 7001 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 7002 -a abc123 shutdown

./bin/redis-cli -h 127.0.0.1 -p 8000 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 8001 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 8002 -a abc123 shutdown

./bin/redis-cli -h 127.0.0.1 -p 9000 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 9001 -a abc123 shutdown
./bin/redis-cli -h 127.0.0.1 -p 9002 -a abc123 shutdown

8、移除集群模式

创建移除脚本,移除各节点目录下运行中生成的文件,例如:nodes.conf、dump.rdb、redis.log、appendonly.aof、redis.pid。

cd /usr/local/soft/redis-cluster

touch remove-cluster.sh

chmod +x remove-cluster.sh

移除脚本中的内容如下:

rm -rf 7*/nodes.conf 7*/dump.rdb  7*/redis.log 7*/redis.pid 7*/appendonly.aof 8*/nodes.conf 8*/dump.rdb  8*/redis.log 8*/redis.pid 8*/appendonly.aof 9*/nodes.conf 9*/dump.rdb  9*/redis.log 9*/redis.pid 9*/appendonly.aof

到此,Redis集群已经搭建完毕,有错误之处,还请指出,共同学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Redis集群中,三主三从架构是一种常见的搭建方式。每个节点都可以相互连通,客户端可以连接任何一个节点来访问整个集群中的数据和执行操作。三个主节点提供服务,而三个从节点则提供备份功能,存储集群中所有主节点和从节点的信息。 在搭建这种集群时,不需要修改端口配置,因为每个节点都在不同的机器上,这样才能实现真正的高可用性。如果在同一台机器上搭建集群,那就是伪集群了。 使用哨兵模式搭建三主三从的Redis集群有一些优点和缺点。优点包括:主从节点的自动切换使得系统更加健壮,可用性更高。缺点则在于Redis较难支持在线扩容,特别是在集群容量达到上限时,进行在线扩容会变得非常复杂。这时候,集群模式可能是一个更好的选择。 综上所述,使用三主三从架构搭建Redis集群可以提供高可用性和数据备份功能,但在线扩容可能存在一定的挑战。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis三主三从集群搭建(三台机器)](https://blog.csdn.net/weixin_44519124/article/details/113274037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis搭建集群,三主三从集群模式](https://blog.csdn.net/xiefazhi123/article/details/119147657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值