• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    docker redis5.0 cluster集群搭建的实现

    系统环境:ubuntu16.04LTS

    本文是使用 6 个 docker 容器搭建单机集群测试,实际环境如果是多台,可对应修改容器数量、端口号和集群 ip 地址,每台机器都按下面步骤同样操作即可。

    拉取redis官方镜像

    docker pull redis:5.0
    

    创建配置文件和数据目录

    创建目录

    mkdir ~/redis_cluster
    cd ~/redis_cluster

    新建一个模板文件sudo vim redis_cluster.tmpl,填入如下内容:

    # redis端口
    port ${PORT}
    
    # 关闭保护模式
    protected-mode no
    
    # 开启集群
    cluster-enabled yes
    
    # 集群节点配置
    cluster-config-file nodes.conf
    
    # 超时
    cluster-node-timeout 5000
    
    # 集群节点IP host模式为宿主机IP
    cluster-announce-ip 10.10.100.197
    
    # 集群节点端口 7000 - 7005
    cluster-announce-port ${PORT}
    cluster-announce-bus-port 1${PORT}
    
    # 开启 appendonly 备份模式
    appendonly yes
    
    # 每秒钟备份
    appendfsync everysec
    
    # 对aof文件进行压缩时,是否执行同步操作
    no-appendfsync-on-rewrite no
    
    # 当目前aof文件大小超过上一次重写时的aof文件大小的100%时会再次进行重写
    auto-aof-rewrite-percentage 100
    
    # 重写前AOF文件的大小最小值 默认 64mb
    auto-aof-rewrite-min-size 5120mb
    
    # 关闭快照备份
    save ""
    
    

    批量创建配置文件和数据目录,终端运行以下命令:

    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
    

    批量启动 redis 容器

    容器的 ip 地址采用 host 模式:

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

    这里的--memeory=1G是限制单个 docker 容器占用内存大小为 1G,超过会被进程杀死。运行时可能会出现...Memory limited without swap...这个警告,可以忽略。如不需要限制内存,可以去掉--memeory参数。

    创建集群

    随便进入其中一个容器:

    docker exec -it redis-7000 bash

    进入后执行如下命令创建集群:

    redis-cli --cluster create 10.10.100.197:7000 10.10.100.197:7001 10.10.100.197:7002 10.10.100.197:7003 10.10.100.197:7004 10.10.100.197:7005 --cluster-replicas 1
    

    安装redis-cli命令(如已有可跳过此步):

    sudo apt install redis-tools
    

    输入yes后,集群创建完毕,exit退出 docker,接着登录其中一个节点,验证集群可用性:

    redis-cli -c -p 7000
    

    输入cluster nodes查看集群状态

    127.0.0.1:7000> cluster nodes
    06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 connected
    a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 connected
    e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 master - 0 1567671902582 3 connected 10923-16383
    0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 myself,master - 0 1567671901000 1 connected 0-5460
    8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 master - 0 1567671902383 2 connected 5461-10922
    fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 connected
    

    设置集群密码

    设置密码为什么不在上面的步骤,利用模板文件批量创建配置文件的时候就写进去?

    无论是在 redis5.x 版本,还是以前的 redis 版本利用 ruby 创建集群的方式,在redis-cli --cluster create创建集群的环节没有密码参数配置,所以我们需要创建完集群再设置密码。

    我们用config set方式分别为每一个节点设置相同的密码(不需要重启 redis,且重启后依然有效),在此之前先给所有 redis 配置文件加w权限,不然密码无法保存到文件。

    注意当前路径依然是在~/redis_cluster/:

    for port in `seq 7000 7005`; do \
    
     chmod a+w ./${port}/conf/redis.conf; \
    
    done
    

    下面用一台做示例:

    登录一个节点:

    redis-cli -c -p 7000

    设置密码:

    127.0.0.1:7000> config set masterauth 123456
    OK
    127.0.0.1:7000> config set requirepass 123456
    OK
    127.0.0.1:7000> auth 123456
    OK
    127.0.0.1:7000> config rewrite
    OK

    后面几台执行同样的操作即可。

    集群写入数据简单测试

    随便登录一个集群节点:

    redis-cli -c -p 7003 -a 123456

    写入数据:

    127.0.0.1:7003> set va 1
    -> Redirected to slot [7800] located at 10.10.100.197:7001
    OK
    10.10.100.197:7001> get va
    "1"
    10.10.100.197:7001> del va
    (integer) 1
    

    可以看到,集群中任意节点写入数据,在其他任意节点都能读到。

    至此,redis 集群搭建完成。

    其他注意事项

    for port in `seq 7000 7005`; do \
    
     docker stop redis-${port};
     docker rm redis-${port};
    done
    
    

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    上一篇:Linux安装Python3.8.1的教程详解
    下一篇:VMware Workstation上虚拟机与vSphere上的相互迁移(图文)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    docker redis5.0 cluster集群搭建的实现 docker,redis5.0,cluster,集群,