docker 部署redis集群

docker部署redis集群

部署方式这里没有采用哨兵模式,而是使用 分片+高可用+负载均衡的模式,架构图 ,至少启动6个容器
在这里插入图片描述

  1. 创建网卡
    docker network create redis --subnet 192.168.0.0/16

  2. 通过脚本创建6个redis配置

    for port in $(seq 1 6); \
    do \
    mkdir -p /mydata/redis/node-${port}/conf
    touch /mydata/redis/node-${port}/conf/redis.conf
    cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
    port 6379
    bind 0.0.0.0
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 192.168.0.1${port}
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    appendonly yes
    EOF
    done 
    
  3. docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port}\
    -v /mydata/redis/node-${port}/data:/data \
    -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis --ip 192.168.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; \
    
    docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
    -v /mydata/redis/node-1/data:/data \
    -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
    -d --net redis --ip 192.168.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf; 
    docker run -p 6372:6379 -p 16372:16379 --name redis-2  -v /mydata/redis/node-2/data:/data -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.168.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
    docker run -p 6373:6379 -p 16373:16379 --name redis-3  -v /mydata/redis/node-3/data:/data -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.168.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
    docker run -p 6374:6379 -p 16374:16379 --name redis-4  -v /mydata/redis/node-4/data:/data -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.168.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
    docker run -p 6375:6379 -p 16375:16379 --name redis-5  -v /mydata/redis/node-5/data:/data -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.168.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
    docker run -p 6376:6379 -p 16376:16379 --name redis-6  -v /mydata/redis/node-6/data:/data -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf  -d --net redis --ip 192.168.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
    
  4. 创建集群

 redis-cli --cluster create 192.168.0.11:6379 192.168.0.12:6379 192.168.0.13:6379 192.168.0.14:6379 192.168.0.15:6379 192.168.0.16:6379 --cluster-replicas 1
  1. 进入到某个redis docker容器中执行4的命令,会出现下列信息,说明集群已经创建成功
    在这里插入图片描述
  2. 在redis的docker容器中,执行redis-cli -c 进入到命令行,到此部署就完成了。接下来你可以随便停一个redis容器,可以测试一下高可用。
使用 Docker 部署 Redis 集群,可按以下详细步骤操作: ### 1. 配置 Redis 容器和网络 - **创建自定义网络**:使用 `docker network create` 命令创建一个自定义的网络,用于 Redis 集群节点之间的通信。示例命令如下: ```bash docker network create redis-net ``` - **生成配置信息**:在当前目录下生成 `conf` 和 `data` 目录,并为每个节点生成配置文件。以下是一个示例脚本,创建 7001 - 7003 端口的节点配置: ```bash for port in `seq 7001 7003`; do mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; done ``` 若不想设置密码,可把 `masterauth` 和 `requirepass` 注释掉 [^4]。 ### 2. 启动 Redis 容器 - **使用 Dockerfile 构建并启动(可选)**:在 `redis` 目录下创建 `Dockerfile` 进行编辑,示例如下: ```dockerfile # 第一阶段:构建阶段 FROM ubuntu:22.04 AS buildstage # 更新包列表并安装必要的构建工具和依赖 RUN apt-get update && apt-get install -y \ build-essential \ wget \ gcc \ g++ \ make \ && rm -rf /var/lib/apt/lists/* # 下载 Redis 源码和配置文件 ADD redis-7.0.15.tar.gz / ADD redis.conf /redis/ # 切换到 Redis 源码目录并编译 WORKDIR /redis-7.0.15 RUN make # 将 Redis 可执行文件移动到指定目录 RUN mv /redis-7.0.15/src/redis-server /redis/ && mv /redis-7.0.15/src/redis-cli /redis/ ENTRYPOINT ["/redis/redis-server", "/redis/redis.conf"] # 第二阶段:运行阶段 FROM ubuntu:22.04 RUN mkdir -p /data/redis && mkdir -p /redis COPY --from=buildstage /redis /redis EXPOSE 6379 ENTRYPOINT ["/redis/redis-server", "/redis/redis.conf"] ``` 构建并启动容器。 - **直接使用 Docker 命令启动**:使用 `docker run` 命令启动 Redis 容器,挂载配置文件和数据卷。示例命令如下: ```bash for port in `seq 7001 7003`; do docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /opt/redis/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /opt/redis/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis:6.0.5-alpine redis-server /usr/local/etc/redis/redis.conf; done ``` 此命令会创建 3 个 Redis 容器,分别监听 7001 - 7003 端口 [^2][^4]。 ### 3. 设置 Redis 集群 - **创建集群**:使用 `redis-cli` 工具创建 Redis 集群。在创建过程中可能会遇到异常,需要进行相应处理。 - **集群创建异常处理**:若创建过程中出现问题,需根据具体错误信息进行排查和修复,如检查网络连接、配置文件是否正确等 [^1]。 ### 4. 验证和测试 - **数据测试**:通过 `redis-cli` 连接到集群中的一个节点,进行数据的读写操作,验证集群是否正常工作。 - **集群上下线测试**:模拟节点的上线和下线操作,检查集群的容错能力和数据迁移情况 [^1]。 ### 5. 部署总结 完成上述步骤后,对整个部署过程进行总结,检查是否达到预期效果,如有需要可进行调整和优化 [^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值