Quantcast
Channel: 不自量力 の Weithenn
Viewing all articles
Browse latest Browse all 589

實戰 - Redis Sentinel 高可用性機制容器化

$
0
0

文章目錄

前言
實作環境
實作 Redis Sentinel 高可用性容器化
          建立 Docker Swarm 運作環境
          客製化 Redis Master / Slave 容器映像檔
          客製化 Redis Sentinel 容器映像檔
          客製化 Redis-Stat 容器映像檔
          執行 Docker Stack Deploy 佈署作業
          驗證和容錯移轉測試
          摧毀環境
參考資源





前言

簡單來說,希望透過「容器化」(Containerzation)的方式,將 Redis Sentinel 高可用性機制打包封裝後,以後在 Docker 容器管理環境中便能非常快速的建立 Redis Sentinel 高可用性機制。

本文將會在 Docker Swarm (3 Nodes)的運作環境中實作,所以會採用最新 Docker Compose v3以及 docker stack deploy指令進行佈署作業 (從 Docker 1.13版本開始發佈新的 Docker Compose 並且支援 Swarm Mode,以便達成 Multi-Container on Multi-Host的目標)。下列是 Docker Compose v2 / v3的簡易比較表格:


佈署服務
查詢服務
擴展服務
關閉服務
支援多台容器主機
No
Yes

倘若你將編寫好的 YAML檔案,透過 Docker Compose v2佈署到 Docker Swarm 運作環境時會發生什麼事? 此時,系統便會提醒你目前的 Docker Engine 已經處於 Swarm Mode,如果希望佈署到「多台容器主機」上的話,要改為採用 docker stack deploy指令來進行佈署。

圖、必須使用 docker stack deploy 指令才能佈署容器至多台主機





實作環境

快速建置:
1. 建構好 Docker Swarm運作環境。
2. 下載本文相關檔案 git clone https://github.com/Weithenn/redis-sentinel
3. 執行 build.sh即可建構好 Redis Sentinel 高可用性機制 (如果順利的話 😁)。





    實作 Redis Sentinel 高可用性容器化

    建立 Docker Swarm 運作環境

    簡單來說,當企業及組織建立的容器數量越來越多需要管理平台或建立容器叢集架構時,就可以透過建置 Docker Swarm運作環境來達成。從 Docker 1.12.0版本之後,便直接原生內建 Docker Swarm Mode 並且容器主機,已經可以「同時」擔任 Manager 及 Workers的角色。

    下列為 Swarm Cluster Protocol / Ports資訊:
    • 2377 (TCP) - Swarm Cluster management。
    • 7946 (TCP and UDP) - Nodes communication。
    • 4789 (UDP) - Overlay network traffic,IP Protocol 50 (ESP) - Overlay network with encryption (--opt encrypted)。

    圖、Docker Swarm 運作架構示意圖

    圖、Docker Swarm 工作任務示意圖


    同時,為了維持 Docker Swarm Mode的高可用性,應該要建立「奇數」的 Manager Node 才對,舉例來說:
    • 3 Manager Node Swarm Cluster 可允許 1 台故障(N-1/2)
    • 5 Manager Node Swarm Cluster 可允許 2 台故障 (N-1/2)
    • Docker 官方建議每個 Swarm Cluster 最多 7 台 Manager Node (更多的 Manager Node 很有可能會造成反效果)。
    • 當 Manager Node 死光,Worker Node 上的 Container 仍能繼續運作,但是無法 Add/Update/Remove Node 等維護動作 (但後續要執行復原的動作)。

    圖、Docker Swarm 高可用性規劃

    在本文實作環境中,採用 3 台 CentOS 7.4 主機擔任 Container Host (Swarm Node),這 3 台 CentOS 主機的主機名稱、IP 位址、Swarm Role 資訊如下:
    • swarm01.weithenn.org, 10.10.75.71, Manager / Worker
    • swarm02.weithenn.org, 10.10.75.72, Manager / Worker
    • swarm03.weithenn.org, 10.10.75.73, Manager / Worker

    有關 CentOS 7.4 基礎設定和 CentOS 安裝 Docker 環境的部分請參考站內文章,在本文實作環境中 3 台 CentOS 主機,都「同時」擔任 Docker Swarm Manager / Worker的角色,以便可以互相調度及運作容器。

    圖、Docker Swarm Cluster (3 Nodes)





    客製化 Redis Master / Slave 容器映像檔

    Docker Swarm容器叢集環境建構完成後,接著就可以準備客製化 Redis Master / Slave容器映像檔 (因為要組態設定符合需求的設定檔)。在本文實作環境中,我們將會採用 redis:4.0.6-alpine 容器映像檔進行客製化作業。

    Redis Master - Dockerfile (GitHub - Weithenn/redis-sentinel/redis-master/Dockerfile),主要客製化的項目如下:

    FROM redis:4.0.6-alpine
    MAINTAINER Weithenn Wang <weithenn@weithenn.org>
    # Install tzdata for Timezone
    RUN apk add --no-cache tzdata && \
        \
    # Download Redis configuration file example
        cd /tmp && \
        wget http://download.redis.io/redis-stable/redis.conf && \
        mkdir -p /etc/redis && \
        cp redis.conf /etc/redis/ && \
        \
    # This is Redis [Master] confgiruation
    # bind 0.0.0.0, Disable RDB file and AOF log, tuning TCP backlog
        sed -i 's,bind 127.0.0.1,bind 0.0.0.0,g' /etc/redis/redis.conf && \
        sed -i 's/^\(save .*\)$/# \1/' /etc/redis/redis.conf && \
        sed -i 's,#   save "",save "",g' /etc/redis/redis.conf && \
        sed -i 's,stop-writes-on-bgsave-error yes,stop-writes-on-bgsave-error no,g' /etc/redis/redis.conf && \
        sed -i 's,hz 10,hz 50,g' /etc/redis/redis.conf && \
        sed -i 's,tcp-backlog 511,tcp-backlog 32768,g' /etc/redis/redis.conf && \
        \
    # Tuning TCP backlog, No memory overcommit handling, Disable THP(Transparent Huge Pages)
    # Please reference Redis Administration (https://redis.io/topics/admin)
        touch /etc/redis/run.sh && \
        echo "echo 32768 > /wproc/sys/net/core/somaxconn">> /etc/redis/run.sh && \
        echo "echo 1 > /wproc/sys/vm/overcommit_memory">> /etc/redis/run.sh && \
        echo "echo never > /wsys/kernel/mm/transparent_hugepage/enabled">> /etc/redis/run.sh && \
        echo "echo never > /wsys/kernel/mm/transparent_hugepage/defrag">> /etc/redis/run.sh && \
        echo "redis-server /etc/redis/redis.conf">> /etc/redis/run.sh && \
        chmod 755 /etc/redis/run.sh && \
        chown -R redis:redis /etc/redis
    ENV TZ=Asia/Taipei
    EXPOSE 6379/tcp
    CMD ["/etc/redis/run.sh"]



    Redis Slave - Dockerfile (GitHub - Weithenn/redis-sentinel/redis-slave/Dockerfile),客製化的部分跟 Redis Master 一樣,唯一的差別在於 redis.conf 組態設定檔當中,加上 1 行「slaveof redis_master 6379」內容,也就是指定誰是 Redis Master 主機,其中的 redis_master為本文實作環境中自訂的 Swarm Native Service Discovery名稱。

    FROM redis:4.0.6-alpine
    MAINTAINER Weithenn Wang <weithenn@weithenn.org>
    # Install tzdata for Timezone
    RUN apk add --no-cache tzdata && \
        \
    # Download Redis configuration file example
        cd /tmp && \
        wget http://download.redis.io/redis-stable/redis.conf && \
        mkdir -p /etc/redis && \
        cp redis.conf /etc/redis/ && \
        \
    # This is Redis [Slave] confgiruation
    # bind 0.0.0.0, Disable RDB file and AOF log, tuning TCP backlog
        sed -i 's,bind 127.0.0.1,bind 0.0.0.0,g' /etc/redis/redis.conf && \
        sed -i 's,# slaveof <masterip> <masterport>,slaveof redis_master 6379,g' /etc/redis/redis.conf && \
        sed -i 's/^\(save .*\)$/# \1/' /etc/redis/redis.conf && \
        sed -i 's,#   save "",save "",g' /etc/redis/redis.conf && \
        sed -i 's,stop-writes-on-bgsave-error yes,stop-writes-on-bgsave-error no,g' /etc/redis/redis.conf && \
        sed -i 's,hz 10,hz 50,g' /etc/redis/redis.conf && \
        sed -i 's,tcp-backlog 511,tcp-backlog 32768,g' /etc/redis/redis.conf && \
        \
    # Tuning TCP backlog, No memory overcommit handling, Disable THP(Transparent Huge Pages)
    # Please reference Redis Administration (https://redis.io/topics/admin)
        touch /etc/redis/run.sh && \
        echo "echo 32768 > /wproc/sys/net/core/somaxconn">> /etc/redis/run.sh && \
        echo "echo 1 > /wproc/sys/vm/overcommit_memory">> /etc/redis/run.sh && \
        echo "echo never > /wsys/kernel/mm/transparent_hugepage/enabled">> /etc/redis/run.sh && \
        echo "echo never > /wsys/kernel/mm/transparent_hugepage/defrag">> /etc/redis/run.sh && \
        echo "redis-server /etc/redis/redis.conf">> /etc/redis/run.sh && \
        chmod 755 /etc/redis/run.sh && \
        chown -R redis:redis /etc/redis
    ENV TZ=Asia/Taipei
    EXPOSE 6379/tcp
    CMD ["/etc/redis/run.sh"]



    經過上述客製化程序後,建立的容器映像檔如下 (已經綁定 Automated build機制),Tags 版本則是直接跟採用的 Redis-Apline 版本對齊
    圖、倘若未處理核心參數啟動 Redis 將會發生相關警告訊息



    客製化 Redis Sentinel 容器映像檔

    簡單來說,Redis Sentinel 機制為「監控 Redis (Master) Instance當無回應時,切換至 Redis (Slave) Instance接手」,透過 Redis Sentinel 可以為 Redis 運作架構提供下列功能:
    • Monitoring: 持續檢查 Redis Master / Slave 之間是否正常運作。
    • Notification: 可以透過 API 通知管理人員被監控的 Redis Instance 是否發生問題。
    • Automatic failover: 當 Sentinel 判定 Redis Master 故障時,將存活的 Redis Slave 執行 Promoted to Master 的動作。
    • Configuration provider: 組態設定其它 Redis Slave (變成指向至新的 Master),讓 Application 能夠連接到新的 Redis Master。

    Redis Sentinel 為 Distributed System的設計架構 (Multiple Sentinel processes cooperating together),這樣設計架構主要是為了「避免誤判」:
    • Redis 2.8版本開始內建 Sentinel v2,並採用更強大更簡單的「預測演算法」(Predict Algorithms)。
    • 建議「至少 3 台」Sentinel Instances 並確認開啟 TCP Port 26379 (否則不會自動切換)。
    • 採用「非同步複寫」(Asynchronous Replication),所以 Failover 時無法保證所有資料都寫入。

    圖、Redis Sentinel 建議採用的基礎架構 (Redis Master *1、Redis Slave *2、Redis Sentinel *3)

    Redis Sentinel - Dockerfile (GitHub - Weithenn/redis-sentinel/redis-sentinel/Dockerfile),主要客製化的項目如下:
    • 時區: Asia / Taipei。
    • sentinel.conf 組態設定檔:  關閉 Protected Mode、指定 Redis Master 主機、Quorum 數量設定為 2、當 Redis Master 60 秒沒回應判定故障、當 Redis Failover 機制作用後只有 1 台 Redis Slave 能與 Redis Master 同步資料。
    • run.sh: 由於 Docker Compose v3 中 sysctls 參數「尚未支援」docker stack deploy 佈署機制,所以透過這樣的方式來調整 Redis 運作環境所需要的系統核心參數,否則啟動 Redis Sentinel 機制時將會出現 TCP Backlog 的警告訊息。

    FROM redis:4.0.6-alpine
    MAINTAINER Weithenn Wang <weithenn@weithenn.org>
    # Install tzdata for Timezone
    RUN apk add --no-cache tzdata && \
        \
    # Download Redis Sentinel configuration file example
        cd /tmp && \
        wget http://download.redis.io/redis-stable/sentinel.conf && \
        mkdir -p /etc/redis && \
        cp sentinel.conf /etc/redis/ && \
        sed -i 's,# protected-mode no,protected-mode no,g' /etc/redis/sentinel.conf && \
        sed -i 's,sentinel monitor mymaster 127.0.0.1 6379 2,sentinel monitor redis-ha redis_master 6379 2,g' /etc/redis/sentinel.conf && \
        sed -i 's,sentinel down-after-milliseconds mymaster 30000,sentinel down-after-milliseconds redis-ha 5000,g' /etc/redis/sentinel.conf && \
        sed -i 's,sentinel parallel-syncs mymaster 1,sentinel parallel-syncs redis-ha 1,g' /etc/redis/sentinel.conf && \
        sed -i 's,sentinel failover-timeout mymaster 180000,sentinel failover-timeout redis-ha 60000,g' /etc/redis/sentinel.conf && \
        \
    # Tuning TCP backlog
    # Please reference Redis Administration (https://redis.io/topics/admin)
        touch /etc/redis/run.sh && \
        echo "echo 32768 > /wproc/sys/net/core/somaxconn">> /etc/redis/run.sh && \
        echo "redis-sentinel /etc/redis/sentinel.conf">> /etc/redis/run.sh && \
        chmod 755 /etc/redis/run.sh && \
        chown -R redis:redis /etc/redis
    ENV TZ=Asia/Taipei
    EXPOSE 26379/tcp
    CMD ["/etc/redis/run.sh"]


    經過上述客製化程序後,建立的容器映像檔如下 (已經綁定 Automated build 機制),Tags 版本則是直接跟採用的 Redis-Apline 版本對齊:



    客製化 Redis-Stat 容器映像檔

    Redis-Stat是個採用 Ruby所撰寫的 Redis Monitor Tool。目前,在 Docker Hub當中並沒有官方打包的容器映像檔,所以只好自行建立 Dockerfile 後打包容器映像檔。

    Redis-Stat - Dockerfile (GitHub - Weithenn/redis-sentinel/redis-stat/Dockerfile),主要採用 ruby:2.4容器映像檔 (採用 Debian OS),然後組態設定時區為 Asia / Taipei 並安裝 redis-stat

    FROM ruby:2.4
    MAINTAINER Weithenn Wang <weithenn@weithenn.org>
    # Install redis-stat and setting Timezone
    RUN gem install redis-stat && \
        echo Asia/Taipei > /etc/timezone && \
        dpkg-reconfigure -f noninteractive tzdata
    EXPOSE 63790/tcp
    CMD ["redis-stat"]


    經過上述客製化程序後,建立的容器映像檔如下 (已經綁定 Automated build 機制),Tags 版本則是直接跟採用的 Ruby 2.4版本對齊:



    執行 Docker Stack Deploy 佈署作業

    前置作業都完成後,終於可以透過 docker stack deploy 進行佈署作業了。我們先將所有操作進行分解,了解整個運作流程後便可以使用 Shell Script (build.sh)將整個流程串起來一氣呵成了。

    Docker Swarm 虛擬網路環境
    在目前還未進行 docker stack deploy佈署作業之前,可以看到目前虛擬網路只有基礎的「bridge、host、none」,以及建構 Docker Swarm 叢集環境所新增的「docker_gwbridge、ingress」

    圖、目前的 Docker Swarm 虛擬網路環境


    佈署 Redis Master角色容器 (GitHub - Weithenn/redis-sentinel/01-redis-master.yml)
    首先,我們透過「docker stack deploy -c 01-redis-master.yml redis」指令,來建立 Redis 環境的虛擬網路及佈署擔任 Redis Master角色的容器。

    version: '3.4'
    services:
      master:
        image: weithenn/redis-master:latest
        ports:
          - "6379:6379"
        volumes:
          - /proc:/wproc
          - /sys:/wsys
        networks:
          - vnet
        deploy:
          replicas: 1
          update_config:
            delay: 60s
    networks:
      vnet:


    可以看到,順利建立「redis_vnet」虛擬網路環境,以及佈署 Redis Master 角色容器並且也 Listen Port 6379

    圖、順利建立 redis_vnet 虛擬網路及佈署 Redis Master 角色容器

    並且,使用「docker service logs redis_master」查看 Redis Master 角色容器日誌訊息,可以看到順利啟動 Redis 並且沒有警告訊息。

    圖、順利啟動 Redis 服務並且沒有任何警告訊息


    佈署 Redis Slave角色容器 (GitHub - Weithenn/redis-sentinel/02-redis-slave.yml)
    接著,我們透過「docker stack deploy -c 02-redis-slave.yml redis」指令,使用剛才已經建立的 redis_vnet 虛擬網路環境,並且佈署擔任 Redis Slave角色的容器。

    version: '3.4'
    services:
      slave:
        image: weithenn/redis-slave:latest
        ports:
          - "6380:6379"
        volumes:
          - /proc:/wproc
          - /sys:/wsys
        networks:
          - vnet
        deploy:
          replicas: 2
          update_config:
            delay: 60s
    networks:
      vnet:


    可以看到,順利佈署 2 台 Redis Slave 角色容器並且也 Listen Port 6379 (6380 -> 6379)

    圖、順利佈署 2 台 Redis Slave 角色容器

    使用「docker service logs redis_slave」查看 Redis Slave 角色容器日誌訊息,可以看到順利啟動 Redis 並且成功找到 Redis Master 角色並進行同步作業 (主要就是依靠 Swarm Native Service Discovery  機制)。

    圖、順利佈署 Redis Slave 並與 Redis Master 進行同步作業

    使用「docker service logs redis_master」查看 Redis Master 角色容器日誌訊息,可以看到發現 2 台 Redis Slave 要求進行同步作業。

    圖、Redis Master 發現 2 台 Redis Slave 要求進行同步作業


    佈署 Redis Sentinel 角色容器 (GitHub - Weithenn/redis-sentinel/03-redis-sentinel.yml)
    接著,我們透過「docker stack deploy -c 03-redis-sentinel.yml redis」指令,使用剛才已經建立的 redis_vnet 虛擬網路環境,並且佈署擔任 Redis Sentinel 角色的容器。

    version: '3.4'
    services:
      sentinel:
        image: weithenn/redis-sentinel:latest
        ports:
          - "26379:26379"
        volumes:
          - /proc:/wproc
        networks:
          - vnet
        deploy:
          replicas: 3
          update_config:
            delay: 60s
    networks:
      vnet:


    可以看到,順利佈署 3 台 Redis Sentinel 角色容器並且也 Listen Port 26379

    圖、順利佈署 3 台 Redis Sentinel 角色容器

    使用「docker service logs redis_sentinel」查看 Redis Sentinel 角色容器日誌訊息,可以看到順利啟動 Redis Sentinel 機制,並且成功找到 Redis Master / Slave 角色和運作情況 (同樣依靠 Swarm Native Service Discovery  機制)。

    圖、順利佈署 Redis Sentinel 並成功找到 Redis Master / Slave 角色


    佈署 Redis-Stat 角色容器 (GitHub - Weithenn/redis-sentinel/04-redis-stat.yml)
    接著,我們透過「docker stack deploy -c 04-redis-stat.yml redis」指令,使用剛才已經建立的 redis_vnet 虛擬網路環境,並且佈署擔任 Redis-Stat 角色的容器。

    version: '3.4'
    services:
      stat:
        image: weithenn/redis-stat:latest
        command: redis-stat --server redis_master
        ports:
          - "80:63790"
        networks:
          - vnet
        deploy:
          replicas: 1
          update_config:
            delay: 60s
    networks:
      vnet:


    可以看到,順利佈署 1 台 Redis-Stat 角色容器並且也 Listen Port 63790 (80 -> 63790)

    圖、順利佈署 Redis-Stat 角色容器

    使用「docker service logs redis_stat」查看 Redis-Stat 角色容器日誌訊息,可以看到順利啟動 Redis-Stat 監控機制,並且開始收集 Redis Master 運作情況 (同樣依靠 Swarm Native Service Discovery  機制)。

    圖、順利佈署 Redis-Stat 並開始收集 Redis Master 運作情況

    圖、順利佈署 Redis-Stat 並開始收集 Redis Master 運作情況


    佈署 Poitainer 角色容器 (GitHub - Weithenn/redis-sentinel/05-portainer.yml)
    接著,我們透過「docker stack deploy -c 05-portainer.yml redis」指令,使用剛才已經建立的 redis_vnet 虛擬網路環境,並且佈署便於操作及管理容器的 GUI 圖形管理工具。因為,在本文實作環境中,3 台主機都是同時擔任 Docker Swarm Manager / Worker的角色,所以在佈署 Portainer 容器時無須再特意指定運作在 Manager Node 的部分。詳細資訊,請參考官網文件 Portainer documentation — Portainer 1.15.3 documentation

    version: '3.4'
    services:
      portainer:
        image: portainer/portainer
        command: -H unix:///var/run/docker.sock
        ports:
          - "9000:9000"
        networks:
          - vnet
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
          - "/tmp:/data"
    networks:
      vnet:


    可以看到,順利佈署 1 台 Portainer 容器並且也 Listen Port 9000

    圖、順利佈署 Portainer 管理工具容器

    使用「docker service logs redis_portainer」查看 Portainer 角色容器日誌訊息,可以看到順利啟動 Portainer 管理工具服務。

    圖、順利啟動 Portainer 管理工具服務

    現在,我們可以登入 Portainer 管理工具的操作介面。💪

    圖、Portainer 管理介面

    圖、透過 Portainer 查看 Docker Swarm 環境

    了解整個建置的流程後,其實我們可以用個簡單的 Shell Script 即可串起所有建構流程。

    #!/bin/sh
    #$Id: build.sh v0.1, 2017/12/08 Weithenn Wang (weithenn@weithenn.org) Exp $
    #Buildup Redis Sentinel provides HA(High Availability) for Redis
    echo ------------------------------------------------
    echo Deploy Redis [Master *1] Node
    echo ------------------------------------------------
    docker stack deploy -c 01-redis-master.yml redis
    echo
    echo
    sleep 10
    echo ------------------------------------------------
    echo Deploy Redis [Slave *2] Nodes
    echo ------------------------------------------------
    docker stack deploy -c 02-redis-slave.yml redis
    echo
    echo
    sleep 10
    echo ------------------------------------------------
    echo Deploy Redis [Sentinel *3] Nodes
    echo ------------------------------------------------
    docker stack deploy -c 03-redis-sentinel.yml redis
    echo
    echo
    sleep 10
    echo ------------------------------------------------
    echo Deploy Redis-Stat Monitor Tool
    echo ------------------------------------------------
    docker stack deploy -c 04-redis-stat.yml redis
    echo
    echo
    sleep 10
    echo ------------------------------------------------
    echo Deploy Portainer GUI Tool
    echo ------------------------------------------------
    docker stack deploy -c 05-portainer.yml redis
    echo
    echo
    sleep 10
    echo ------------------------------------------------------
    echo Verify Docker Swarm Service for Redis Sentinel HA
    echo ------------------------------------------------------
    docker service ls
    echo
    echo
    docker stack ps redis
    echo
    echo
    echo ------------------------------------------------------
    echo Verify Redis Master/Slave/Sentinel Status
    echo ------------------------------------------------------
    echo Redis Master IP address is:
    redis-cli -p 26379 SENTINEL get-master-addr-by-name redis-ha
    echo
    echo
    redis-cli -p 26379 info Sentinel



    驗證和容錯移轉測試

    Redis Master / Slave 及 Redis Sentinel 高可用性機制成形後,我們先再次驗證是否能夠順利看到 Redis 高可用性相關資訊。請使用「redis-cli -p 26379 SENTINEL get-master-addr-by-name redis-ha」指令,查詢 Redis Master 的 IP 位址 (其中 redis-ha是在 sentinel.conf 組態設定檔,自行指定的 Redis 高可用性服務名稱),以及「redis-cli -p 26379 info Sentinel」指令查看 Redis Sentinel 高可用性機制資訊 。

    圖、查詢 Redis Sentinel 高可用性機制資訊

    在本文實作環境中,透過「docker stack ps redis」指令可以看到 Redis Master 角色容器,目前運作在 swarm02.weithenn.org 的容器主機上,我們直接去 swarm02 主機上停用 Redis Master 角色容器,然後觀察 Redis Sentinel 日誌資訊即可得知 Redis Master / Slave Auto-Failover 的情況。

    圖、Sentinel 發現 Redis Master (10.0.0.5) 故障由 Redis Slave (10.0.0.8) 接手

    圖、這次的切換是透過 3 台 Sentinel 中的 2 台同意的結果

    圖、原 Redis Slave (10.0.0.8) 順利接手成為 Redis Master

    圖、看到剛才測試容錯移轉時故障的 Redis Master 容器



    摧毀環境

    練習完畢💨,要摧毀環境也很容易。只要執行「docker stack rm redis」便可以刪除剛才所有建立的環境 (redis_vnet 虛擬網路、Redis Master、Redis Slave、Redis Sentinel、Redis-Stat、Portainer)。

    圖、破壞總是比建設容易💩





    參考資源


    Viewing all articles
    Browse latest Browse all 589

    Trending Articles