paint-brush
Tự động triển khai lưu trữ đám mây với MinIO và SystemDby@minio
6,170
6,170

Tự động triển khai lưu trữ đám mây với MinIO và SystemD

MinIO8m2023/08/10
Read on Terminal Reader

Quá trình tự động hóa đi một chặng đường dài hướng tới việc duy trì tính khả dụng khi chạy một dịch vụ quan trọng như bộ nhớ đối tượng. Tự động hóa là một yêu cầu để vận hành ở quy mô lớn trên nhiều đám mây và môi trường. Với sự trợ giúp của SystemD và MinIO, bạn có thể tự động hóa việc triển khai lưu trữ đối tượng đám mây của mình và đảm bảo vòng đời dịch vụ được quản lý suôn sẻ và thành công.
featured image - Tự động triển khai lưu trữ đám mây với MinIO và SystemD
MinIO HackerNoon profile picture
0-item
1-item
2-item

MinIO là một trong những kho lưu trữ đối tượng được triển khai rộng rãi nhất vì nó mang lại hiệu suất cao, khả năng mở rộng quy mô lớn, tính sẵn sàng cao và tuân thủ giao thức S3 tiêu chuẩn của ngành. MinIO có khả năng đạt hiệu suất cực cao - điểm chuẩn gần đây đạt được là 325 GiB/giây (349 GB/giây) trên GET và 165 GiB/giây (177 GB/giây) trên PUT chỉ với 32 nút SSD NVMe bán sẵn. Bất kể bạn chạy MinIO ở đâu – kim loại trần, phiên bản ảo hay Kubernetes – hiệu suất và khả năng mở rộng của MinIO cung cấp nền tảng tuyệt vời cho các ứng dụng gốc trên đám mây như hồ dữ liệu, phân tích, AI/ML, v.v.


Ngoài Kubernetes, khách hàng chạy MinIO trên các phiên bản ảo và kim loại trần, thường dựa vào phần cứng Supermicro trong trung tâm dữ liệu và các đám mây như AWS , GCPAzure . Dấu chân nhỏ của Linux cùng với việc sử dụng tài nguyên hiệu quả làm cho nó trở thành một lựa chọn linh hoạt và linh hoạt để chạy MinIO. Tuy nhiên, số lượng lớn hơn các máy và phiên bản Linux yêu cầu tự động hóa để giảm bớt gánh nặng quản trị. Cần quản lý các máy chủ MinIO dưới dạng dịch vụ khởi tạo bằng SystemD vì nó giúp tự động hóa vòng đời của dịch vụ, đặc biệt là trong quá trình khởi động, tắt máy và khởi động lại.


SystemD là trình quản lý dịch vụ duy trì các dịch vụ trong hệ thống Linux trong quá trình khởi động, tắt máy, khởi tạo, v.v. Hãy nghĩ về nó như sự kế thừa của các tập lệnh init mà bạn phải viết toàn bộ từ đầu, nhưng với SystemD, bạn chỉ cần điền vào một vài tham số và các lệnh cũng như ghi nhật ký được chuẩn hóa.


Một trong những thách thức khi sử dụng quản lý dịch vụ init.d cũ hơn là bạn phải viết toàn bộ tệp từ đầu. Mỗi tệp init.d là duy nhất và có cách quản lý vòng đời của dịch vụ khác nhau. SystemD lấy các bài học kinh nghiệm từ init.d và chuẩn hóa chúng. Chẳng hạn, các tệp dịch vụ SystemD sẽ hoạt động với bất kỳ dịch vụ nào miễn là nó được viết để chạy – chỉ có đường dẫn, tên và ngữ nghĩa là khác nhau – nhưng cấu trúc cơ bản, cách khởi động lại dịch vụ, đọc nhật ký, gỡ cài đặt hệ thống tệp một cách duyên dáng, chờ đợi để các kết nối mạng xuất hiện, trong số những thứ khác, hiện đã phổ biến trong tất cả các dịch vụ, vì vậy, bất kể bạn chạy dịch vụ nào, bạn đều biết chính xác nơi tìm nhật ký của nó.


SystemD không chỉ linh hoạt giữa các dịch vụ khác nhau mà bạn còn có thể lấy cùng một tệp dịch vụ SystemD và sử dụng nó trên nhiều hệ điều hành, miễn là hệ điều hành đó cũng đang sử dụng SystemD để quản lý vòng đời của các dịch vụ của nó. Điều này đơn giản hóa quá trình tự động hóa vì bạn có thể làm việc trên Ubuntu trong khi tạo tệp ban đầu, nhưng sau đó cùng một tệp có thể được triển khai cho hệ điều hành CentOS/RedHat miễn là đường dẫn và những thứ khác vẫn giữ nguyên, điều này trong hầu hết các trường hợp đều giống nhau.


Có một số thành phần chính của SystemD nhưng một số thành phần mà bạn sẽ gặp thường xuyên hơn là:


  • systemctl : Đây là những gì được sử dụng để kiểm soát các quy trình, chủ yếu là dừng, bắt đầu và khởi động lại. Các lệnh phổ biến nhất được sử dụng là:
    • systemctl start <service>

    • systemctl stop <service>

    • systemctl restart <service>


  • journalctl: Nhật ký cho các dịch vụ khi chúng thực hiện các hoạt động khởi động, tắt và khởi động lại. Đó là một cách hay để hiểu rõ hơn nếu có điều gì đó không hoạt động bình thường. Lệnh phổ biến nhất mà tôi sử dụng, hiển thị các nhật ký đủ để lấp đầy cửa sổ đầu cuối của bạn và cuộn đến cuối cùng:
    • journalctl -e -u <service>


Để chạy hầu hết các lệnh trong hướng dẫn này, bạn cần có `sudo` hoặc quyền truy cập root vì các tệp cấu hình SystemD cần được cấp quyền với quyền root.


Bạn cũng có thể tìm thấy các hướng dẫn bổ sung cho MinIO và SystemD trong kho lưu trữ của chúng tôi.

nhị phân tối thiểu

  • Tìm nạp nhị phân MinIO từ thượng nguồn


 # wget https://dl.min.io/server/minio/release/linux-amd64/minio --2022-07-24 11:31:33-- https://dl.min.io/server/minio/release/linux-amd64/minio Resolving dl.min.io (dl.min.io)... 132.68.11.115, 138.118.66.212 Connecting to dl.min.io (dl.min.io)|132.68.11.115|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 96649216 (92M) [application/octet-stream] Saving to: 'minio' minio 100%[==========================================>] 92.17M 50.2MB/s in 1.8s 2022-07-24 11:31:35 (50.2 MB/s) - 'minio' saved [96649216/96649216]


  • Làm cho nó có thể thực thi được để SystemD có thể chạy MinIO như một dịch vụ
 # chmod +x minio


  • Di chuyển nó đến một vị trí có thể thực thi được trong $PATH # mv minio /usr/local/bin/

Tệp dịch vụ

MinIO có thể được cài đặt theo một số cách khác nhau trên Linux dựa trên hệ điều hành. RedHat/CentOS và các dẫn xuất của nó dựa trên gói .rpm và Debian/Ubuntu sử dụng gói .deb. Trong cả hai trường hợp, tệp dịch vụ SystemD sau được bao gồm trong gói cài đặt.


Tuy nhiên, chúng tôi đã tìm nạp tệp nhị phân MinIO từ thượng nguồn theo cách thủ công, vì vậy chúng tôi sẽ tạo tệp dịch vụ SystemD theo cách thủ công.


  • Sử dụng trình soạn thảo văn bản yêu thích của bạn để tạo tệp SystemD tại /etc/systemd/system/minio.service với các nội dung sau.


 [Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local User=minio-user Group=minio-user ProtectProc=invisible EnvironmentFile=-/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES # Let systemd restart this service always Restart=always # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of threads this process can create TasksMax=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target # Built for ${project.name}-${project.version} (${project.name})


  • Group=minio-user : Nhóm hệ thống Linux mà Minio daemon sẽ chạy. Tạo nó bằng lệnh sau:


    • groupadd -r minio-user


  • User=minio-user : Người dùng hệ thống Linux mà daemon MinIO sẽ chạy dưới tên đó. Tạo người dùng bằng lệnh sau:


    • useradd -M -r -g minio-user minio-user
      • -M : Điều này ngăn việc tạo thư mục chính cho người dùng vì đây là một dịch vụ.
      • -r : Người dùng hệ thống có phạm vi UID/GID riêng cho mục đích theo dõi, cờ này sẽ tạo người dùng từ phạm vi được xác định trước.
      • -g <group_name> : Nhóm để thêm người dùng vào.


tối thiểu

Thiết lập phân tán

Có một số điều kiện tiên quyết cần thiết để thiết lập trên nút kim loại trần trước khi có thể bắt đầu dịch vụ MinIO.


  • Tạo một ổ đĩa mới và đảm bảo rằng nó không nằm trên cùng một phân vùng với ổ đĩa gốc, để tránh thông báo sau:
    • Error: Disk /mnt/disk1/minio is part of root disk, will not be used


  • Tạo 4 thư mục trên máy chủ lưu trữ cục bộ của bạn, nơi đĩa mới vừa được gắn vào, trong trường hợp này /mnt/data :


 mkdir -p /mnt/data/disk1 \ mkdir -p /mnt/data/disk2 \ mkdir -p /mnt/data/disk3 \ mkdir -p /mnt/data/disk4


  • chown các thư mục với người dùng và nhóm MinIO
    • chown minio-user:minio-user /mnt/data/disk1 /mnt/data/disk2 /mnt/data/disk3 /mnt/data/disk4

Tệp dịch vụ môi trường

  • Cập nhật tệp này /etc/default/minio với nội dung sau


 # Set the hosts and volumes MinIO uses at startup # The command uses MinIO expansion notation {x...y} to denote a # sequential series. # # The following example covers four MinIO hosts # with 4 drives each at the specified hostname and drive locations. # The command includes the port that each MinIO server listens on # (default 9000) MINIO_VOLUMES="https://minio1.example.com:9000/mnt/data/disk{1...4}/minio" # Set all MinIO server options # # The following explicitly sets the MinIO Console listen address to # port 9001 on all network interfaces. The default behavior is dynamic # port selection. MINIO_OPTS="--console-address :9001" # Set the root username. This user has unrestricted permissions to # perform S3 and administrative API operations on any resource in the # deployment. # # Defer to your organizations requirements for superadmin user name. MINIO_ROOT_USER=minioadmin # Set the root password # # Use a long, random, unique string that meets your organizations # requirements for passwords. MINIO_ROOT_PASSWORD=minioadmin # Set to the URL of the load balancer for the MinIO deployment # This value *must* match across all MinIO servers. If you do # not have a load balancer, set this value to to any *one* of the # MinIO hosts in the deployment as a temporary measure. MINIO_SERVER_URL="https://minio.example.net:9000"

Bắt đầu quy trình MinIO

  • Chúng tôi có tất cả các phần chúng tôi cần để kích hoạt và bắt đầu dịch vụ
 # systemctl enable minio.service # systemctl start minio.service


  • Kiểm tra trạng thái của dịch vụ và nhật ký
 # systemctl status minio.service # journalctl -e -u minio.service


  • Xác minh rằng dịch vụ MinIO đã xuất hiện. Trong nhật ký, bạn sẽ thấy nội dung tương tự như sau:


 Aug 01 13:27:06 aj-test-3 systemd[1]: Starting MinIO... Aug 01 13:27:06 aj-test-3 systemd[1]: Started MinIO. Aug 01 13:27:07 aj-test-3 minio[3241]: Formatting 1st pool, 1 set(s), 4 drives per set. Aug 01 13:27:07 aj-test-3 minio[3241]: WARNING: Host minio1.example.com:9000 has more than 2 drives of set. A host fai> Aug 01 13:27:07 aj-test-3 minio[3241]: You are running an older version of MinIO released 4 days ago Aug 01 13:27:07 aj-test-3 minio[3241]: Update: Run `mc admin update` Aug 01 13:27:07 aj-test-3 minio[3241]: MinIO Object Storage Server Aug 01 13:27:07 aj-test-3 minio[3241]: Copyright: 2015-2022 MinIO, Inc. Aug 01 13:27:07 aj-test-3 minio[3241]: License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html> Aug 01 13:27:07 aj-test-3 minio[3241]: Version: RELEASE.2022-07-26T00-53-03Z (go1.18.4 linux/amd64) Aug 01 13:27:07 aj-test-3 minio[3241]: Status: 4 Online, 0 Offline. Aug 01 13:27:07 aj-test-3 minio[3241]: API: https://minio.example.net:9000 Aug 01 13:27:07 aj-test-3 minio[3241]: Console: http://10.128.0.4:9001 http://127.0.0.1:9001 Aug 01 13:27:07 aj-test-3 minio[3241]: Documentation: https://docs.min.io

Đăng nhập vào Bảng điều khiển

Sử dụng trình duyệt, đăng nhập vào bảng điều khiển MinIO bằng MINIO_ROOT_USERMINIO_ROOT_PASSWORD từ cấu hình mà chúng tôi đã thực hiện trước đó.


 http://<server_host_ip>:9001/ 



Lưu ý thiết lập ở trên là để bạn nhanh chóng bắt đầu và chạy với MinIO. Bạn có thể mở rộng từ một nút đơn sang cấu hình phân tán nhiều nút để thử nghiệm bổ sung. Nếu bạn muốn triển khai và định cấu hình MinIO trong môi trường sản xuất, vui lòng tham khảo tài liệu .

SystemD đơn giản hóa việc triển khai MinIO Virtual và Bare Metal

Tích hợp với SystemD rất linh hoạt.


  • Cú pháp của tệp dịch vụ giống nhau trên tất cả các dịch vụ

  • Cùng một tệp dịch vụ sẽ hoạt động trên mọi HĐH hỗ trợ SystemD

  • Bạn có thể sử dụng SystemD với kim loại trần hoặc trên máy ảo trong bất kỳ đám mây nào, chẳng hạn như AWS, GCP và Azure.

  • Điều này có thể giúp tự động hóa cho DevOps bằng cách chuẩn hóa định dạng và làm cho việc triển khai tự động hóa trở nên đơn giản.


Quá trình tự động hóa giúp duy trì tính khả dụng khi chạy một dịch vụ quan trọng như lưu trữ đối tượng. Tự động hóa là một yêu cầu để vận hành ở quy mô lớn trên nhiều đám mây và môi trường. Với sự trợ giúp của SystemD và MinIO, bạn có thể tự động hóa việc triển khai lưu trữ đối tượng đám mây của mình và đảm bảo vòng đời dịch vụ được quản lý suôn sẻ và thành công.


Có câu hỏi nào không? Bạn muốn bắt đầu? Liên hệ với chúng tôi trên Slack .


Cũng được xuất bản ở đây .