docker搭建redisCluseter(redis5.0版本,采用redis cli安装)

    xiaoxiao2022-07-12  205

    1,装镜像

    docker pull redis

    2,宿主机创建配置文件

    1,在 /home 下新建 redis-cluster 文件夹,然后创建 redis-cluster.tmpl 文件,文件内容如下

    port ${PORT} protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 192.168.1.157#这是服务器公网地址 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} appendonly yes

    3,创建自定义docker net

    docker network create redis-net

    4,在/home/redis-cluster下生成conf和data目标,并生成配置信息

    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

    共生成6个文件夹,从7000到7005,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件

    5, 创建6个redis容器

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

    注意创建redis容器的时候添加了两个端口映射,一个普通的端口的访问端口映射,一个是总线端口映射,这两个端口都应该添加到安全组。

    6,查看docker容器 ip

    docker inspect redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 | grep IPAddress

    7,随便进入一个容器

    docker exec -it redis-7000 bash

    8,执行命令

    /usr/local/bin/redis-cli --cluster create \ 172.20.0.2:7000 \ 172.20.0.3:7001 \ 172.20.0.4:7002 \ 172.20.0.5:7003 \ 172.20.0.6:7004 \ 172.20.0.7:7005 \ --cluster-replicas 1

    以上ip为容器在docker内的ip

    6,常见问题

    1)redis创建集群时显示错误: [ERR] Node xxx is not empty. Either the node already knows other no…

    这是由于上次redis集群没有配置成功,生成了每个节点的配置文件和db的备份文件,所以才会产生这个错误。

    解决办法:

    1、使用redis-cli -c -h -p登录每个redis节点,使用以下命令

    flushdb cluster reset

    最新回复(0)