亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄 搜尋
Compose About versions and upgrading (Compose) ASP.NET Core + SQL Server on Linux (Compose) CLI environment variables (Compose) Command-line completion (Compose) Compose(組成) Compose command-line reference(組合命令行參考) Control startup order (Compose) Django and PostgreSQL (Compose) Docker stacks and distributed application bundles (Compose) docker-compose build(docker-compose構(gòu)建) docker-compose bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .NET Core application (Engine) About images, containers, and storage drivers (Engine) Add nodes to the swarm (Engine) Apply custom metadata (Engine) Apply rolling updates (Engine) apt-cacher-ng Best practices for writing Dockerfiles (Engine) Binaries (Engine) Bind container ports to the host (Engine) Breaking changes (Engine) Build your own bridge (Engine) Configure container DNS (Engine) Configure container DNS in user-defined networks (Engine) CouchDB (Engine) Create a base image (Engine) Create a swarm (Engine) Customize the docker0 bridge (Engine) Debian (Engine) Default bridge network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (Engine) Fedora (Engine) Get started (Engine) Get started with macvlan network driver (Engine) Get started with multi-host networking (Engine) How nodes work (Engine) How services work (Engine) Image management (Engine) Inspect the service (Engine) Install Docker (Engine) IPv6 with Docker (Engine) Join nodes to a swarm (Engine) Legacy container links (Engine) Lock your swarm (Engine) Manage nodes in a swarm (Engine) Manage sensitive data with Docker secrets (Engine) Manage swarm security with PKI (Engine) Manage swarm service networks (Engine) Migrate to Engine 1.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale the service (Engine) SDKs (Engine) Select a storage driver (Engine) Set up for the tutorial (Engine) SSHd (Engine) Storage driver overview (Engine) Store service configuration data (Engine) Swarm administration guide (Engine) Swarm mode key concepts (Engine) Swarm mode overlay network security model (Engine) Swarm mode overview (Engine) Understand container communication (Engine) Use multi-stage builds (Engine) Use swarm mode routing mesh (Engine) Use the AUFS storage driver (Engine) Use the Btrfs storage driver (Engine) Use the Device mapper storage driver (Engine) Use the OverlayFS storage driver (Engine) Use the VFS storage driver (Engine) Use the ZFS storage driver (Engine) Engine: Admin Guide Amazon CloudWatch logs logging driver (Engine) Bind mounts (Engine) Collect Docker metrics with Prometheus (Engine) Configuring and running Docker (Engine) Configuring logging drivers (Engine) Control and configure Docker with systemd (Engine) ETW logging driver (Engine) Fluentd logging driver (Engine) Format command and log output (Engine) Google Cloud logging driver (Engine) Graylog Extended Format (GELF) logging driver (Engine) Journald logging driver (Engine) JSON File logging driver (Engine) Keep containers alive during daemon downtime (Engine) Limit a container's resources (Engine) Link via an ambassador container (Engine) Log tags for logging driver (Engine) Logentries logging driver (Engine) PowerShell DSC usage (Engine) Prune unused Docker objects (Engine) Run multiple services in a container (Engine) Runtime metrics (Engine) Splunk logging driver (Engine) Start containers automatically (Engine) Storage overview (Engine) Syslog logging driver (Engine) tmpfs mounts Troubleshoot volume problems (Engine) Use a logging driver plugin (Engine) Using Ansible (Engine) Using Chef (Engine) Using Puppet (Engine) View a container's logs (Engine) Volumes (Engine) Engine: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor security profiles for Docker (Engine) Automation with content trust (Engine) Content trust in Docker (Engine) Delegations for content trust (Engine) Deploying Notary (Engine) Docker security (Engine) Docker security non-events (Engine) Isolate containers with a user namespace (Engine) Manage keys for content trust (Engine) Play in a content trust sandbox (Engine) Protect the Docker daemon socket (Engine) Seccomp security profiles for Docker (Engine) Secure Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver options and operating system defaults (Machine) Drivers overview (Machine) Exoscale (Machine) Generic (Machine) Get started with a local VM (Machine) Google Compute Engine (Machine) IBM Softlayer (Machine) Install Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (Machine) Oracle VirtualBox (Machine) Provision AWS EC2 instances (Machine) Provision Digital Ocean Droplets (Machine) Provision hosts in the cloud (Machine) Rackspace (Machine) VMware Fusion (Machine) VMware vCloud Air (Machine) VMware vSphere (Machine) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
文字

當(dāng)您運(yùn)行一群Docker引擎時(shí),管理節(jié)點(diǎn)是管理群集和存儲(chǔ)群集狀態(tài)的關(guān)鍵組件。理解管理節(jié)點(diǎn)的一些關(guān)鍵特性對(duì)于正確部署和維護(hù)群體非常重要。

請(qǐng)參閱節(jié)點(diǎn)如何工作以簡(jiǎn)要概述Docker群集模式以及管理器和工作器節(jié)點(diǎn)之間的區(qū)別。

操作群中的管理者節(jié)點(diǎn)

Swarm管理器節(jié)點(diǎn)使用Raft一致性算法來(lái)管理群體狀態(tài)。你只需要理解Raft的一些一般概念就可以管理一個(gè)群體。

管理器節(jié)點(diǎn)的數(shù)量沒有限制。決定要實(shí)現(xiàn)多少個(gè)管理節(jié)點(diǎn)是性能和容錯(cuò)之間的折中。將管理器節(jié)點(diǎn)添加到群集使群集更容錯(cuò)。但是,其他管理器節(jié)點(diǎn)會(huì)降低寫入性能,因?yàn)楦喙?jié)點(diǎn)必須確認(rèn)提議來(lái)更新群集狀態(tài)。這意味著更多的網(wǎng)絡(luò)往返流量。

Raft要求大多數(shù)管理者(也稱為法定人數(shù))同意對(duì)群體提出更新,例如節(jié)點(diǎn)添加或刪除。成員資格操作受到與狀態(tài)復(fù)制相同的限制。

維持管理人員的法定人數(shù)

如果群體失去了管理人員的法定人數(shù),群體就無(wú)法執(zhí)行管理任務(wù)。如果你的群體擁有多個(gè)管理器,則總是有兩個(gè)以上的管理器。為了維持法定人數(shù),大多數(shù)管理器必須可用。建議使用奇數(shù)的管理器,因?yàn)橄乱粋€(gè)偶數(shù)不會(huì)使仲裁容易保留。例如,無(wú)論您是3或4位管理器,您仍然只能失去1位管理器并維持法定人數(shù)。如果你有5或6個(gè)管理器,你仍然只能失去兩個(gè)。

即使群體失去了管理人員的法定人數(shù),現(xiàn)有工作人員節(jié)點(diǎn)上的群集任務(wù)也會(huì)繼續(xù)運(yùn)行。但是,不能添加,更新或刪除群集節(jié)點(diǎn),并且無(wú)法啟動(dòng),停止,移動(dòng)或更新新的或現(xiàn)有的任務(wù)。

如果您確實(shí)失去了管理人員的法定人數(shù),請(qǐng)參閱恢復(fù)失敗故障排除步驟的法定人數(shù)。

配置管理器通過靜態(tài)IP地址進(jìn)行通告

啟動(dòng)群集時(shí),必須指定該--advertise-addr標(biāo)志以將您的地址通告給群中的其他管理節(jié)點(diǎn)。有關(guān)更多信息,請(qǐng)參閱以群集模式運(yùn)行Docker引擎。由于管理器節(jié)點(diǎn)旨在成為基礎(chǔ)架構(gòu)的穩(wěn)定組件,因此您應(yīng)該使用廣告地址的固定IP地址來(lái)防止群集在重新啟動(dòng)計(jì)算機(jī)時(shí)變得不穩(wěn)定。

如果整個(gè)群體重新啟動(dòng)并且每個(gè)管理節(jié)點(diǎn)隨后都獲得新的IP地址,則任何節(jié)點(diǎn)都無(wú)法聯(lián)系現(xiàn)有的管理員。因此,當(dāng)節(jié)點(diǎn)嘗試以舊IP地址相互聯(lián)系時(shí),群集被掛起。

工作節(jié)點(diǎn)的動(dòng)態(tài)IP地址正常。

添加管理器節(jié)點(diǎn)以實(shí)現(xiàn)容錯(cuò)

您應(yīng)該維護(hù)群體中的奇數(shù)個(gè)管理器以支持管理器節(jié)點(diǎn)故障。擁有奇數(shù)個(gè)管理器可確保在網(wǎng)絡(luò)分區(qū)期間,如果將網(wǎng)絡(luò)分為兩組,則法定人數(shù)仍然可用于處理請(qǐng)求的可能性較高。如果您遇到兩個(gè)以上的網(wǎng)絡(luò)分區(qū),則不保證達(dá)到法定人數(shù)。

Swarm Size

Majority

Fault Tolerance

1

1

0

2

2

0

3

2

1

4

3

1

5

3

2

6

4

2

7

4

3

8

5

3

9

5

4

例如,在一個(gè)有5個(gè)節(jié)點(diǎn)的群體,如果失去3個(gè)節(jié)點(diǎn),則沒有法定人數(shù)。因此,在恢復(fù)其中一個(gè)不可用的管理節(jié)點(diǎn)或使用災(zāi)難恢復(fù)命令恢復(fù)群集之前,無(wú)法添加或刪除節(jié)點(diǎn)。請(qǐng)參閱從災(zāi)難中恢復(fù)。

雖然可以將群集縮放到單個(gè)管理器節(jié)點(diǎn),但不可能降級(jí)最后一個(gè)管理器節(jié)點(diǎn)。這可以確保您保持對(duì)群體的訪問權(quán)限,并且群體仍然可以處理請(qǐng)求??s小到單個(gè)管理員是不安全的操作,不建議實(shí)施。如果在降級(jí)操作過程中最后一個(gè)節(jié)點(diǎn)意外地離開群集,則群集將變?yōu)椴豢捎?,直到重新啟?dòng)節(jié)點(diǎn)或重新啟動(dòng)--force-new-cluster。

您管理與群成員docker swarmdocker node子系統(tǒng)。有關(guān)如何添加工作節(jié)點(diǎn)并將工作節(jié)點(diǎn)提升為管理者的更多信息,請(qǐng)參閱向群添加節(jié)點(diǎn)。

分布式管理節(jié)點(diǎn)

除了維護(hù)奇數(shù)個(gè)管理器節(jié)點(diǎn)之外,放置管理器時(shí)還要注意數(shù)據(jù)中心的拓?fù)浣Y(jié)構(gòu)。為了獲得最佳的容錯(cuò)性,可以在至少3個(gè)可用區(qū)中分配管理器節(jié)點(diǎn),以支持整套機(jī)器或常見維護(hù)方案的故障。如果您在任何區(qū)域出現(xiàn)故障,群集應(yīng)維持管理器節(jié)點(diǎn)的法定數(shù)量以處理請(qǐng)求并重新平衡工作負(fù)載。

Swarm manager nodes

Repartition (on 3 Availability zones)

3

1-1-1

5

2-2-1

7

3-2-2

9

3-3-3

運(yùn)行僅限manager的節(jié)點(diǎn)

默認(rèn)情況下,管理節(jié)點(diǎn)也可以作為工作節(jié)點(diǎn)。這意味著調(diào)度程序可以將任務(wù)分配給管理器節(jié)點(diǎn)。對(duì)于為管理人員分配任務(wù)的小型和非關(guān)鍵群體,只要您使用cpu內(nèi)存資源約束來(lái)安排服務(wù),則風(fēng)險(xiǎn)相對(duì)較低。

但是,由于管理器節(jié)點(diǎn)使用Raft一致性算法以一致的方式復(fù)制數(shù)據(jù),因此它們對(duì)資源匱乏很敏感。你應(yīng)該隔離群體中的管理人員,使其免受可能阻礙群體心跳或領(lǐng)導(dǎo)者選舉等群體操作的過程。

為了避免干擾管理器節(jié)點(diǎn)操作,可以刪除管理器節(jié)點(diǎn)以使其不可用作worker節(jié)點(diǎn):

docker node update --availability drain <NODE>

當(dāng)您排空節(jié)點(diǎn)時(shí),調(diào)度程序?qū)⒐?jié)點(diǎn)上運(yùn)行的任何任務(wù)重新分配給群中的其他可用工作節(jié)點(diǎn)。它也阻止調(diào)度器將任務(wù)分配給節(jié)點(diǎn)。

添加工作節(jié)點(diǎn)以實(shí)現(xiàn)負(fù)載平衡

為群體添加節(jié)點(diǎn)以平衡群體的負(fù)載。只要工作節(jié)點(diǎn)與服務(wù)的要求相匹配,復(fù)制服務(wù)任務(wù)將隨著時(shí)間的推移盡可能均勻地分布在整個(gè)群體中。將服務(wù)限制為僅在特定類型的節(jié)點(diǎn)(例如具有特定數(shù)量的CPU或內(nèi)存量的節(jié)點(diǎn))上運(yùn)行時(shí),請(qǐng)記住,不符合這些要求的工作節(jié)點(diǎn)將無(wú)法運(yùn)行這些任務(wù)。

監(jiān)測(cè)群體健康

您可以nodes通過/nodesHTTP端點(diǎn)以JSON格式查詢Docker API 來(lái)監(jiān)控管理器節(jié)點(diǎn)的健康狀況。有關(guān)更多信息,請(qǐng)參閱節(jié)點(diǎn)API文檔。

從命令行運(yùn)行docker node inspect <id-node>查詢節(jié)點(diǎn)。例如,要查詢作為管理器的節(jié)點(diǎn)的可達(dá)性:

docker node inspect manager1 --format "{{ .ManagerStatus.Reachability }}"reachable

要將節(jié)點(diǎn)的狀態(tài)查詢?yōu)榻邮苋蝿?wù)的worker,請(qǐng)執(zhí)行以下操作:

docker node inspect manager1 --format "{{ .Status.State }}"ready

從這些命令中,我們可以看到,manager1它既是reachable的manager又是ready的worker。

一個(gè)unreachable健康的狀態(tài)意味著這個(gè)特定的管理器節(jié)點(diǎn)是從其他管理器節(jié)點(diǎn)無(wú)法訪問。在這種情況下,您需要采取措施恢復(fù)無(wú)法訪問的管理器:

  • 重新啟動(dòng)守護(hù)進(jìn)程并查看管理器是否回到可訪問狀態(tài)。

  • 重新啟動(dòng)機(jī)器。

  • 如果既不重新啟動(dòng)也不重新啟動(dòng)工作,則應(yīng)該添加另一個(gè)管理器節(jié)點(diǎn)或?qū)⒐ぷ魅藛T提升為管理器節(jié)點(diǎn)。您還需要從使用docker node demote <NODE>和設(shè)置的管理器中干凈地刪除失敗的節(jié)點(diǎn)條目docker node rm <id-node>

或者,您還可以從管理器節(jié)點(diǎn)獲得群集運(yùn)行狀況的概述,其中包括docker node ls

docker node ls
ID                           HOSTNAME  MEMBERSHIP  STATUS  AVAILABILITY  MANAGER STATUS
1mhtdwhvsgr3c26xxbnzdc3yp    node05    Accepted    Ready   Active
516pacagkqp2xc3fk9t1dhjor    node02    Accepted    Ready   Active        Reachable
9ifojw8of78kkusuc4a6c23fx *  node01    Accepted    Ready   Active        Leader
ax11wdpwrrb6db3mfjydscgk7    node04    Accepted    Ready   Active
bb1nrq2cswhtbg4mrsqnlx1ck    node03    Accepted    Ready   Active        Reachable
di9wxgz8dtuh9d2hn089ecqkf    node06    Accepted    Ready   Active

管理節(jié)點(diǎn)的故障排除

您不應(yīng)該通過raft從另一個(gè)節(jié)點(diǎn)復(fù)制目錄來(lái)重新啟動(dòng)管理器節(jié)點(diǎn)。數(shù)據(jù)目錄對(duì)于節(jié)點(diǎn)ID是唯一的。一個(gè)節(jié)點(diǎn)只能使用一次節(jié)點(diǎn)ID加入群。節(jié)點(diǎn)ID空間應(yīng)該是全局唯一的。

清晰的地重新加入管理器節(jié)點(diǎn)到集群:

  1. 要將節(jié)點(diǎn)降級(jí)為工作人員,請(qǐng)運(yùn)行docker node demote <NODE>。

2. 若要從群集中刪除節(jié)點(diǎn),請(qǐng)運(yùn)行docker node rm <NODE>...

3. 使用以下方法將節(jié)點(diǎn)重新加入到具有新狀態(tài)的群集中。docker swarm join...

有關(guān)將管理器節(jié)點(diǎn)加入群的更多信息,請(qǐng)參閱將群節(jié)點(diǎn)加入群。

強(qiáng)制刪除節(jié)點(diǎn)

在大多數(shù)情況下,您應(yīng)該關(guān)閉一個(gè)節(jié)點(diǎn),然后使用該docker node rm命令將其從群集中刪除。如果某個(gè)節(jié)點(diǎn)變得無(wú)法訪問,無(wú)響應(yīng)或受損,則可以通過傳遞該--force標(biāo)志強(qiáng)制刪除該節(jié)點(diǎn)而不關(guān)閉該節(jié)點(diǎn)。例如,如果node9變得受到影響:

$ docker node rm node9

Error response from daemon: rpc error: code = 9 desc = node node9 is not down and can't be removed

$ docker node rm --force node9

Node node9 removed from swarm

在強(qiáng)制刪除管理器節(jié)點(diǎn)之前,必須先將其降級(jí)為輔助角色。如果您降級(jí)或刪除管理者,請(qǐng)確保您總是有奇數(shù)個(gè)管理者節(jié)點(diǎn)。

備份群

Docker管理器節(jié)點(diǎn)將swarm狀態(tài)和管理器日志存儲(chǔ)在/var/lib/docker/swarm/目錄中。在1.13及更高版本中,這些數(shù)據(jù)包括用于加密Raft日志的密鑰。沒有這些鍵,你將無(wú)法恢復(fù)群。

您可以使用任何管理器備份群。使用以下步驟。

  1. 如果群體啟用了自動(dòng)鎖定功能,則需要解鎖密鑰才能從備份恢復(fù)群集。必要時(shí)檢索解鎖鑰匙并將其存放在安全的地方。如果您不確定,請(qǐng)閱讀鎖定群集以保護(hù)其加密密鑰。

2. 在備份數(shù)據(jù)之前在Manager上停止Docker,以便在備份過程中不會(huì)更改任何數(shù)據(jù)??梢栽诠芾砥鬟\(yùn)行時(shí)進(jìn)行備份(一個(gè)“hot”的備份),但不建議這樣做,并且恢復(fù)時(shí)結(jié)果的可預(yù)測(cè)性會(huì)降低。當(dāng)管理器關(guān)閉時(shí),其他節(jié)點(diǎn)將繼續(xù)生成不屬于此備份的群集數(shù)據(jù)。

注意:務(wù)必保持群體管理器的法定人數(shù)。在管理器關(guān)閉期間,如果更多節(jié)點(diǎn)丟失,則群體更容易丟失法定人數(shù)。你所經(jīng)營(yíng)的管理器數(shù)是一種權(quán)衡。如果您定期關(guān)閉管理員進(jìn)行備份,請(qǐng)考慮運(yùn)行5管理器群,以便在備份運(yùn)行時(shí)丟失額外的管理器,而不會(huì)中斷服務(wù)。

  1. 備份整個(gè)/var/lib/docker/swarm目錄。

  1. 重新啟動(dòng)管理器。

要恢復(fù),請(qǐng)參閱從備份恢復(fù)。

災(zāi)后恢復(fù)

從備份恢復(fù)

按備份群組中的說(shuō)明備份群組后,使用以下步驟將數(shù)據(jù)恢復(fù)到新群組。

  1. 關(guān)閉群集將要恢復(fù)的目標(biāo)主機(jī)上的Docker。

2. 刪除/var/lib/docker/swarm新群體上目錄的內(nèi)容。

3. 使用備份的內(nèi)容還原目錄/var/lib/docker/swarm。  注意:新節(jié)點(diǎn)將使用與舊的節(jié)點(diǎn)相同的加密密鑰進(jìn)行磁盤存儲(chǔ)。目前無(wú)法更改磁盤上的存儲(chǔ)加密密鑰。對(duì)于啟用了自動(dòng)鎖定的群組,解鎖密鑰也與舊群組相同,并且需要解鎖密鑰才能恢復(fù)。

  1. 在新節(jié)點(diǎn)上啟動(dòng)Docker。必要時(shí)解鎖群。使用以下命令重新初始化群集,以便此節(jié)點(diǎn)不會(huì)嘗試連接到屬于舊群集的節(jié)點(diǎn),并且可能不再存在。

$ docker swarm init --force-new-cluster

2. 驗(yàn)證群體的狀態(tài)是否符合預(yù)期。這可能包括特定于應(yīng)用程序的測(cè)試或僅檢查輸出docker service ls以確保所有預(yù)期的服務(wù)都存在。

3. 如果您使用自動(dòng)鎖定,請(qǐng)旋轉(zhuǎn)解鎖鍵。

4. 添加管理器和工作者節(jié)點(diǎn),使您的新團(tuán)隊(duì)達(dá)到運(yùn)營(yíng)能力。

5. 在新群體上恢復(fù)先前的備份方案。

從失去法定人數(shù)恢復(fù)

Swarm對(duì)故障具有恢復(fù)能力,并且該群可以從任何數(shù)量的臨時(shí)節(jié)點(diǎn)故障(機(jī)器重啟或重啟時(shí)崩潰)或其他瞬時(shí)錯(cuò)誤中恢復(fù)。但是,如果群體失去法定人數(shù),群體無(wú)法自動(dòng)恢復(fù)?,F(xiàn)有工作節(jié)點(diǎn)上的任務(wù)將繼續(xù)運(yùn)行,但管理任務(wù)不可行,包括擴(kuò)展或更新服務(wù)以及加入或從群集中刪除節(jié)點(diǎn)。恢復(fù)的最佳方法是將丟失的管理器節(jié)點(diǎn)重新聯(lián)機(jī)。如果這是不可能的,繼續(xù)閱讀一些恢復(fù)你的群的選項(xiàng)。

在一群N管理人員中,管理器節(jié)點(diǎn)的法定人數(shù)(大多數(shù))必須始終可用。例如,在一個(gè)擁有5名管理器的群體中,至少有3人必須開展業(yè)務(wù)并相互溝通。換句話說(shuō),群體可以容忍(N-1)/2永遠(yuǎn)的失敗,超過這個(gè)失敗的群體管理請(qǐng)求不能被處理。這些類型的故障包括數(shù)據(jù)損壞或硬件故障。

如果你失去了管理人員的法定人數(shù),你不能管理群體。如果您失去了法定人數(shù),并且您嘗試對(duì)群體執(zhí)行任何管理操作,則會(huì)發(fā)生錯(cuò)誤:

Error response from daemon: rpc error: code = 4 desc = context deadline exceeded

從丟失法定數(shù)量中恢復(fù)的最佳方法是將故障節(jié)點(diǎn)重新聯(lián)機(jī)。如果你不能這樣做,從這個(gè)狀態(tài)恢復(fù)的唯一方法就是使用--force-new-cluster來(lái)自管理節(jié)點(diǎn)的動(dòng)作。這將除去命令運(yùn)行的管理器之外的所有管理器。達(dá)到法定人數(shù)是因?yàn)楝F(xiàn)在只有一名經(jīng)理。促使節(jié)點(diǎn)成為管理器,直到你擁有理想的管理器數(shù)量。

# From the node to recover
docker swarm init --force-new-cluster --advertise-addr node01:2377

當(dāng)您運(yùn)行docker swarm init命令的--force-new-cluster標(biāo)志,您運(yùn)行命令的Docker引擎將成為能夠管理和運(yùn)行服務(wù)的單個(gè)節(jié)點(diǎn)群的管理節(jié)點(diǎn)。管理器擁有有關(guān)服務(wù)和任務(wù)的所有信息,工作節(jié)點(diǎn)仍然是群集的一部分,服務(wù)仍然在運(yùn)行。您將需要添加或重新添加管理器節(jié)點(diǎn),以實(shí)現(xiàn)您以前的任務(wù)分發(fā),并確保您有足夠的管理器來(lái)保持高可用性和防止丟失仲裁。

強(qiáng)制群體重新平衡

一般來(lái)說(shuō),你不需要強(qiáng)迫群體重新平衡任務(wù)。當(dāng)您向群體中添加新節(jié)點(diǎn)或在某段時(shí)間不可用后節(jié)點(diǎn)重新連接群體時(shí),群體不會(huì)自動(dòng)將工作負(fù)荷分配給閑置節(jié)點(diǎn)。這是一個(gè)設(shè)計(jì)決定。如果群體為了平衡而周期性地將任務(wù)轉(zhuǎn)移到不同節(jié)點(diǎn),那么使用這些任務(wù)的客戶端將會(huì)中斷。我們的目標(biāo)是避免為了整個(gè)群體的平衡而中斷運(yùn)行服務(wù)。當(dāng)新任務(wù)啟動(dòng)時(shí),或者當(dāng)運(yùn)行任務(wù)的節(jié)點(diǎn)變?yōu)椴豢捎脮r(shí),這些任務(wù)將被分配給不太繁忙的節(jié)點(diǎn)。目標(biāo)是最終平衡,對(duì)最終用戶造成的影響最小。

在Docker 1.13及更高版本中,可以使用--forceor -f標(biāo)志docker service update來(lái)強(qiáng)制服務(wù)在可用的工作節(jié)點(diǎn)上重新分配其任務(wù)。這將導(dǎo)致服務(wù)任務(wù)重新啟動(dòng)。客戶端應(yīng)用程序可能會(huì)中斷。如果您已配置它,您的服務(wù)將使用滾動(dòng)更新。

如果您使用較早的版本,并且希望在工作人員之間達(dá)到均衡的負(fù)載,并且不介意中斷正在運(yùn)行的任務(wù),則可以通過臨時(shí)縮放服務(wù)來(lái)強(qiáng)制群集重新平衡。使用docker service inspect --pretty <servicename>看服務(wù)的配置比例。在您使用時(shí)docker service scale,具有最少任務(wù)數(shù)量的節(jié)點(diǎn)將用于接收新的工作負(fù)載。群體中可能有多個(gè)負(fù)載不足的節(jié)點(diǎn)。您可能需要通過幾次適度增量擴(kuò)展服務(wù),以實(shí)現(xiàn)所有節(jié)點(diǎn)間的平衡。

當(dāng)負(fù)載達(dá)到您的滿意度時(shí),您可以將服務(wù)縮減至原始比例。您可以使用docker service ps來(lái)評(píng)估跨節(jié)點(diǎn)的服務(wù)當(dāng)前余額。

上一篇: 下一篇: