docker部署redis集群5.0过程整理

    技术2025-08-09  23

    目录

    前言

    环境准备

    获取镜像   

    redis 集群

    1.创建redis配置文件(redis-cluster.tmpl)

    2.创建自定义的network

    3.创建集群机器所有的文件夹,默认创建6个

    4.创建docker容器,默认创建6个

    5.集群设置密码

    1.在创建集群时

    2.创建集群后依次进入节点设置

    参考资料


    前言

    redis作为一个开源的内存存储数据服务器,被当作数据库,高速缓存,消息队列大量使用。通常在测试环境我们用单节点的redis就能够用,正式环境用集群模式(避免单点问题等)。在这里我记录下我一次搭建redis集群的过程,避免下次踩坑,redis的集群模式有多样,这里不做赘述,我选的是cluster模式。

    环境准备

    服务器安装docker

    获取镜像   

    目前较为稳定的5.0版本

    docker pull redis:5.0-rc

    redis 集群

    1.创建redis配置文件(redis-cluster.tmpl)

    注意如果是想自定义路径的话,请保证这里的 文件夹路径和第3和第4步的路径是一致的,如果是直接复制过去命令就不用管了

    我在路径/data下创建一个文件夹redis-cluster,在路径/data/redis-cluster下创建一个文件redis-cluster.tmpl,并把以下内容复制过去。(注:路径可自定义,我用的是/data/redis-cluster)

    其中ip如果是本地调用可以用内网ip,如果是外网集群必须使用公网ip然后配置安全组开放端口

    port ${PORT} protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip xx.xx.xx.xx cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes

    2.创建自定义的network

    (可以省略,省略的话删除后面脚本里关于指定网络的命令,主要是为了好区分)

    docker network create redis-net cd /data/redis-cluster

     

    3.创建集群机器所有的文件夹,默认创建6个

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

    4.创建docker容器,默认创建6个

    for port in `seq 7000 7005`; do \ docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \ -v /data/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /data/redis-cluster/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ --sysctl net.core.somaxconn=1024 redis:5.0-rc redis-server /usr/local/etc/redis/redis.conf; \ done

     

    最新的创建集群方式使用5.0里面带的redis-cli

    docker exec -ti redis-7000 /bin/bash redis-cli --cluster create 172.18.0.7:7000 172.18.0.8:7001 172.18.0.9:7002 172.18.0.10:7003 172.18.0.11:7004 172.18.0.12:7005 --cluster-replicas 1

     

    出现下图即为成功

    Using 3 masters:

    172.18.0.2:7000

    172.18.0.3:7001

    172.18.0.4:7002

    这三个是主服务,客户端配置连这三个就行

    运行这个可能出现的错误是redis服务器插槽忙碌

    需要登录每一个redis容器重置一下状态

     

     

    docker run -it --link redis-7000:redis --net redis-net --rm redis redis-cli -h redis -p 7000 flushall cluster reset docker run -it --link redis-7001:redis --net redis-net --rm redis redis-cli -h redis -p 7001 flushall cluster reset docker run -it --link redis-7002:redis --net redis-net --rm redis redis-cli -h redis -p 7002 flushall cluster reset docker run -it --link redis-7003:redis --net redis-net --rm redis redis-cli -h redis -p 7003 flushall cluster reset docker run -it --link redis-7004:redis --net redis-net --rm redis redis-cli -h redis -p 7004 flushall cluster reset docker run -it --link redis-7005:redis --net redis-net --rm redis redis-cli -h redis -p 7005 flushall cluster reset

     

    使用redis客户端既可以在本地装一个redis然后借用他的客户端

    redis-cli -c -p 7000

    也可以映射redis容器的客户端

    docker run -it --link redis-7000:redis  --net redis-net --rm redis redis-cli -c -h redis -p 7000

    登录后使用  cluster info 查看集群状态

    注意命令行连接集群需要加-c 的参数,否则会出现(error) MOVED错误

     

    如果你想远程连接的话

    redis-cli -c -h 172.18.0.2 -p 7000 #查询集群结点信息; cluster nodes  #查询集群状态信。 cluster info 

    5.集群设置密码

    1.在创建集群时

    redis-cli --cluster create 172.18.0.7:7000 172.18.0.8:7001 172.18.0.9:7002 172.18.0.10:7003 172.18.0.11:7004 172.18.0.12:7005 --cluster-replicas 1 -a pass

     

    2.创建集群后依次进入节点设置

    config set masterauth pass config set requirepass pass

     

    参考资料

    https://my.oschina.net/liuguangqiang/blog/2245410

     

     

     

     
    Processed: 0.009, SQL: 9