docker-compose搭建redis集群

本文详细介绍了如何使用docker-compose在一台机器上搭建三主三从的Redis集群,探讨了单机部署的问题,如故障风险和性能瓶颈,并对比了主从、哨兵模式的局限性。作者还展示了如何配置和启动集群,以及检查集群状态的方法。
摘要由CSDN通过智能技术生成

这里用docker-compose在一台机器搭建三主三从,生产环境肯定是在多台机器搭建,否则一旦这台宿主机挂了,redis集群全挂了,依然是单点故障。同时,受机器性能极限影响,其并发也上不去,算不上高并发。

单机存在的问题:

  • 机器故障,导致redis失效;
  • 容量瓶颈,容量不能水平扩展;
  • OPS( operation per second 每秒处理指令数),一台机器的网络带宽是有限的,如果有多台机器,这个处理能力就上来了。

主从存在的问题:

  • 主服务挂了,redis服务就无法写入

哨兵模式存在的问题:

  • 配置复杂
  • 性能和高可用表现一般,切换瞬间无法使用,只有一台主机,性能受限。

集群存在问题:

  • 自动故障切换时,集群状态fail无法对外提供服务。

技术都有优点和缺点,适合才是最好

服务器宿主机IP

192.168.123.182

创建redis集群配置基本目录

mkdir -p /root/redis-cluster

切换至redis集群配置基本目录

cd /root/redis-cluster

编写redis.conf配置模板文件redis-cluster.tmpl

# 端口号
port ${PORT}
# 绑定ip
bind 0.0.0.0
# redis-cli访问密码
requirepass 123456i
# 访问主节点密码
masterauth 123456i
# 保护模式,默认是yes,开启保护模式
protected-mode no
# 是否守护模式,docker方式不需要
daemonize no
# 是否开启AOF持久化模式
appendonly yes
# 是否开启集群模式
cluster-enabled yes
# 集群节点信息文件
cluster-config-file nodes.conf
# 集群节点连接超时时间
cluster-node-timeout 15000
# 集群节点宿主机IP
cluster-announce-ip 192.168.123.182
# 集群节点映射端口
cluster-announce-port ${PORT}
# 集群节点总线端口
cluster-announce-bus-port 1${PORT}

在这里插入图片描述

改配置模板,前面是redis.conf单机时常规配置,只是最后六条配置是redis集群配置

下面语句实现模板变量的替换:
在这里插入图片描述

下面for循环实现6个redis配置文件生成:

for port in `seq 6380 6385`
do
  mkdir -p ${port}/{conf,data} \
  && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf
done

生成配置文件如下图:
在这里插入图片描述

docker-compose.yml文件编写:

version: "3.3"

# 定义服务
services:
  redis-6380: # 服务名称
    image: redis # 容器镜像
    container_name: redis-6380 # 容器名称
    restart: always # 容器总是重启
    network_mode: "host" # host 网络模式
    ports: # 映射端口
      - 6380:6380
    volumes: # 目录挂载
      - /root/redis-cluster/6380/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6380/data:/data
    command: redis-server /usr/local/redis/redis.conf # 服务启动命令

  redis-6381:
    image: redis
    container_name: redis-6381
    network_mode: "host"
    ports:
      - 6381:6381
    volumes:
      - /root/redis-cluster/6381/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6381/data:/data
    command: redis-server /usr/local/redis/redis.conf

  redis-6382:
    image: redis
    container_name: redis-6382
    network_mode: "host"
    ports:
      - 6382:6382
    volumes:
      - /root/redis-cluster/6382/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6382/data:/data
    command: redis-server /usr/local/redis/redis.conf

  redis-6383:
    image: redis
    container_name: redis-6383
    network_mode: "host"
    ports:
      - 6383:6383
    volumes:
      - /root/redis-cluster/6383/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6383/data:/data
    command: redis-server /usr/local/redis/redis.conf

  redis-6384:
    image: redis
    container_name: redis-6384
    network_mode: "host"
    ports:
      - 6384:6384
    volumes:
      - /root/redis-cluster/6384/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6384/data:/data
    command: redis-server /usr/local/redis/redis.conf

  redis-6385:
    image: redis
    container_name: redis-6385
    network_mode: "host"
    ports:
      - 6385:6385
    volumes:
      - /root/redis-cluster/6385/conf/redis.conf:/usr/local/redis/redis.conf
      - /root/redis-cluster/6385/data:/data
    command: redis-server /usr/local/redis/redis.conf

编写完毕,整体情况:
在这里插入图片描述
根据docker-compose.yml文件启动服务:
在这里插入图片描述
服务创建后,通过如下操作实现redis集群创建

# 进入其中一个redis容器内
docker exec -it redis-6380 /bin/bash

# 用redis-cli创建整个redis集群
# -a 表示连接的密码
# --cluster create 表示需要集群的redis主机和端口
# --cluster-replicas 1 其中的1表示一主一从
redis-cli -a 123456i --cluster create 192.168.123.182:6380 192.168.123.182:6381 192.168.123.182:6382 192.168.123.182:6383 192.168.123.182:6384 192.168.123.182:6385 --cluster-replicas 1

在这里插入图片描述
在这里插入图片描述
至此,三主三从搭建完毕。

查看集群状态:

redis-cli -a 123456i --cluster check 192.168.123.182:6380

在这里插入图片描述

redis-cli -p 6380 -a 123456i

# 查看集群信息
cluster info

# 查看集群节点
cluster nodes

在这里插入图片描述

这里的镜像是:redis-7.2.4

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用docker-compose搭建Redis集群,你可以按照以下步骤进行操作: 1. 创建一个docker-compose.yml文件,并在其中定义Redis集群的服务。你可以使用以下示例作为参考: ``` version: '3' services: redis-6379: image: redis ports: - "6379:6379" volumes: - ./redis-6379:/data command: redis-server /data/redis.conf redis-6380: image: redis ports: - "6380:6379" volumes: - ./redis-6380:/data command: redis-server /data/redis.conf redis-6381: image: redis ports: - "6381:6379" volumes: - ./redis-6381:/data command: redis-server /data/redis.conf redis-6382: image: redis ports: - "6382:6379" volumes: - ./redis-6382:/data command: redis-server /data/redis.conf redis-6383: image: redis ports: - "6383:6379" volumes: - ./redis-6383:/data command: redis-server /data/redis.conf redis-6384: image: redis ports: - "6384:6379" volumes: - ./redis-6384:/data command: redis-server /data/redis.conf ``` 2. 在每个Redis服务的目录中创建一个redis.conf文件,用于配置Redis集群的参数。你可以使用以下示例作为参考: ``` port 6379 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes ``` 3. 运行docker-compose命令来启动Redis集群: ``` docker-compose up -d ``` 这将启动Redis集群的所有服务,并将它们连接在一起。 请注意,以上步骤中的示例仅适用于在本地搭建Redis集群。如果你需要在生产环境中搭建Redis集群,你可能需要进行更多的配置和安全性措施。 #### 引用[.reference_title] - *1* *2* *3* [docker(八)—docker-compose搭建redis集群](https://blog.csdn.net/xiaoqiang65/article/details/121011071)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员buddha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值