美文网首页
redis集群搭建

redis集群搭建

作者: ZplD | 来源:发表于2022-06-30 15:31 被阅读0次

    部署机器:
    10-104-4-139
    10-102-1-143
    10-102-0-3
    主节点3个, 从节点3个
    部署方法:
    docker
    三台机器主从交替防止主从都在一台机器情况下机器宕机的时候没有从节点能够恢复
    一、docker环境搭建

    // 安装docker
    yum install docker
    // 启动
    systemctl start docker
    // 设置开机启动
    systemctl enable docker
    // 安装docker-compose
    yum install dokcer-compose
    

    二、docker-compose编写
    将redis-cluster(一主一从)容器与redis-exporter(用于prometheus监控使用)结合到一起

    version: '3.3'
    services:
      redis-node-1:
        image: redis:6.2.4
        container_name: redis-node-1
        restart: always
        dns_search: .
        volumes:
          - "/usr/local/redis/etc/redis-node-1.conf:/etc/redis/redis.conf"
          - "/usr/local/redis/data/redis-node-1:/data"
    #      - "/usr/local/redis/log/redis-node-1.log:/tmp/redis.log"
        network_mode: host
        command: redis-server /etc/redis/redis.conf
    
      redis-exporter-node-1:
        image: bitnami/redis-exporter:latest
        container_name: redis-node-1-exporter
        restart: always
        dns_search: .
        ports:
          - "9122:9121"
        networks:
          - redis-net
        entrypoint: redis_exporter --redis.addr 172.17.0.1:6391 --redis.password de22760d7e6ffdd8b288bf986c54e085
    
      redis-node-2:
        image: redis:6.2.4
        container_name: redis-node-2
        restart: always
        dns_search: .
        volumes:
          - "/usr/local/redis/etc/redis-node-2.conf:/etc/redis/redis.conf"
          - "/usr/local/redis/data/redis-node-2:/data"
    #      - "/usr/local/redis/log/redis-node-2.log:/tmp/redis.log"
        network_mode: host
        command: redis-server /etc/redis/redis.conf
    
      redis-exporter-node-2:
        image: bitnami/redis-exporter:latest
        container_name: redis-node-2-exporter
        restart: always
        dns_search: .
        ports:
          - "9123:9121"
        networks:
          - redis-net
        entrypoint: redis_exporter --redis.addr 172.17.0.1:6392 --redis.password de22760d7e6ffdd8b288bf986c54e085
    
    networks:
      redis-net:
        driver: bridge
    
    

    redis配置

    # 配置详情参考https://blog.csdn.net/weixin_44236477/article/details/120339537
    # 端口需要改成具体端口
    port 6391
    bind 0.0.0.0
    loglevel warning
    # 如果要使用docker的标准输出就注释该条
    # logfile /tmp/redis.log
    stop-writes-on-bgsave-error yes
    rdbcompression no
    rdbchecksum no
    masterauth "de22760d7e6ffdd8b288bf986c54e085"
    requirepass "de22760d7e6ffdd8b288bf986c54e085"
    # 保护模式如果开启的话无法远程链接
    protected-mode no
    cluster-enabled yes
    # 记录集群节点信息
    cluster-config-file nodes.conf
    # 集群节点之间连接的超时时间(超过这个时间可能会导致被认为挂掉导致频繁的主从切换, 最好设置稍微大点这里设置12s)
    cluster-node-timeout 12000
    # 开启appendonly备份模式
    appendonly yes
    # 每秒钟备份
    appendfsync everysec
    # 对aof文件进行压缩时是否执行同步操作
    no-appendfsync-on-rewrite no
    # 当当前aof文件大小超过上一次重写的aof文件大小的100%会再次进行重写 默认为100
    auto-aof-rewrite-percentage 200
    # 重写aof文件的大小最小值 默认为64mb
    auto-aof-rewrite-min-size 1024mb
    # 可以配置值为1。master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。
    cluster-migration-barrier 1
    # 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。  设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致
    cluster-require-full-coverage no
    # 一个lua脚本执行的最大时间,单位为ms 默认5000
    lua-time-limit 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-entries 512
    list-max-ziplist-value 64
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit slave 512mb 215mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    repl-backlog-size 100mb
    repl-backlog-ttl 3600
    rename-command FLUSHALL ""
    rename-command FLUSHDB ""
    

    三、环境配置以及启动
    在对应的三台机器依次执行

    mkdir -p /usr/local/redis && cd /usr/local/redis
    mkdir data && mkdir etc && cd etc
    vim redis-node-1.conf (将上面的redis配置复制进去)
    vim redis-node-2.conf (同上)
    vim docker-compose.yml(将上面docker-compose复制进行)
    // 切记, 如果有开启防火墙的话要开放redis的端口一起redis端口+10000端口(比如6379 16379)
    vim /etc/sysconfig/iptables
    -A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 6391,6392,16391,16392 -j ACCEPT (复制该句其中端口为你redis的端口 最好放到文件前面)
    systemctl restart iptables
    systemctl restart docker (docker没有对宿主机防火墙的权限所以需要重启同步)
    // 启动容器, 如果出现该错误ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule则重启docker(systemctl restart docker)
    docker-compose -f docker-compose.yml up -d 
    

    切记docker搭建redis集群不支持自建网络!!!否则在创建集群的时候会一直等待加入


    image.png

    四、redis集群构建

    // 随意进入一台集群机器
    redis-cli  -h 10.102.1.143 -p 6391 -a de22760d7e6ffdd8b288bf986c54e085  --cluster  create  10.104.4.139:6391  10.104.4.139:6392  10.102.0.3:6391  10.102.0.3:6392  10.102.1.143:6391  10.102.1.143:6392  --cluster-replicas  1
    
    
    image.png

    五、管理平台以及监控

    1. 搭建集群管理平台redisinsight
    mkdir -p /usr/local/redisinsight
    chmod 777 /usr/local/redisinsight
    docker run -d --restart=always --name redisinsight -v /usr/local/redisinsight:/db -p 8001:8001 redislabs/redisinsight:latest
    // 需要做内存分析的把自己rdb的目录也挂载进去
    
    image.png
    1. 将redis-exporter注册进prometheus
      这边promehteus采用consul做服务发现所以忘consul里面注册服务就行


      image.png
      image.png

    相关文章

      网友评论

          本文标题:redis集群搭建

          本文链接:https://www.haomeiwen.com/subject/pwifbrtx.html