Docker Swarm để đạt được tính khả dụng cao



Blog này trên Docker Swarm, giải thích sức mạnh của việc thiết lập một cụm công cụ Docker thông qua Docker Swarm được định cấu hình để đạt được Tính khả dụng cao.

Tính năng quan trọng nhất của bất kỳ ứng dụng dựa trên web nào? Có rất nhiều, nhưng đối với tôi tính khả dụng cao là điều quan trọng nhất. Đó là những gì Docker Swarm giúp chúng tôi đạt được! Nó giúp ứng dụng có tính khả dụng cao.

trong tôi blog trước , Tôi đã giải thích cách hoạt động của Docker Compose. Blog này trên Docker Swarm là phần tiếp theo của blog trước đây và ở đây những lợi ích của việc sử dụng Docker Swarm để chứa bất kỳ ứng dụng đa vùng chứa nào đã được giải thích.





Trong trường hợp của blog này, nó chỉ là một ứng dụng Angular sẽ là Docker Swarm’ed.
Ghi chú : Phương pháp chứa ứng dụng MEAN Stack giống nhau.

Vì vậy, Docker Swarm là gì?

Docker Swarm là một kỹ thuật để tạo và duy trì một nhóm Động cơ Docker . Các công cụ Docker có thể được lưu trữ trên các nút khác nhau và các nút này ở các vị trí từ xa tạo thành Cụm khi được kết nối ở chế độ Swarm.



Tại sao sử dụng Docker Swarm?

Vì lý do đã đề cập rồi! Đạt được tính khả dụng cao không có bất kỳ thời gian chết nào là ưu tiên của mọi nhà cung cấp dịch vụ hiện có. Tính khả dụng cao có gây ấn tượng với khách hàng của bạn không? Chà, họ sẽ không ấn tượng nếu họ phải đối mặt với thời gian chết. Đó là điều không cần phải bàn cãi.

Các lợi ích khác của Docker Swarm

Giống như nhiều dịch vụ khác, Docker Swarm tự động cân bằng tải cho chúng tôi. Do đó, các kỹ sư DevOps không cần định tuyến các yêu cầu xử lý đến các nút khác khi một nút bị lỗi. Người quản lý cụm sẽ tự động thực hiện cân bằng tải cho chúng tôi.

Quyền truy cập phi tập trung là một lợi ích khác. Điều đó nghĩa là gì? Nó có nghĩa là tất cả các nút có thể được truy cập dễ dàng từ trình quản lý. Người quản lý cũng sẽ nhắc nhở các nút một cách thường xuyên và theo dõi sức khỏe / trạng thái của nó để đối phó với thời gian chết. Tuy nhiên, các nút không thể truy cập hoặc theo dõi các dịch vụ đang chạy trong các nút / trình quản lý khác.



Bạn có thể kiểm tra số không. trong số các vùng chứa đang chạy trong một nút, mở rộng quy mô cái không. thùng chứa hoặc giảm quy mô cái không. dựa trên yêu cầu của chúng tôi, chỉ bằng cách thực hiện một lệnh duy nhất.

Ngay cả sau khi một ứng dụng đã được triển khai, chúng tôi có thể phát hành cập nhật lần lượt và đảm bảo rằng đạt được CI (Tích hợp liên tục). Cập nhật cuộn được phát hành cho nút này sau nút kia, do đó đảm bảo không có thời gian chết và tải được phân phối giữa các nút khác trong cụm.

Vì vậy, những gì tiếp theo? Để làm điều hiển nhiên. Bắt đầu với Docker Swarm nếu bạn đã làm việc trên Docker hoặc nếu tổ chức của bạn muốn chứa một dịch vụ web đáng tin cậy.

Ghi chú : Các công cụ Docker được cài đặt trên các máy chủ / máy chủ độc lập hoặc trong nhiều máy ảo trong một máy chủ.

Bắt đầu với Chế độ bầy đàn

Docker Swarm được khởi tạo bởi người quản lý, hoặc để tôi nói theo cách này, trường hợp bắt đầu cụm Swarm trở thành người quản lý. Lệnh để bắt đầu cụm là:

$ docker swarm init --advertise-addr ip-address

Ở đây, cờ ‘–advertise-addr’ được sử dụng để tự quảng cáo cho các nút khác muốn tham gia cụm. Địa chỉ IP của người quản lý cần được chỉ định cùng với cờ. Dưới đây là ảnh chụp màn hình mẫu.

docker init command - docker Swarm - edureka

Khi cụm Swarm được bắt đầu, một mã thông báo sẽ được tạo ở đầu của người quản lý. Mã thông báo này cần được sử dụng bởi các nút khác để tham gia nhóm bầy đàn.

Làm thế nào là nó chính xác? Sao chép toàn bộ mã thông báo được tạo tại công cụ docker của người quản lý, dán nó vào công cụ docker của nút và thực thi. Phần được đánh dấu của ảnh chụp màn hình ở trên là một mã thông báo. Khi mã thông báo được thực thi tại một nút công nhân, nó sẽ giống như ảnh chụp màn hình bên dưới.

Bất kỳ nút nào tham gia cụm sau này đều có thể được thăng cấp thành trình quản lý. Trong trường hợp bạn muốn một công cụ docker tham gia với tư cách là người quản lý, hãy thực hiện lệnh dưới đây ở cuối trình quản lý:

Trình quản lý mã thông báo tham gia bầy đàn $ docker

Và tại thời điểm sau đó, nếu bạn muốn mã thông báo cho một nút tham gia vào cụm, hãy chạy lệnh dưới đây:

$ docker swarm nút tham gia mã thông báo

Hãy tiếp tục và thực thi mã thông báo tại mọi nút bạn muốn, để tham gia vào cụm. Khi tất cả những việc đó đã hoàn tất, bạn có thể chạy lệnh danh sách nút docker để kiểm tra xem có bao nhiêu nút đã tham gia vào cụm cùng với trạng thái của chúng. Lệnh là:

$ docker node ls

Ảnh chụp màn hình bên dưới:

Tạo hình ảnh Docker cho ứng dụng Angular

Nếu tất cả đều ổn, thì chúng ta có thể bắt đầu dịch vụ Swarm của mình, miễn là Docker Image được tạo. Hình ảnh Docker có thể được xây dựng từ Dockerfile. Dockerfile được sử dụng để xây dựng các ứng dụng dưới đây:

TỪ nút: 6 CHẠY mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache sạch RUN npm cài đặt COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Dockerfile được sử dụng để thực hiện một tập hợp các lệnh cùng nhau để xây dựng hình ảnh Docker tùy chỉnh từ hình ảnh cơ sở. Như bạn có thể thấy, hình ảnh cơ sở tôi đã sử dụng là ‘Node: 6’. NodeJS là hình ảnh tôi từ Docker Hub được gắn thẻ phiên bản 6.

hàm power trong java cho số nguyên

Sau đó, tôi đang tạo một thư mục Docker mới bên trong vùng chứa và đặt nó thành thư mục làm việc bên trong vùng chứa của tôi.

Tôi đang sao chép tệp ‘package.json’ từ máy cục bộ của mình vào thư mục làm việc của vùng chứa. Sau đó, tôi chỉ định các lệnh ‘RUN npm cache clean’ và ‘RUN npm install’. cài đặt npm lệnh tải xuống phiên bản của các phụ thuộc được đề cập trong tệp package.json.

Sau đó, tôi sao chép tất cả các mã dự án từ máy cục bộ vào vùng chứa, để lộ số cổng 4200 để truy cập ứng dụng Angular trên trình duyệt và cuối cùng, tôi chỉ định lệnh bắt đầu npm chứa ứng dụng.

Bây giờ, để tạo hình ảnh Docker dựa trên Dockerfile này, hãy chạy lệnh dưới đây:

$ docker build -t angle-image.

Ghi chú: Hình ảnh Docker cần được xây dựng trong tất cả các nút trong cụm. Không có nó, các vùng chứa không thể được quay trong các công cụ Docker khác.

Bắt đầu Dịch vụ Docker Swarm

Do Hình ảnh Docker của chúng tôi đã được xây dựng, chúng tôi có thể quay một vùng chứa ra khỏi hình ảnh này. Nhưng, chúng tôi sẽ làm điều gì đó tốt hơn: tạo một dịch vụ Docker Swarm từ nó. Lệnh để tạo một dịch vụ bầy đàn là:

Dịch vụ $ docker tạo --name 'Angular-App-Container' -p 4200: 4200 angle-image

Ở đây, cờ ‘name’ được sử dụng để đặt tên cho dịch vụ của tôi và cờ ‘p’ được sử dụng để hiển thị cổng container với cổng máy chủ. Trong tệp package.json, tôi đã chỉ định cổng vùng chứa mà ứng dụng Angular sẽ được lưu trữ. Và 4200 trong lệnh này giúp ánh xạ cổng 4200 của vùng chứa với cổng 4200 của máy chủ. ‘Angle-image’ là tên của hình ảnh mà tôi đã tạo trước đó.

Nhớ lại : Khi chúng tôi tạo một dịch vụ, nó có thể được lưu trữ trên bất kỳ công cụ docker nào trong cụm. Người quản lý bầy sẽ quyết định nơi nó sẽ được lưu trữ. Tuy nhiên, bất kể nó được lưu trữ ở nút nào, ứng dụng có thể được truy cập trên localhost: 4200 từ bất kỳ nút nào được kết nối trong cụm.

Làm thế nào là có thể? Bởi vì nội bộ Swarm hiển thị số cổng mà mọi nút khác trong cụm đều có thể truy cập được. Điều đó có nghĩa là, cổng không. 4200 trên bất kỳ nút / trình quản lý nào trong cụm sẽ hiển thị ứng dụng Angular.

Giờ thì sao? Vùng chứa có hoạt động không?

Bạn có thể xác minh xem dịch vụ có được lưu trữ hay không bằng cách chạy lệnh danh sách dịch vụ docker. Tuy nhiên, có thể mất một phút để vùng chứa được triển khai. Dưới đây là lệnh:

$ dịch vụ docker ls

Lệnh này sẽ liệt kê tất cả các dịch vụ được quản lý bởi cụm Swarm. Trong trường hợp của chúng tôi, nó sẽ hiển thị một vùng chứa đang hoạt động. Nhìn vào ảnh chụp màn hình dưới đây để tham khảo.

Ở đây, “REPLICAS = 1/1” chỉ ra rằng có một ‘dịch vụ’ duy nhất của vùng chứa đó, trong cụm. Và “MODE = replicated” chỉ ra rằng dịch vụ được sao chép trên tất cả các nút trong cụm.

Bây giờ, để xác định nút / trình quản lý nào, ứng dụng được lưu trữ, chúng ta có thể chạy lệnh ps dịch vụ docker lệnh theo sau là tên vùng chứa. Lệnh là:

Dịch vụ $ docker ps Angular-App-Container

Ảnh chụp màn hình tương tự ở bên dưới.

Phần này đề cập chi tiết về nút mà ứng dụng được lưu trữ cùng với lệnh được sử dụng để bắt đầu dịch vụ.

Lệnh ‘docker ps’ đưa ra ánh sáng về các chi tiết về vùng chứa đang hoạt động. Lệnh là:

$ docker ps

Nhìn vào ảnh chụp màn hình dưới đây để tham khảo.

Tuy nhiên, lệnh này sẽ chỉ hoạt động trên trình quản lý cụm và nút nơi dịch vụ thực sự được lưu trữ.

Để kiểm tra xem có bao nhiêu nút đang chạy, hãy chạy lệnh danh sách nút. Lệnh là:

$ docker node ls

Để kiểm tra các vùng chứa đang chạy trong một máy chủ cụ thể, hãy chạy lệnh ps của nút. Lệnh là:

$ docker node ps

Nếu bạn còn nhớ, tôi đã đề cập trước đó rằng dịch vụ hiện đang chạy ở MODE nhân rộng. Điều này có nghĩa là dịch vụ được nhân rộng trên tất cả các nút trong cụm. Bạn có nghĩ rằng có một giải pháp thay thế?

Chắc chắn rồi! Có một cái gì đó được gọi là Global MODE. Trong chế độ này, có một dịch vụ của vùng chứa này đang chạy ở mọi người quản lý / đơn lẻ trong cụm. Hãy nhớ dừng dịch vụ / vùng chứa hiện tại trước khi quay một bộ vùng chứa khác.

Lệnh cho điều đó là:

Dịch vụ $ docker rm Angular-App-Container

Lệnh để quay vùng chứa ở chế độ Toàn cục là:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --mode global angle-image

Điều này sẽ tạo ra 3 dịch vụ trên 3 nút trong cụm của chúng tôi. Bạn có thể xác minh nó bằng cách chạy lệnh danh sách dịch vụ docker. Ảnh chụp màn hình của điều này là bên dưới.

Khi lệnh ps của dịch vụ docker được thực thi, bạn sẽ thấy như sau:

Như bạn có thể thấy, nó cho biết chế độ được nhân rộng và bản sao của vùng chứa này là 3. Bây giờ đến phần hay nhất của blog này.

Để có 2 bản sao của các dịch vụ chạy giữa ba vùng chứa, chúng ta có thể sử dụng cờ bản sao. Nhìn vào lệnh bên dưới:

$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angle-image

Bạn sẽ nhận thấy rằng 2 dịch vụ này được cân bằng tải giữa ba nút trong cụm. Chạy lệnh quy trình dịch vụ docker để xác minh, trong đó các nút mà vùng chứa đang hoạt động. Nhìn vào ảnh chụp màn hình dưới đây để tham khảo. Các vùng chứa đang hoạt động trong một nút người quản lý và một nút công nhân.

Từ nút Worker, bạn có thể xác minh vùng chứa đang chạy bằng cách thực hiện lệnh ‘docker ps’.

Docker Swarm cho tính khả dụng cao

Bây giờ để thực sự xác minh rằng có tính khả dụng cao trong cụm của chúng tôi, chúng ta cần trải nghiệm một tình huống trong đó một trong các nút bị hỏng và các nút khác trong cụm bù đắp cho nó. Chúng ta có thể đưa ra kịch bản đó bằng cách dừng vùng chứa từ một trong các nút theo cách thủ công bằng lệnh này:

$ docker stop Angular-App-Container

Chạy lệnh trên trên nút: Worker-1 nơi vùng chứa đang chạy.Từ trình quản lý, hãy chạy lệnh:

Dịch vụ $ docker ps Angular-App-Container

Bây giờ bạn sẽ nhận thấy rằng vùng chứa hiện đang chạy trong nút: Worker-2 và Manager. Tuy nhiên, nó đã bị tắt từ nút: Worker-1. Điều tương tự có thể nhìn thấy từ ảnh chụp màn hình bên dưới.

Đây là cách Tính khả dụng cao của Docker được hoàn thành. Tôin mặc dù vùng chứa không hoạt động trong Worker-1, ứng dụng có thể được hiển thị ở cổng số 4200 trên nút worker đó. Điều này là do nó được kết nối nội bộ với các nút khác trong cụm và nó có thể hiển thị ứng dụng trong trình duyệt.

Tính khả dụng cao sau khi mở rộng quy mô dịch vụ

Có thể là ở chế độ nhân rộng hoặc chế độ toàn cầu, chúng tôi có thể mở rộng số lượng dịch vụ đang chạy trong cụm của chúng tôi. Và ngay cả sau khi mở rộng quy mô, chúng tôi vẫn có thể duy trì tính khả dụng cao. Tuyệt vời phải không?

Nhưng quay lại quan điểm của chúng tôi, hãy xem việc mở rộng số lượng dịch vụ trong cụm của chúng tôi dễ dàng như thế nào. Giả sử rằng chúng ta có 2 hoặc 3 bản sao trong cụm của mình, chúng ta hãy mở rộng các dịch vụ lên 5 chỉ bằng cách chạy một lệnh duy nhất. Lệnh là:

Quy mô dịch vụ $ docker Angular-App-Container = 5

Ảnh chụp màn hình của điều này là bên dưới.

Bằng cách chạy lệnh danh sách dịch vụ docker, bạn có thể nhận thấy rằng số lượng bản sao hiện là 5. Và bằng cách chạy lệnh ps dịch vụ docker cùng với tên dịch vụ, bạn có thể thấy cách 5 dịch vụ được cân bằng tải và phân phối trên 3 nút. . Các lệnh là:

Dịch vụ $ docker ls $ dịch vụ docker ps Angular-App-Container

Và cuối cùng, trong thiết lập Docker Swarm nếu bạn không muốn người quản lý của mình tham gia vào quá trình tố tụng và giữ nó ở chế độ chỉ quản lý các quy trình, thì chúng tôi có thể rút người quản lý khỏi lưu trữ bất kỳ ứng dụng nào. Bởi vì đây là cách nó hoạt động trên thế giới, phải không? Người quản lý chỉ để quản lý những người lao động khác. Dù sao, lệnh để làm điều đó là:

Cập nhật nút $ docker - Trình quản lý cống khả dụng-1

Bạn có thể xác minh xem người quản lý hiện đang tham gia vào cụm bằng cách chạy lệnh danh sách nút docker và lệnh ps dịch vụ docker:

$ docker node ls $ docker service ps Angular-App-Container

Bây giờ bạn có thể nhận thấy rằng các dịch vụ vùng chứa đã được phân chia giữa các nút Công nhân và nút Trình quản lý đã thực sự bị rút khỏi việc chứa bất kỳ dịch vụ nào. Ảnh chụp màn hình bên dưới.

Vì vậy, điều đó đã kết thúc blog này trên Docker Swarm. Tôi hy vọng blog này đã giải thích tầm quan trọng của việc triển khai chế độ Swarm để đạt được tính khả dụng cao. Hãy theo dõi các blog khác trong loạt bài hướng dẫn Docker này.

Ngoài ra, bạn có thể xem video bên dưới để hiểu cách hoạt động của Docker Swarm. Tất cả các khái niệm được giải thích ở trên đã được đề cập trong video.

Docker Swarm cho tính khả dụng cao | Hướng dẫn Docker | Hướng dẫn DevOps

Bây giờ bạn đã học về Docker, hãy xem của Edureka, một công ty học trực tuyến đáng tin cậy với mạng lưới hơn 250.000 người học hài lòng trải dài trên toàn cầu. Khóa đào tạo Chứng chỉ Edureka Docker này giúp người học có được kiến ​​thức chuyên môn trong việc triển khai Docker và thành thạo nó.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần bình luận và chúng tôi sẽ liên hệ lại với bạn.