2019年1月21日 星期一

[Redis] 建立Docker Redis cluster 4.0

[Redis] 建立Docker Redis cluster 4.0

以下為當初練習的筆記
測試環境:

  • CentOS 7
  • Docker version 18.03.1-ce, build 9ee9f40
  • Redis server v=4.0.9

建立 Redis-Cluster

  • 前置套件

    • docker
  • 建立步驟

    • 建立Redis資料夾

      mkdir redis
      
    • 第一次先開啟防火牆(開啟7001~7006 & 17001~17006 防火牆)

      seq 1 6 | xargs -i -t sudo bash -c "sudo firewall-cmd --add-port=700{}/tcp --permanent && sudo firewall-cmd --add-port=1700{}/tcp --permanent"
      sudo firewall-cmd --reload
      
    • 進入建立好的目錄

      cd redis
      
    • 建立Redis-Cluster資料夾,編寫 redis 設定檔(內容中的192.168.188.XX請修改為自己的IP)

      # 建立資料夾
      seq 1 6 | xargs -i sudo mkdir -p $PWD/700{}/data/logs
      
      # 編寫 redis 設定檔
      seq 1 6 | xargs -i -t sudo bash -c "\
      printf \"port 700{}\n\
      cluster-enabled yes\n\
      cluster-config-file nodes.conf\n\
      cluster-node-timeout 5000\n\
      cluster-announce-ip 192.168.188.XX\n\
      cluster-announce-port 700{}\n\
      cluster-announce-bus-port 1700{}\n\
      appendonly yes\n\
      logfile /data/logs/redis.log\" > $PWD/700{}/redis.conf"
      
    • 建立 redis.sh

      vi redis.sh
      
    • 建立redis.sh內容

      #!/usr/bin/env bash
      
      # 創建自定義網路(redis-net)
      [ ! "$(docker network ls | grep redis-net)" ] && docker network create redis-net
      
      # 啟動 redis docker container
      seq 1 6 | xargs -i -t sudo bash -c "sudo docker run -d \
          -p 700{}:700{} -p 1700{}:1700{} \
          -v $PWD/700{}/redis.conf:/usr/local/etc/redis/redis.conf \
          -v $PWD/700{}/data:/data \
          --restart always \
          --net redis-net \
          --name redis-700{} \
          --sysctl net.core.somaxconn=1024 \
          redis:alpine redis-server /usr/local/etc/redis/redis.conf"
      
      sleep 2
      
      # 安裝 redis client + 取得 redis cluster script + 建立 redis cluster
      echo yes | docker run -i --rm --net redis-net ruby sh -c '\
        gem install redis \
        && wget http://download.redis.io/redis-stable/src/redis-trib.rb \
        && ruby redis-trib.rb create --replicas 1 \
        '"$(for port in `seq 7001 7006`; do \
          echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
        done)"
      
    • 設定redis.sh執行權限

      chmod 744 redis.sh
      
    • 以上為第一次設定,之後可直接執行bash即可建立redis cluster

      ./redis.sh
      
  • 相關指令

    • start a redis instance

      docker run -it --rm redis:alpine sh
      
    • 查詢redis 版本(redis sh)

      redis-server --version
      
    • 連接redis(redis sh)

      redis-cli -c -h 192.168.188.XX -p 7001
      
    • 清空 redis 資料(redis sh)

      redis-cli -c -h 192.168.188.XX -p 7001 flushall
      
    • 查看節點分布訊息(redis sh)

      cluster nodes
      
    • 查看slots分布訊息(redis sh)

      cluster slots
      

What changed in 4.0?

  • cluster-announce-ip: The IP address to announce.
  • cluster-announce-port: The data port to announce.
  • cluster-announce-bus-port: The cluster bus port to announce.

參考連結

如有錯誤或建議,歡迎留言指教,謝謝!!
(相關內容如有侵犯隱私或著作權,請協助通知刪除,感謝)

沒有留言:

張貼留言