几分钟搞定docker容器部署redis集群方法

    技术2026-03-18  8

    前言

    相信大家都知道怎么在docker中部署redis单例,那怎么才能部署redis集群方案呢。。。接下来不要走开,一步步教你怎么搞定docker下的redis集群

    实施步骤

    接下来将是重中之重,一步步讲解

    拉取redis镜像 拉取最新redis镜像如下

    docker pull redis

    创建配置文件模板

    port ${PORT} ##节点端口 cluster-enabled yes ##cluster集群模式 cluster-config-file nodes.conf ##集群配置名 cluster-node-timeout 5000 ##超时时间 cluster-announce-ip 172.18.0.1 ##实际为各节点网卡分配ip 先用上网关ip代替 cluster-announce-port KaTeX parse error: Expected 'EOF', got '#' at position 8: {PORT} #̲#节点映射端口 cluster…{PORT} ##节点总线端 appendonly yes ##持久化模式

    创建redis配置文件

    mkdir docker/redisContainer/redis-cluster,进入redis-cluster目录执行下面指令 mkdir /docker/redisContainer/redis-cluster ##在home 目录下创建 集群配置文件加 cd /docker/redisContainer/redis-cluster ##在创建目录中 touch redis-cluster.tmpl ##创建模版件 for port in seq 7000 7005; do mkdir -p ./KaTeX parse error: Undefined control sequence: \ at position 13: {port}/conf \̲ ̲&& PORT={port} envsubst < ./redis-cluster.tmpl > ./KaTeX parse error: Undefined control sequence: \ at position 24: …onf/redis.conf \̲ ̲&& mkdir -p ./{port}/data; done 注释:循环7000到7005,在redis-cluster目录下创建7000~7005文件夹,在每个文件夹下创建conf、data文件夹和在conf文件夹下的redis.conf配置文件

    创建redis容器

    for port in seq 7000 7005; do docker run -d -ti -p p o r t : {port}: port:{port} -p 1 p o r t : 1 {port}:1 port:1{port} -v /docker/redisContainer/redis-cluster/KaTeX parse error: Undefined control sequence: \ at position 59: …/redis.conf:rw \̲ ̲-v /docker/redi…{port}/data:/data:rw –restart always --name redis-${port} –sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; done 注释:循环7000到7005创建以redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005的容器并运行

    查看容器是否启动成功 docker ps 查看redis容器启动失败日志 docker logs redis-7000 查看reids容器使用的网络信息 docker inspect redis-net

    进入各个redis-conf配置文件 cluster-announce-ip (对外IP),并重启各个redis:docker restart redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005

    进入任何一个redis容器

    docker exec -it redis-7000 /bin/bash

    执行集群指令 执行集群指令 redis-cli --cluster create (对外IP):7000 (对外IP):7001 (对外IP):7002 (对外IP):7003 (对外IP):7004 (对外IP):7005 --cluster-replicas 1,中间需要输入yes指令,执行成功如下

    Redis desktop manager 下载Redis Desktop Manager,reids可视化工具检验集群

    进入redis客户端

    docker exec -it redis-7000 /bin/bash 进入集群 redis-cli -c -p 7000 添加缓存key set name andy 查看缓存 get name

    新增主节点 复制7000文件夹到7006,cp -r 7000 7006 修改7006/conf/redis.conf的配置,把ip和端口改成对外IP:7006 删除7006/data下的所有文件 新建redis-7006容器 port=7006; docker run -d -ti -p {port}:{port} -p 1{port}:1{port} -v /docker/redisContainer/redis-cluster/{port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/{port}/data:/data:rw --restart always --name redis-{port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; 进入任意redis容器,docker exec -it redis-7000 /bin/bash 执行命令新增主节点 redis-cli --cluster add-node (对外IP):7006 (对外IP):7000 --cluster-master-id 1

    注释:第一个ip参数是新增节点ip地址,第二个ip为已存在的节点ip地址

    新增子节点复制7000文件夹到7007,cp -r 7000 7007

    修改7007/conf/redis.conf的配置,把ip和端口改成对外IP:7007

    删除7007/data下的所有文件

    新建redis-7007容器:

    port=7007; docker run -d -ti -p {port}:{port} -p 1{port}:1{port} -v /docker/redisContainer/redis-cluster/{port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/{port}/data:/data:rw --restart always --name redis-{port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;

    进入任意redis容器,docker exec -it redis-7000 /bin/bash

    执行命令新增主节点 redis-cli --cluster add-node (对外IP):7007 (对外IP):7000 --cluster-slave 1

    注释:第一个ip参数是新增节点ip地址,第二个ip为已存在的主节点ip地址

    写在最后

    集群不能用的情况: (1)有半数或者半数以上的master挂掉,集群就不能用了 (2)如果集群任意master挂掉,且当前master没有slave,集群不能用 注:一个主库挂掉,它的从库自动顶替为主库,正常使用(前提是:有半数或者半数以上的master能用),挂掉的主库修复好后,会成为从库,不会抢占为主

    想了解更多的docker知识,请关注我吧 _

    Processed: 0.013, SQL: 9