www.colben.cn/content/post/redis-cluster-install.md
2021-11-14 15:52:46 +08:00

11 KiB
Raw Blame History

title, date, lastmod, tags, categories
title date lastmod tags categories
CentOS7 安装 Redis 集群 2019-11-29T15:14:29+08:00 2019-11-29T15:14:29+08:00
redis
database

环境

  • 操作系统: CentOS7.7,关闭 firewalld 和 selinux
  • Redis: 5.0.6
  • master 实例
    • 10.0.4.110:6371
    • 10.0.4.110:6372
    • 10.0.4.110:6373
  • slave 实例
    • 10.0.4.111:6371
    • 10.0.4.111:6372
    • 10.0.4.111:6373

编译 redis server

  • 在 CentOS7.7 测试服务器上下载、编译
    wget http://download.redis.io/releases/redis-5.0.6.tar.gz
    tar xzf redis-5.0.6.tar.gz
    cd redis-5.0.6
    make
    
  • 抽取安装文件
    mkdir -p /opt/redis_cluster/{bin,conf}
    cp src/{redis-server,redis-cli,redis-benchmark} /opt/redis_cluster/bin/
    # redis-check-rdb 和 redis-check-aof 与 redis-server 校验值一致,无需复制
    
  • 创建 /opt/redis_cluster/conf/redis.conf常用配置如下
    bind 0.0.0.0
    protected-mode yes
    tcp-backlog 511
    timeout 3600
    tcp-keepalive 300
    daemonize no
    supervised no
    loglevel notice
    always-show-logo no
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    #masterauth "123456"
    replica-serve-stale-data yes
    replica-read-only yes
    repl-diskless-sync no
    repl-diskless-sync-delay 5
    repl-disable-tcp-nodelay no
    replica-priority 100
    #requirepass "123456"
    maxclients 10000
    maxmemory 4294967296
    maxmemory-policy volatile-lru
    lazyfree-lazy-eviction no
    lazyfree-lazy-expire no
    lazyfree-lazy-server-del no
    replica-lazy-flush no
    appendonly no
    appendfilename "appendonly.aof"
    appendfsync everysec
    no-appendfsync-on-rewrite no
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    aof-load-truncated yes
    aof-use-rdb-preamble yes
    lua-time-limit 5000
    cluster-enabled yes
    cluster-node-timeout 5000
    slowlog-log-slower-than 10000
    slowlog-max-len 128
    latency-monitor-threshold 0
    notify-keyspace-events ""
    hash-max-ziplist-entries 512
    hash-max-ziplist-value 64
    list-max-ziplist-size -2
    list-compress-depth 0
    set-max-intset-entries 512
    zset-max-ziplist-entries 128
    zset-max-ziplist-value 64
    hll-sparse-max-bytes 3000
    stream-node-max-bytes 4096
    stream-node-max-entries 100
    activerehashing yes
    client-output-buffer-limit normal 0 0 0
    client-output-buffer-limit replica 256mb 64mb 60
    client-output-buffer-limit pubsub 32mb 8mb 60
    hz 10
    dynamic-hz yes
    aof-rewrite-incremental-fsync yes
    rdb-save-incremental-fsync yes
    
  • 创建 /opt/redis_cluster/redis@.service配置如下
    [Unit]
    Description=Redis cluster -- node %i
    After=network.target
    
    [Service]
    ExecStartPre=/usr/bin/ls -d /var/lib/redis_cluster/%i
    ExecStart=/opt/redis_cluster/bin/redis-server /opt/redis_cluster/conf/redis.conf \
        --daemonize no \
        --port %i \
        --pidfile /var/run/redis_%i.pid \
        --logfile /var/log/redis_cluster/%i.log \
        --dir /var/lib/redis_cluster/%i \
        --cluster-config-file /var/lib/redis_cluster/%i/nodes.conf
    ExecStop=/opt/redis_cluster/bin/redis-cli -h 127.0.0.1 -p %i shutdown
    Restart=on-failure
    RestartSec=1
    
    [Install]
    WantedBy=multi-user.target
    

部署

  • 把测试机的 /opt/redis_cluster 目录复制到 10.0.4.110 和 10.0.4.111 上
    scp -r /opt/redis_cluster 10.0.4.110:/opt/
    scp -r /opt/redis_cluster 10.0.4.111:/opt/
    
  • 在 10.0.4.110 和 10.0.4.111 上都执行以下操作
    mv /opt/redis_cluster/redis@.service /usr/lib/systemd/system/
    systemctl daemon-reload
    mkdir -p /var/lib/redis_cluster/{6371..6373}
    mkdir -p /var/log/redis_cluster
    
  • 在 10.0.4.110 和 10.0.4.111 上配置实例开机启动
    systemctl enable redis@6371
    systemctl enable redis@6372
    systemctl enable redis@6373
    
  • 在 10.0.4.110 和 10.0.4.111 上启动全部实例
    systemctl start redis@6371
    systemctl start redis@6372
    systemctl start redis@6373
    

配置集群

  • 在 10.0.4.110 或 10.0.4.111 上创建集群,指定三个 master 实例
    /opt/redis_cluster/bin/redis-cli \
        --cluster create 10.0.4.110:6371 10.0.4.110:6372 10.0.4.110:6373
    
  • 输出如下图
  • 同意配置,输入 "yes",回车后输出如下图
  • 查看集群当前实例
    /opt/redis_cluster/bin/redis-cli -p 6371 cluster nodes
    
  • 输出如下图
  • 添加 slave 实例 10.0.4.111:6371同步 master 10.0.4.110:6371
    /opt/redis_cluster/bin/redis-cli \
        --cluster add-node 10.0.4.111:6371 10.0.4.110:6371 \
        --cluster-slave \
        --cluster-master-id 5be0edaf74d1eec50bbe675f9698397023a943b7
    # 上述命令中10.0.4.111:6371 是待添加实例10.0.4.110:6371 是已存在集群中的任一实例
    # --cluster-slave 指定添加 slave 实例
    # --cluster-master-id 指定 10.0.4.110:6371 的 id即本次添加实例的 master
    
  • 输出如下图
  • 添加 slave 实例 10.0.4.111:6372同步 master 10.0.4.110:6372
    /opt/redis_cluster/bin/redis-cli \
        --cluster add-node 10.0.4.111:6372 10.0.4.110:6371 \
        --cluster-slave \
        --cluster-master-id 96f2225fdd054d8a16b31726fd1eb0b66c612646
    
  • 输出如下图
  • 添加 slave 实例 10.0.4.111:6373同步 master 10.0.4.110:6373
    /opt/redis_cluster/bin/redis-cli \
        --cluster add-node 10.0.4.111:6373 10.0.4.110:6371 \
        --cluster-slave \
        --cluster-master-id cd60c238e66c8b4a31355bee4610444a47acef86
    
  • 输出如下图
  • 查看集群当前实例
    /opt/redis_cluster/bin/redis-cli -p 6371 cluster nodes
    
  • 输出如下图

Docker 部署

  • 安装 docker-ce参考这里

  • 安装 docker-compose参考这里

  • 选择一个较大分区,创建 redis 集群数据目录和日志目录

    mkdir -p redis_cluster/{db,log}/{6371..6376}
    
  • 在同级目录下创建 docker-compose.yml 文件,内容如下

    version: "3.7"
    
    services:
      redis-6371:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6371
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6371
          _CENV_maxmemory: 256MB
          # master 和 slave 实例的密码必须一致,可都为空
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
          # master 节点列表
          MASTER_NODES: "127.0.0.1:6371 127.0.0.1:6372 127.0.0.1:6373"
          # slave 节点列表
          # 可以为空,表示没有 slave 节点
          # 不为空时,数量必须与 master 节点数量一致,按顺序依次为 master 节点的从节点
          SLAVE_NODES: "127.0.0.1:6374 127.0.0.1:6375 127.0.0.1:6376"
        volumes:
        - type: bind
          source: ./redis_cluster/db/6371
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6371
          target: /var/log/redis
    
      redis-6372:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6372
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6372
          _CENV_maxmemory: 256MB
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
        volumes:
        - type: bind
          source: ./redis_cluster/db/6372
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6372
          target: /var/log/redis
    
      redis-6373:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6373
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6373
          _CENV_maxmemory: 256MB
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
        volumes:
        - type: bind
          source: ./redis_cluster/db/6373
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6373
          target: /var/log/redis
    
      redis-6374:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6374
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6374
          _CENV_maxmemory: 256MB
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
        volumes:
        - type: bind
          source: ./redis_cluster/db/6374
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6374
          target: /var/log/redis
    
      redis-6375:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6375
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6375
          _CENV_maxmemory: 256MB
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
        volumes:
        - type: bind
          source: ./redis_cluster/db/6375
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6375
          target: /var/log/redis
    
      redis-6376:
        image: harbor.colben.cn/general/alpine-redis
        container_name: redis-6376
        restart: on-failure
        stop_grace_period: 1m
        privileged: true
        network_mode: "host"
        environment:
          _CENV_cluster-enabled: "yes"
          _CENV_port: 6376
          _CENV_maxmemory: 256MB
          _CENV_masterauth: Pass_1234
          _CENV_requirepass: Pass_1234
        volumes:
        - type: bind
          source: ./redis_cluster/db/6376
          target: /var/lib/redis
        - type: bind
          source: ./redis_cluster/log/6376
          target: /var/log/redis
    
  • 启动 redis 集群

    docker-compose up -d
    

参考