2025年最新Linux的Redis主从集群搭建

发布于:2025-05-18 ⋅ 阅读:(25) ⋅ 点赞:(0)

一:概述

        Redis(Remote Dictionary Server)是一个开源的、高性能的键值存储系统,通常被用作数据库、缓存或消息中间件。它以内存存储为主,支持多种数据结构,并具备持久化、高可用、分布式等特性,广泛应用于互联网、游戏、金融等场景。在开发应用时我们经常使用的是单节点的Redis,但是在实际企业应用中,为了提高Redis的并发性能,就需要搭建Redis主从集群。下面我就来简单的说明一下利用Docker搭建一个简单的主从集群。

二:Redis主从集群的搭建(前置的Docker默认已经安装完)

        <1>利用Docker拉取最新的Redis镜像

docker pull redis

默认拉取的是最新的Redis镜像版本。

        <2>在你经常安装应用的目录中新建文件夹redis

mkdir redis

       <3>在该目录中新建一个compose的文件

touch docker-compose.yaml

        <3>编辑上述创建的文件,并添加如下的内容

vim docker-compose.yaml
version: "3.2"

services:
  r1:
    image: redis # 镜像文件
    container_name: r1 # 容器名称
    network_mode: "host" # 主机模式
    entrypoint: ["redis-server", "--port", "7001"] # Redis服务运行端口号
  r2:
    image: redis
    container_name: r2
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7002"]
  r3:
    image: redis
    container_name: r3
    network_mode: "host"
    entrypoint: ["redis-server", "--port", "7003"]

        <4>在当前目录下运行以下的命令

docker-compose up -d

出现这种就说明已经部署了基本的Redis多实例节点成功了。

        <5>建立集群

        上述虽然搭建了3个Redis的实例,但是并没有形成主从关系,需要通过以下的命令来配置主从关系。

# Redis5.0以前
slaveof <masterip> <masterport>
# Redis5.0以后
replicaof <masterip> <masterport>

        这里用临时模式测试,首先连接r2,让其以r1为主节点

# 连接r2
docker exec -it r2 redis-cli -p 7002
# 认r1主,也就是7001
slaveof host(主机ip地址) 7001

然后连接r3,让其以r1为master

# 连接r2
docker exec -it r3 redis-cli -p 7002
# 认r1主,也就是7001
slaveof host(主机ip地址) 7001

然后连接r1,查看集群状态:

# 连接r1
docker exec -it r1 redis-cli -p 7001
# 查看集群状态
info replication

        会看到如下的信息:

# Replication
role:master
connected_slaves:2
slave0:ip=host,port=7002,state=online,offset=154,lag=1
slave1:ip=host,port=7003,state=online,offset=154,lag=0
master_failover_state:no-failover
master_replid:6fac952687625ccf5697afb2770f3254f545f12c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154

可以看到它扮演的角色是主节点。

三:测试主从集群效果

        分别在集群中执行一系列的读写操作,然后查看效果

root@1:/usr/local/soft/redis# docker exec -it r1 redis-cli -p 7001
127.0.0.1:7001> set string 五一劳动节
OK
127.0.0.1:7001> set num 501
OK
127.0.0.1:7001> get num
"501"
127.0.0.1:7001> get string
"\xe4\xba\x94\xe4\xb8\x80\xe5\x8a\xb3\xe5\x8a\xa8\xe8\x8a\x82"
127.0.0.1:7001> exit
root@1:/usr/local/soft/redis# docker exec -it r2 redis-cli -p 7002
127.0.0.1:7002> set num 1234
(error) READONLY You can't write against a read only replica.
127.0.0.1:7002> get num
"501"
127.0.0.1:7002> get string
"\xe4\xba\x94\xe4\xb8\x80\xe5\x8a\xb3\xe5\x8a\xa8\xe8\x8a\x82"

 从这里发现主节点可以进行读写操作,而从节点只可以读取不能写入。至此为止,这个主从集群搭建就完毕了。