Redis 分片集群

一. 前言

前面文章介绍了主从集群和哨兵模式。其中主从集群可以通过读写分离的方式解决高并发场景下的读问题;而在主节点出现故障时,又可以通过哨兵模式的自动选举来实现高可用。
Redis 主从集群 && 哨兵模式

二. Redis 分片集群

2.1 分片集群的作用和特征:

主从和哨兵可以解决高可用高并发读的问题。但是依然有两个问题没有解决:

  • 海量数据存储问题
  • 高并发写问题

使用分片集群可以解决上述问题,分片集群特征:

  • 集群中有多个 master, 每个 master 保存不同数据
  • 每个 master 都可以有多个 slave 节点
  • master 之间通过 ping 监测彼此健康状态
    在这里插入图片描述

2.2 搭建分片集群

Redis 分片集群最少需要3个master 节点,由于我们的机器性能有限,我们只给每个 master 配置一个 slave, 形成最小的分片集群
在这里插入图片描述
计划部署的节点信息如下:
在这里插入图片描述

2.2.1 集群配置

分片集群中的 Redis 节点必须开启集群模式,一般在配置文件中添加下面参数:

port 7000
cluster-enable yes
cluster-config-file node.conf
cluster-node-timeout 5000
appendonly yes

其中有3个我们没见过的参数:

  • cluster-enabled: 是否开启集群模式
  • cluster-config-file: 集群模式的配置文件名称,无需手动创建,由集群自动维护
  • cluster-node-timeout: 集群中节点之间心跳超时时间

一般搭建集群肯定是给每个节点都配置上述参数,不过考虑到我们计划用 docker-compose 部署,因此可以直接在启动命令中指定参数

在虚拟机的 /root 目录下新建一个 redis-cluster 目录,然后新建一个 docker-compose.yaml 文件,内容如下:

version: "3.2"

services:
   r1:
	 image: redis
     container_name: r1
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7001", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]
  r2:
	 image: redis
     container_name: r2
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7002", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]
  r3:
	 image: redis
     container_name: r3
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7003", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]
     
  r4:
	 image: redis
     container_name: r4
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7004", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]
  r5:
	 image: redis
     container_name: r5
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7005", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]     
  r6:
	 image: redis
     container_name: r6
     network_mode: "host"
     entrypoint: ["redis-server", "--port", "7006", "--cluster-enabled", "yes", "--cluster-config-file", "node.conf"]   

注意:使用 Docker 部署 Redis 集群,network 模式必须采用 host

2.2.2 启动集群

进入 /root/redis-cluster 目录,使用命令启动 redis

docker compose up -d
ps -ef | grep redis

在这里插入图片描述

可以发现每个 redis 节点都以 cluster 模式运行。不过节点与节点之间未建立连接

接下来,我们使用命令创建集群:

# 进入任意节点容器
docker exec -it r1 bash
# 然后,执行命令
redis-cli --cluster create --cluster-replicas 1\
192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003\
192.168.150.101:7004 192.168.150.101:7005 192.168.150.101:7006

命令说明:

  • redis-cli --cluster: 代表集群操作命令
  • create: 代表是创建集群
  • –cluster-replicas 1: 指定集群中每个 master 的副本个数为1
    • 此时节点总数 / (replicas + 1) 得到的就是 master 的数量 n。因此节点列表中前 n 个就是 master, 其他节点都是 slave 节点,随机分配到不同 master
      在这里插入图片描述

接着,我们可以通过命令查看集群状态:

redis-cli -p 7001 cluster nodes

在这里插入图片描述

相关推荐

  1. Redis-分片大纲

    2024-06-16 20:48:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-16 20:48:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-16 20:48:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-16 20:48:03       82 阅读
  4. Python语言-面向对象

    2024-06-16 20:48:03       91 阅读

热门阅读

  1. 玩具机器人脚本适合场景

    2024-06-16 20:48:03       27 阅读
  2. mysql中 什么是锁

    2024-06-16 20:48:03       33 阅读
  3. Python闯LeetCode--第2题:两数相加

    2024-06-16 20:48:03       33 阅读
  4. 软设之需求分析的工具

    2024-06-16 20:48:03       28 阅读
  5. Spring框架的原理及应用详解(三)

    2024-06-16 20:48:03       31 阅读
  6. Linux C语言:指针函数、递归函数及用法

    2024-06-16 20:48:03       30 阅读
  7. 离线数仓VS实时数仓

    2024-06-16 20:48:03       27 阅读
  8. 对冲基金为什么叫做Hedge Fund?

    2024-06-16 20:48:03       36 阅读