日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 環境準備
  • Docker
  • 搭建Swarm集群
    • 打開防火墻(Swarm需要)
    • 創建Swarm
    • 加入Swarm
    • 服務約束
  • 單機集群
    • 創建容器
    • 啟動容器
    • 進入容器啟動集群
  • 分布式集群
    • 部署
      • docker compose.yml
      • wait-for-it.sh
      • redis-start.sh
      • 啟動
      • 目錄結構
    • 撤銷部署
      • 測試
        • 問題
        • 腳本下載+快速啟動

          之前嘗試用swarm部署redis集群時網上看了很多帖子,發現大多數都是單機集群,也就是在一個服務器上啟多個redis容器,然后進入其中一個容器執行redis搭建,經過研究,我實現了只需要通過docker-compose.yml文件和一個啟動命令就完成redis分布式部署的方式,讓其分別部署在不同機器上,并實現集群搭建。

          環境準備

          四臺虛擬機

          • 192.168.2.38(管理節點)
          • 192.168.2.81(工作節點)
          • 192.168.2.100(工作節點)
          • 192.168.2.102(工作節點)

          時間同步

          每臺機器都執行

          yum install -y ntp
          cat <<EOF>>/var/spool/cron/root
          00 12 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w
          EOF
          ##查看計劃任務
          crontab -l
          ##手動執行
          /usr/sbin/ntpdate -u ntp1.aliyun.com && /usr/sbin/hwclock -w
          

          Docker

          安裝Docker

          curl -sSL https://get.daocloud.io/docker | sh

          啟動docker

          sudo systemctl start docker

          搭建Swarm集群

          打開防火墻(Swarm需要)

          管理節點打開2377

          # manager
          firewall-cmd --zone=public --add-port=2377/tcp --permanent

          所有節點打開以下端口

          # 所有node
          firewall-cmd --zone=public --add-port=7946/tcp --permanent
          firewall-cmd --zone=public --add-port=7946/udp --permanent
          firewall-cmd --zone=public --add-port=4789/tcp --permanent
          firewall-cmd --zone=public --add-port=4789/udp --permanent

          所有節點重啟防火墻

          # 所有node
          firewall-cmd --reload
          systemctl restart docker

          圖個方便可以直接關閉防火墻

          創建Swarm

          docker swarm init --advertise-addr your_manager_ip

          查看join-token

          [root@manager ~]# docker swarm join-token worker
          To add a worker to this swarm, run the following command:
          
              docker swarm join --token SWMTKN-1-51b7t8whxn8j6mdjt5perjmec9u8qguxq8tern9nill737pra2-ejc5nw5f90oz6xldcbmrl2ztu 192.168.2.61:2377
          
          [root@manager ~]# 

          加入Swarm

          docker swarm join --token SWMTKN-1-
          51b7t8whxn8j6mdjt5perjmec9u8qguxq8tern9nill737pra2-ejc5nw5f90oz6xldcbmrl2ztu
          192.168.2.38:2377
          #查看節點
          docker node ls

          服務約束

          添加label

          sudo docker node update --label-add redis1=true 管理節點名稱
          sudo docker node update --label-add redis2=true 工作節點名稱
          sudo docker node update --label-add redis3=true 工作節點名稱
          sudo docker node update --label-add redis4=true 工作節點名稱

          單機集群

          弊端:容器都部署在一個機器上,機器掛了,就全掛了。

          創建容器

          Tips:這里可以寫個腳本啟動,因為這種方式不常用,這里就不寫那個腳本了

          docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379
          docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380
          docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381
          docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382
          docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383
          docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384

          啟動容器

          docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6
          

          進入容器啟動集群

          # 進入其中一個節點
          docker exec -it redis-node1 /bin/bash
          # 創建集群
          redis-cli --cluster create 192.168.2.38:6379 192.168.2.38:6380 192.168.2.38:6381 192.168.2.38:6382 192.168.2.38:6383 192.168.2.38:6384 --cluster-replicas 1
          # --cluster-replicas 1 一比一,一主一從
          

          分布式集群

          redis集群至少需要3個主節點,所以這里搭建三主三從的集群,由于只有4臺機器,所以在腳本中把前三個節點放到一臺機器上了。

          部署

          在swarm集群的Manager節點中創建

          mkdir /root/redis-swarm
          cd /root/redis-swarm
          vi docker-compose.yml

          docker compose.yml

          說明:

          • 前6個服務為redis節點,最后一個redis-start是用于創建集群,利用redis-cli客戶端搭建集群,該服務搭建完redis集群后會自動停止運行。
          • redis-start需要等待前6個redis節點的執行完畢才能創建集群,因此需要用到腳本wait-for-it.sh
          • 由于redis-cli –cluster create不支持網絡別名,所以另寫腳本redis-start.sh

          使用這套腳本同樣可以單機部署集群,只需要在啟動時不使用swarm啟動就可以了,然后把docker-compose.yml中的網絡模式driver: overlay給注釋掉即可

          version: '3.7'
          services:
            redis-node1:
              image: redis
              hostname: redis-node1
              ports:
                - 6379:6379
              networks:
                - redis-swarm
              volumes:
                - "node1:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-1.conf
              deploy:
                mode: replicated
                replicas: 1
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                placement:
                  constraints:
                    - node.role==manager
          
            redis-node2:
              image: redis
              hostname: redis-node2
              ports:
                - 6380:6379
              networks:
                - redis-swarm
              volumes:
                - "node2:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-2.conf
              deploy:
                mode: replicated
                replicas: 1
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                placement:
                  constraints:
                    - node.role==manager
          
            redis-node3:
              image: redis
              hostname: redis-node3
              ports:
                - 6381:6379
              networks:
                - redis-swarm
              volumes:
                - "node3:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-3.conf
              deploy:
                mode: replicated
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                replicas: 1
                placement:
                  constraints:
                    - node.role==manager
          
            redis-node4:
              image: redis
              hostname: redis-node4
              ports:
                - 6382:6379
              networks:
                - redis-swarm
              volumes:
                - "node4:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-4.conf
              deploy:
                mode: replicated
                replicas: 1
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                placement:
                  constraints:
                    - node.labels.redis2==true
          
            redis-node5:
              image: redis
              hostname: redis-node5
              ports:
                - 6383:6379
              networks:
                - redis-swarm
              volumes:
                - "node5:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-5.conf
              deploy:
                mode: replicated
                replicas: 1
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                placement:
                  constraints:
                    - node.labels.redis3==true
          
            redis-node6:
              image: redis
              hostname: redis-node6
              ports:
                - 6384:6379
              networks:
                - redis-swarm
              volumes:
                - "node6:/data"
              command: redis-server --cluster-enabled yes --cluster-config-file nodes-node-6.conf
              deploy:
                mode: replicated
                replicas: 1
                resources:
                  limits:
                    # cpus: '0.001'
                    memory: 5120M
                  reservations:
                    # cpus: '0.001'
                    memory: 512M
                placement:
                  constraints:
                    - node.labels.redis4==true
          
            redis-start:
              image: redis
              hostname: redis-start
              networks:
                - redis-swarm
              volumes:
                - "$PWD/start:/redis-start"
              depends_on:
                - redis-node1
                - redis-node2
                - redis-node3
                - redis-node4
                - redis-node5
                - redis-node6
              command: /bin/bash -c "chmod 777 /redis-start/redis-start.sh && chmod 777 /redis-start/wait-for-it.sh && /redis-start/redis-start.sh"
              deploy:
                restart_policy:
                  condition: on-failure
                  delay: 5s
                  max_attempts: 5
                placement:
                  constraints:
                    - node.role==manager
          
          networks:
            redis-swarm:
              driver: overlay
          
          volumes:
            node1:
            node2:
            node3:
            node4:
            node5:
            node6:

          wait-for-it.sh

          mkdir /root/redis-swarm/start
          vi wait-for-it.sh
          vi redis-start.sh
          #!/usr/bin/env bash
          #   Use this script to test if a given TCP host/port are available
          
          cmdname=$(basename $0)
          
          echoerr() { if [[ $QUIET -ne 1 ]]; then echo "$@" 1>&2; fi }
          
          usage()
          {
              cat << USAGE >&2
          Usage:
              $cmdname host:port [-s] [-t timeout] [-- command args]
              -h HOST | --host=HOST       Host or IP under test
              -p PORT | --port=PORT       TCP port under test
                                          Alternatively, you specify the host and port as host:port
              -s | --strict               Only execute subcommand if the test succeeds
              -q | --quiet                Don't output any status messages
              -t TIMEOUT | --timeout=TIMEOUT
                                          Timeout in seconds, zero for no timeout
              -- COMMAND ARGS             Execute command with args after the test finishes
          USAGE
              exit 1
          }
          
          wait_for()
          {
              if [[ $TIMEOUT -gt 0 ]]; then
                  echoerr "$cmdname: waiting $TIMEOUT seconds for $HOST:$PORT"
              else
                  echoerr "$cmdname: waiting for $HOST:$PORT without a timeout"
              fi
              start_ts=$(date +%s)
              while :
              do
                  (echo > /dev/tcp/$HOST/$PORT) >/dev/null 2>&1
                  result=$?
                  if [[ $result -eq 0 ]]; then
                      end_ts=$(date +%s)
                      echoerr "$cmdname: $HOST:$PORT is available after $((end_ts - start_ts)) seconds"
                      break
                  fi
                  sleep 1
              done
              return $result
          }
          
          wait_for_wrapper()
          {
              # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
              if [[ $QUIET -eq 1 ]]; then
                  timeout $TIMEOUT $0 --quiet --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
              else
                  timeout $TIMEOUT $0 --child --host=$HOST --port=$PORT --timeout=$TIMEOUT &
              fi
              PID=$!
              trap "kill -INT -$PID" INT
              wait $PID
              RESULT=$?
              if [[ $RESULT -ne 0 ]]; then
                  echoerr "$cmdname: timeout occurred after waiting $TIMEOUT seconds for $HOST:$PORT"
              fi
              return $RESULT
          }
          
          # process arguments
          while [[ $# -gt 0 ]]
          do
              case "$1" in
                  *:* )
                  hostport=(${1//:/ })
                  HOST=${hostport[0]}
                  PORT=${hostport[1]}
                  shift 1
                  ;;
                  --child)
                  CHILD=1
                  shift 1
                  ;;
                  -q | --quiet)
                  QUIET=1
                  shift 1
                  ;;
                  -s | --strict)
                  STRICT=1
                  shift 1
                  ;;
                  -h)
                  HOST="$2"
                  if [[ $HOST == "" ]]; then break; fi
                  shift 2
                  ;;
                  --host=*)
                  HOST="${1#*=}"
                  shift 1
                  ;;
                  -p)
                  PORT="$2"
                  if [[ $PORT == "" ]]; then break; fi
                  shift 2
                  ;;
                  --port=*)
                  PORT="${1#*=}"
                  shift 1
                  ;;
                  -t)
                  TIMEOUT="$2"
                  if [[ $TIMEOUT == "" ]]; then break; fi
                  shift 2
                  ;;
                  --timeout=*)
                  TIMEOUT="${1#*=}"
                  shift 1
                  ;;
                  --)
                  shift
                  CLI="$@"
                  break
                  ;;
                  --help)
                  usage
                  ;;
                  *)
                  echoerr "Unknown argument: $1"
                  usage
                  ;;
              esac
          done
          
          if [[ "$HOST" == "" || "$PORT" == "" ]]; then
              echoerr "Error: you need to provide a host and port to test."
              usage
          fi
          
          TIMEOUT=${TIMEOUT:-15}
          STRICT=${STRICT:-0}
          CHILD=${CHILD:-0}
          QUIET=${QUIET:-0}
          
          if [[ $CHILD -gt 0 ]]; then
              wait_for
              RESULT=$?
              exit $RESULT
          else
              if [[ $TIMEOUT -gt 0 ]]; then
                  wait_for_wrapper
                  RESULT=$?
              else
                  wait_for
                  RESULT=$?
              fi
          fi
          
          if [[ $CLI != "" ]]; then
              if [[ $RESULT -ne 0 && $STRICT -eq 1 ]]; then
                  echoerr "$cmdname: strict mode, refusing to execute subprocess"
                  exit $RESULT
              fi
              exec $CLI
          else
              exit $RESULT
          fi

          redis-start.sh

          getent hosts xxx查看主機中/etc/hosts域名映射的IP

          cd /redis-start/
          bash wait-for-it.sh redis-node1:6379 --timeout=0
          bash wait-for-it.sh redis-node2:6379 --timeout=0
          bash wait-for-it.sh redis-node3:6379 --timeout=0
          bash wait-for-it.sh redis-node4:6379 --timeout=0
          bash wait-for-it.sh redis-node5:6379 --timeout=0
          bash wait-for-it.sh redis-node6:6379 --timeout=0
          echo 'redis-cluster begin'
          echo 'yes' | redis-cli --cluster create --cluster-replicas 1 \
          `getent hosts redis-node1 | awk '{ print $1 ":6379" }'` \
          `getent hosts redis-node2 | awk '{ print $1 ":6379" }'` \
          `getent hosts redis-node3 | awk '{ print $1 ":6379" }'` \
          `getent hosts redis-node4 | awk '{ print $1 ":6379" }'` \
          `getent hosts redis-node5 | awk '{ print $1 ":6379" }'` \
          `getent hosts redis-node6 | awk '{ print $1 ":6379" }'`
          echo 'redis-cluster end'

          啟動

          目錄結構

          ├── docker-compose.yml
          └── start
              ├── redis-start.sh
              └── wait-for-it.sh

          swarm管理節點執行

          cd /root/redis-swarm
          docker stack deploy -c docker-compose.yml redis_cluster

          查看redis-start服務日志,如下即為啟動成功

          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node1:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node1:6379 is available after 18 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node2:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node2:6379 is available after 13 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node3:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node3:6379 is available after 0 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node4:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node4:6379 is available after 0 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node5:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node5:6379 is available after 0 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: waiting for redis-node6:6379 without a timeout
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | wait-for-it.sh: redis-node6:6379 is available after 0 seconds
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | redis-cluster begin
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Performing hash slots allocation on 12 nodes...
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[0] -> Slots 0 - 2730
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[1] -> Slots 2731 - 5460
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[2] -> Slots 5461 - 8191
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[3] -> Slots 8192 - 10922
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[4] -> Slots 10923 - 13652
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Master[5] -> Slots 13653 - 16383
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.6:6379 to 10.0.5.17:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.9:6379 to 10.0.5.16:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.8:6379 to 10.0.5.18:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.12:6379 to 10.0.5.19:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.11:6379 to 10.0.5.3:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Adding replica 10.0.5.5:6379 to 10.0.5.2:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1 10.0.5.17:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[0-2730] (2731 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1 10.0.5.16:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[2731-5460] (2730 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: ea9b45ec64c08c17283239f8b8e5405b2d182428 10.0.5.18:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[5461-8191] (2731 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: ea9b45ec64c08c17283239f8b8e5405b2d182428 10.0.5.19:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[8192-10922] (2731 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 935c177308232de05b5483776478020de51bc578 10.0.5.3:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[10923-13652] (2730 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 935c177308232de05b5483776478020de51bc578 10.0.5.2:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[13653-16383] (2731 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 1c99e42bcfb28a9fe72952d4e4cc5cd88aded0f9 10.0.5.5:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 935c177308232de05b5483776478020de51bc578
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 1c99e42bcfb28a9fe72952d4e4cc5cd88aded0f9 10.0.5.6:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 73cf232f232e83126f058cc01458df11146d8537 10.0.5.9:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 73cf232f232e83126f058cc01458df11146d8537 10.0.5.8:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates ea9b45ec64c08c17283239f8b8e5405b2d182428
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: ca3c50899d6deb04e296c542cd485791fb3e8922 10.0.5.12:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates ea9b45ec64c08c17283239f8b8e5405b2d182428
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: ca3c50899d6deb04e296c542cd485791fb3e8922 10.0.5.11:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 935c177308232de05b5483776478020de51bc578
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Can I set the above configuration? (type 'yes' to accept): >>> Nodes configuration updated
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Assign a different config epoch to each node
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Sending CLUSTER MEET messages to join the cluster
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | Waiting for the cluster to join
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | .
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Performing Cluster Check (using node 10.0.5.17:6379)
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1 10.0.5.17:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[0-5460] (5461 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    1 additional replica(s)
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: ca3c50899d6deb04e296c542cd485791fb3e8922 10.0.5.12:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots: (0 slots) slave
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 935c177308232de05b5483776478020de51bc578
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: ea9b45ec64c08c17283239f8b8e5405b2d182428 10.0.5.19:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[5461-10922] (5462 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    1 additional replica(s)
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | M: 935c177308232de05b5483776478020de51bc578 10.0.5.3:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots:[10923-16383] (5461 slots) master
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    1 additional replica(s)
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 1c99e42bcfb28a9fe72952d4e4cc5cd88aded0f9 10.0.5.6:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots: (0 slots) slave
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates 6ce90be6daabc0c700471d03deb3c6bd88c9f0e1
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | S: 73cf232f232e83126f058cc01458df11146d8537 10.0.5.9:6379
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    slots: (0 slots) slave
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    |    replicates ea9b45ec64c08c17283239f8b8e5405b2d182428
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | [OK] All nodes agree about slots configuration.
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Check for open slots...
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | >>> Check slots coverage...
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | [OK] All 16384 slots covered.
          redis-swarm_redis-start.1.6xawjqf5shfw@hyx-test3    | redis-cluster end

          撤銷部署

          docker stack rm redis_cluster

          如果需要重新部署集群,redis集群為了保證數據統一,需要清除數據卷。

          # 每個節點都需要執行
          docker volume prune

          測試

          進入其中一個節點容器,依次查看集群信息

          docker exec -it xxx bash
          redis-cli -c -h redis-node1 info

          docker?swarm快速部署redis分布式集群的詳細過程

          測試讀寫數據

          docker?swarm快速部署redis分布式集群的詳細過程

          測試其中一個主節點宕機,這里刪除了主節點1,節點1對應的從節點是節點4,節點1宕機后節點4成為主節點

          docker service rm redis-swarm_redis-node1
          # 查看
          root@redis-node2:/data# redis-cli -c -h redis-node1
          Could not connect to Redis at redis-node1:6379: Name or service not known
          not connected> 
          root@redis-node2:/data# redis-cli -c -h redis-node4
          redis-node4:6379> info

          docker?swarm快速部署redis分布式集群的詳細過程

          問題

          redis-cli --cluster create redis-node1:6379 ...省略

          在容器中使用redis-cli創建集群時,無法使用容器名創建,只能使用容器的ip,因為redis-cli對別名不支持

          docker?swarm快速部署redis分布式集群的詳細過程

          腳本下載+快速啟動

          鏈接: https://pan.baidu.com/s/18_YS9ng29e31Az_HBzBC1w?pwd=sp8w

          提取碼: sp8w 

          分享到:
          標簽:分布式 快速 過程 部署 集群
          用戶無頭像

          網友整理

          注冊時間:

          網站:5 個   小程序:0 個  文章:12 篇

          • 51998

            網站

          • 12

            小程序

          • 1030137

            文章

          • 747

            會員

          趕快注冊賬號,推廣您的網站吧!
          最新入駐小程序

          數獨大挑戰2018-06-03

          數獨一種數學游戲,玩家需要根據9

          答題星2018-06-03

          您可以通過答題星輕松地創建試卷

          全階人生考試2018-06-03

          各種考試題,題庫,初中,高中,大學四六

          運動步數有氧達人2018-06-03

          記錄運動步數,積累氧氣值。還可偷

          每日養生app2018-06-03

          每日養生,天天健康

          體育訓練成績評定2018-06-03

          通用課目體育訓練成績評定