Giới thiệu
Trong thế giới phát triển phần mềm hiện đại, việc triển khai ứng dụng mở rộng hiệu quả là một yếu tố quan trọng để đảm bảo hiệu suất và tính sẵn có. Docker Swarm và Docker Compose là hai công cụ mạnh mẽ giúp các nhà phát triển dễ dàng quản lý và triển khai các ứng dụng phân tán. Bài viết này sẽ hướng dẫn bạn cách xây dựng một cụm Docker Swarm và triển khai ứng dụng của bạn một cách hiệu quả.
Mục lục
- Phần 1: Xây dựng cụm (Nền tảng)
- Phần 2: Định nghĩa và Triển khai Ứng dụng
- Phần 3: Kiểm tra và Thử nghiệm Ứng dụng
- Thực tiễn tốt nhất
- Cạm bẫy thường gặp
- Mẹo hiệu suất
- Khắc phục sự cố
Phần 1: Xây dựng cụm (Nền tảng)
1. Truy cập Play-With-Docker và Tạo Các Instance
Bạn sẽ tạo 5 instance. Đây sẽ là 5 máy chủ của bạn.
2. Khởi tạo Swarm (Chỉ định Người lãnh đạo đầu tiên)
bash
docker swarm init --advertise-addr [ManagerNodeIP]
Bạn chọn một trong năm instance của mình để làm Manager Node đầu tiên. Lệnh này "bắt đầu" swarm và tuyên bố node này là lãnh đạo. Tham số --advertise-addr cho biết địa chỉ IP mà các node khác cần sử dụng để tìm và kết nối với manager này.
3. Thêm Worker Nodes (Chiêu mộ Các Nhân viên)
bash
docker swarm join --token SWMTKN-1-17xx0ratormliuuff545oiotqjjgdrlfvbmji5xny007bhdqdx-98ny7h91d36bcy4dgfd8zujm9 192.168.0.29:2377
Bạn sao chép lệnh join từ manager và dán nó vào 3 instance còn lại. Mã token dài giống như một mật khẩu bí mật chứng minh rằng chúng được phép tham gia vào swarm của bạn. Những node này trở thành Worker Nodes. Nhiệm vụ duy nhất của chúng là chạy các container theo chỉ định của manager.
4. Thêm một Manager Thứ Hai (Có Người Lãnh đạo Dự phòng)
Lệnh:
- Trên manager đầu tiên:
bash
docker swarm join-token manager
- Trên instance còn lại: Dán lệnh xuất hiện sau lệnh join-token manager vào instance còn lại:
bash
docker swarm join --token SWMTKN-1-17xx0ratormliuuff545oiotqjjgdrlfvbmji5xny007bhdqdx-1hahfhs9mrrgsb0nsyzk8vpyp 192.168.0.29:2377
5. Xác minh Cụm
bash
docker node ls
Phần 2: Định nghĩa và Triển khai Ứng dụng
Dưới đây là tệp docker-compose.yml:
yaml
version: "3.8"
services:
mydatabase:
image: mysql:5.7
restart: always
volumes:
- mydata:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- mynet
mywordpress:
image: wordpress:latest
deploy:
replicas: 3
update_config:
parallelism: 2
delay: 5s
order: stop-first
depends_on:
- mydatabase
restart: always
ports:
- "80:80"
- "443:443"
environment:
WORDPRESS_DB_HOST: mydatabase:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
networks:
- mynet
volumes:
mydata:
networks:
mynet:
driver: overlay
6. Triển khai Stack
bash
docker stack deploy --compose-file docker-compose.yml firststack
docker stack: Lệnh để quản lý các ứng dụng đa dịch vụ trong Swarm.deploy: Hành động để tạo hoặc cập nhật ứng dụng.firststack: Tên bạn đặt cho stack ứng dụng của mình.
Manager sẽ đọc tệp của bạn và bắt đầu tạo các container trên các worker nodes theo thông số kỹ thuật của bạn (1 container MySQL và 3 container WordPress).
Phần 3: Kiểm tra và Thử nghiệm Ứng dụng
7. Kiểm tra Stack
bash
docker stack ls
docker stack services firststack
docker stack ps firststack
docker stack ls: Liệt kê tất cả các stack đang chạy trên swarm của bạn.docker stack services firststack: Hiển thị các dịch vụ trong stack của bạn (firststack_mydatabasevàfirststack_mywordpress) và số lượng bản sao đang chạy.docker stack ps firststack: Đây là cái nhìn chi tiết nhất. Nó hiển thị từng container (được gọi là "task" trong Swarm), node mà nó đang chạy trên đó, và trạng thái hiện tại của nó.
8. Kiểm tra Tính năng Tự Khôi Phục
- Hành động: Bạn sẽ đến một trong các worker nodes và dừng thủ công một container WordPress bằng lệnh
docker container stop [containerID]. - Điều gì đang xảy ra ở đây? Bạn đang mô phỏng một sự cố.
- Kết quả: Swarm manager liên tục theo dõi cụm. Nó sẽ thấy rằng một trong các bản sao
mywordpressđã biến mất (trạng thái mong muốn là 3, nhưng trạng thái hiện tại là 2). Nó sẽ ngay lập tức ra lệnh cho một worker node khởi động một container WordPress mới để đưa số lượng trở lại 3. - Xác minh: Nếu bạn chạy lại lệnh
docker stack ps firststacktrên manager, bạn sẽ thấy container đã dừng và một container mới đã được khởi động để thay thế nó. Điều này chứng tỏ sức mạnh "tự khôi phục" của Swarm.
bash
docker stack ps firststack
Thực tiễn tốt nhất
- Thường xuyên kiểm tra trạng thái của các node trong cụm: Sử dụng lệnh
docker node lsđể theo dõi tình trạng của các node. - Sử dụng mạng overlay cho các dịch vụ: Điều này giúp tăng cường khả năng mở rộng và bảo mật cho ứng dụng của bạn.
Cạm bẫy thường gặp
- Không cấu hình đúng địa chỉ IP: Đảm bảo địa chỉ IP mà bạn sử dụng trong lệnh khởi tạo swarm là chính xác.
- Quản lý tài nguyên không hiệu quả: Theo dõi tài nguyên sử dụng của các container để tránh tình trạng quá tải.
Mẹo hiệu suất
- Sử dụng phiên bản mới nhất của Docker: Đảm bảo rằng bạn đang sử dụng phiên bản Docker mới nhất để tận dụng các tính năng và sửa lỗi mới nhất.
- Tối ưu hóa cấu hình MySQL: Cấu hình MySQL để sử dụng bộ nhớ và tài nguyên hiệu quả hơn.
Khắc phục sự cố
- Container không khởi động: Kiểm tra log của container bằng lệnh
docker logs [containerID]để xác định nguyên nhân. - Không thể kết nối đến dịch vụ: Kiểm tra cấu hình mạng và đảm bảo rằng các dịch vụ có thể giao tiếp với nhau.
Kết luận
Việc triển khai ứng dụng mở rộng với Docker Swarm và Docker Compose không chỉ đơn giản hóa quy trình mà còn giúp bạn quản lý các ứng dụng phức tạp một cách hiệu quả. Bằng cách làm theo hướng dẫn trên, bạn có thể xây dựng và triển khai các ứng dụng phân tán một cách dễ dàng. Hãy bắt đầu với Docker ngay hôm nay và trải nghiệm những lợi ích mà nó mang lại cho phát triển phần mềm của bạn!