openEuler 24.03 全流程實戰:用 Ansible 5 分鐘部署分布式 MinIO 高可用集群

?

目錄

0 | 為什么要寫這篇教程?

1 | 準備工作

1.1 控制節點手工下載 MinIO

1.2 SSH 互信(可跳過,本教程已有互信)

1.3 安裝 Ansible & SELinux 依賴

2 | 項目目錄

3 | Inventory hosts.ini

4 | 變量文件 group_vars/all.yml(整體加密)

5 | 角色文件

5.1 roles/minio/tasks/main.yml

5.2 install.yml —— 上傳二進制 + 創建用戶

5.3 configure.yml —— 創建目錄 + 生成 endpoint 列表 + unit 文件

5.4 start.yml

5.5 handlers/main.yml

5.6 templates/minio.service.j2

6 | 主 Playbook deploy_minio.yml

7 | 執行部署

8 | 驗證集群狀態

9 | 常見踩坑與解決

10 | 總結


版本與環境

  • OS:openEuler 24.03 (LTS)

  • Ansible:≥ 2.11(dnf install -y ansible

  • MinIORELEASE.2025-06-13T11-33-47Z

  • 主控節點10.130.135.145(也運行 Ansible)

  • 存儲節點10.130.135.{164,149,200,199}

  • 數據目錄/app/minio_data/disk1…4

  • 端口:9000(API)/9001(Console)


0 | 為什么要寫這篇教程?

在 openEuler-24.03 上用 Ansible 部署 MinIO 分布式,踩過不少坑:

報錯/現象根因
VARIABLE IS NOT DEFINED!Vault 文件未被加載 / 變量自引用
loop.parent attribute errorJinja2 嵌套循環解析不穩定
requested handler 'restart minio' was not found忘了在 handlers 里聲明
SELinux 綁定缺失openEuler 默認開啟 SELinux,需安裝 python3-libselinux
curl 下載慢改為一次上傳二進制 → copy 分發

下面給出一次能跑通的最終方案,并總結每個坑的解決思路。


1 | 準備工作

1.1 控制節點手工下載 MinIO

mkdir -p /opt/minio-bin
cd /opt/minio-bin
curl -LO https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2025-06-13T11-33-47Z
mv minio.RELEASE.* minio
chmod +x minio

這樣只有控制機訪問公網,其余節點通過 Ansible 的 copy 分發即可。

1.2 SSH 互信(可跳過,本教程已有互信)

ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
for h in 164 149 200 199; do ssh-copy-id root@10.130.135.$h; done

1.3 安裝 Ansible & SELinux 依賴

dnf install -y ansible python3-libselinux

2 | 項目目錄

minio-ansible/
├── hosts.ini
├── deploy_minio.yml
├── group_vars/
│   └── all.yml          # 已加密
└── roles/└── minio/├── tasks/│   ├── main.yml│   ├── install.yml│   ├── configure.yml│   └── start.yml├── handlers/│   └── main.yml└── templates/└── minio.service.j2

3 | Inventory hosts.ini

[minio]
10.130.135.164
10.130.135.149
10.130.135.200
10.130.135.199

4 | 變量文件 group_vars/all.yml(整體加密)

????????

為啥放 all.yml 而不是 vault.yml?

  • group_vars/all.yml 是 Ansible 的 自動加載路徑,不會漏讀。

  • 整個文件加密,省去在 playbook 里 vars_files 的聲明和加載順序問題。


5 | 角色文件

5.1 roles/minio/tasks/main.yml

- import_tasks: install.yml
- import_tasks: configure.yml
- import_tasks: start.yml

5.2 install.yml —— 上傳二進制 + 創建用戶

- name: Create group & userbecome: truegroup: { name: "{{ minio_group }}" }
- user:name: "{{ minio_user }}"group: "{{ minio_group }}"shell: /sbin/nologincreate_home: nobecome: true- name: Copy MinIO binary from control nodecopy:src: "{{ minio_local_bin }}"dest: "{{ minio_bin_path }}"owner: rootgroup: rootmode: '0755'become: true

5.3 configure.yml —— 創建目錄 + 生成 endpoint 列表 + unit 文件

- name: Create data dirsfile:path: "{{ item }}"state: directoryowner: "{{ minio_user }}"group: "{{ minio_group }}"mode: '0755'loop: "{{ minio_data_dirs }}"become: true# 單行 set_fact,避開 loop.parent 的坑
- name: Build endpoint listset_fact:minio_endpoints: "{{ minio_cluster_nodes| product(minio_data_dirs)| map('join','')| map('regex_replace','^(.*)$','http://\\1')| list }}"- name: Deploy systemd unittemplate:src: minio.service.j2dest: /etc/systemd/system/minio.servicenotify: restart miniobecome: true

5.4 start.yml

- systemd:daemon_reload: truebecome: true- systemd:name: miniostate: startedenabled: truebecome: true

5.5 handlers/main.yml

- name: restart miniobecome: truesystemd:name: miniostate: restarteddaemon_reload: true

5.6 templates/minio.service.j2

[Unit]
Description=MinIO Distributed Object Storage
After=network.target[Service]
User={{ minio_user }}
Group={{ minio_group }}
Environment="MINIO_ROOT_USER={{ minio_root_user }}"
Environment="MINIO_ROOT_PASSWORD={{ minio_root_password }}"ExecStart={{ minio_bin_path }} server {{ minio_endpoints | join(' ') }} \--address ":{{ minio_port }}" --console-address ":{{ minio_console_port }}"Restart=always
LimitNOFILE=65536[Install]
WantedBy=multi-user.target

6 | 主 Playbook deploy_minio.yml

---
- hosts: miniobecome: trueroles:- minio

7 | 執行部署

# 首次或每次升級
ansible-playbook -i hosts.ini deploy_minio.yml --ask-vault-pass

如果一切正常,你會看到所有節點 ok= 綠色,failed=0


8 | 驗證集群狀態

# 查看 systemd
ansible -i hosts.ini minio -b -a "systemctl status minio --no-pager"# 查看端口
ansible -i hosts.ini minio -a "ss -ltnp | grep :9000" -b
ansible -i hosts.ini minio -a "ss -ltnp | grep :9001" -b# 瀏覽器訪問 http://10.130.135.164:9001 用 root 賬號登錄

9 | 常見踩坑與解決

報錯解決
VARIABLE IS NOT DEFINED確保敏感變量放在 group_vars/all.yml 并加密;或在 playbook 中顯式 vars_files
loop.parent attribute error不要在模板用 loop.parent;改為先 set_fact 生成列表。
requested handler 'restart minio' was not foundroles/minio/handlers/main.yml 聲明同名 handler。
SELinux 報缺 libselinux-pythonopenEuler 24.03 默認裝 python3-libselinux,若無則 dnf install -y python3-libselinux
下載慢手工下載到控制機,copy 分發。

10 | 總結

  • openEuler 24.03 自帶 dnf / systemd,與 RHEL8 類似;

  • Ansible 默認只加載 group_vars/all.yml<group>.yml,Vault 文件最好直接放這里;

  • Jinja2 里避免 loop.parent,用 set_fact 先生成結果再模板化;

  • 上傳二進制 + copy 分發是離線環境、內網環境最穩妥方案。

按本文步驟,你可以在 5 分鐘內把一套 4 節點 × 4 盤 的 MinIO 分布式集群跑在 openEuler 24.03 上,并且 playbook 可重復執行、冪等升級。Happy Object Storage on openEuler!

完整可用文件下載:?https://download.csdn.net/download/gs80140/91262220

與教程不同的是, 下載的文件使用了vault加密服務, 可以參考下載文件說明使用

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87573.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最左匹配原則

導讀&#xff1a; 首先創建一張 test 表&#xff0c;并插入一些數據&#xff1a; CREATE TABLE test ( id int(11) NOT NULL AUTO_INCREMENT COMMENT 主鍵, a int(11) NOT NULL, b int(11) NOT NULL, c int(11) NOT NULL, d int(11) NOT NULL, PRIMARY KEY (id), KEY idx_abc …

MySQL 8.0 OCP 1Z0-908 題目解析(17)

題目65 Choose two. Which two are characteristics of snapshot-based backups? □ A) The frozen file system can be cloned to another virtual machine immediately into active service. □ B) There is no need for InnoDB tables to perform its own recovery when re…

Level2_12小球與擋板(移動+反彈)

一、前引 #已經學習完了: #1.數據結構&#xff1a;集合、元組、字典 #2.函數 #3.類和對象 #4.繼承與多態 #1.規劃編程項目: #&#xff08;1&#xff09;你想做什么什么樣功能的項目&#xff1f; # 接小球游戲,碰到擋板時自動反彈 #&#xff08;2&#xff09;功能有哪些&#x…

win11 2025開機禁用微軟賬號登錄,改本地用戶登錄,品牌預裝機福音

今天開箱了品牌商出廠系統一臺華為筆記本&#xff0c;開機提示連接wifi并需要登錄微軟賬號&#xff0c;其中過程實在緩慢&#xff0c;而且老是提示自動更新&#xff0c;速度太慢了&#xff0c;等的花都謝了&#xff0c;進到桌面大概得要30-40分鐘&#xff0c;還不如本地用戶登錄…

【嵌入式ARM匯編基礎】-ELF文件格式內部結構詳解(三)

ELF文件格式內部結構詳解(三) 文章目錄 ELF文件格式內部結構詳解(三)12、動態部分和動態加載13、依賴加載(需要)14、程序重定位14.1 靜態重定位14.2 動態重定位14.3 全局偏移表 (GOT)14.4 過程鏈接表 (PLT)12、動態部分和動態加載 ELF 文件格式中的 .dynamic 部分用于指…

HTML知識復習2

文章目錄 HTML5簡介什么是HTML5HTML5優勢 新增語義化標簽新增布局標簽新增狀態標簽新增列表標簽新增文本標簽 新增表單功能表單控件新增屬性input新增屬性值 新增多媒體標簽視頻標簽音頻標簽 HTML5兼容性處理 HTML5簡介 什么是HTML5 HTML5 是新一代的 HTML 標準&#xff0c;2…

棧(Stack)和隊列(Queue)

文章目錄 前言1. 棧(Stack)1.1 什么是棧1.2 棧的常用操作1.3 棧的模擬實現1.4 棧的應用場景1.4.1 元素序列處理1.4.2 字符串反轉1.4.3 括號匹配1.4.4 逆波蘭表達式求值1.4.5 棧的壓入、彈出序列1.4.6 最小棧1.4.7 遞歸轉循環 1.5 概念區分1.5.1 數據結構中的棧1.5.2 JVM中的虛擬…

5G MEC四大核心挑戰技術解析報告

一、MEC園區部署挑戰:數據本地化與低時延接入 痛點深度解析 數據不出園區:工業質檢、醫療影像等敏感業務需數據在本地閉環處理。但運營商基站與企業MEC間若經公網繞行,時延超50ms且存在泄露風險。L2網絡局限:傳統L2接入網無法實現基站→UPF的智能路由,導致業務流繞行城域…

【硬核拆解】英偉達Blackwell芯片架構如何重構AI算力邊界?

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 一、Blackwell誕生的算力危機&#xff08;2025現狀&#xff09; graph TD A[2025年AI算力需求] --> B[千億參數模型訓練能耗…

【深度學習模塊】圖像的相對位置編碼

這個是一個常用的模塊&#xff0c;就是我們可以對輸入的特征嵌入位置編碼。 位置編碼&#xff08;Positional Encoding&#xff09;是一種將空間位置信息嵌入到特征中的方法&#xff0c;通常用于幫助模型更好地理解特征的空間關系。 這里介紹的這個是相對位置編碼&#xff0c;…

osg加入實時光照SilverLining 天空和3D 云

OSG系列文章目錄 文章目錄 OSG系列文章目錄一、前言官網的介紹&#xff1a; 二、編譯官網例子 一、前言 osg本身也可以加入動態云&#xff0c;但是效果有點差強人意&#xff0c;這里我們使用sundog公司的動態云&#xff1a;SilverLining 天空和 3D 云。 官網的介紹&#xff1…

spring-ai-alibaba 1.0.0.2 學習(十二)——聊天記憶擴展包

學習spring-ai時提到過&#xff0c;spring-ai除了內置的InMemoryChatMemoryRepository&#xff0c;還提供jdbc、cassandra、neo4j三個擴展包。 而spring-ai-alibaba則提供了jdbc、redis、elasticsearch三個擴展包。 兩者都提供了jdbc擴展包&#xff0c;有什么區別呢&#xff…

c語言-指針(數組)練習2

題目&#xff1a;將數組中n個元素按逆序存放并打印出來&#xff0c;使用函數封裝與指針 思路&#xff1a; 1.定義一個數組arr[5]和用于存放數組大小&#xff08;數組大小通過sizeof關鍵字來進行計算&#xff09;的變量len&#xff1b; 2.創建三個函數initArr、printArr、rev…

Redis服務器

Redis&#xff0c;一款Key-Value型內存數據庫 常用于網站開發場景 Redis服務器只發布了Linux版本 Redis服務器安裝&#xff0c;2種辦法 自動安裝 apt install redis-server手動編譯安裝 從官網下載源碼&#xff0c;編譯&#xff0c;部署 1 安裝redis apt install redis-s…

LeetCode 第91題:解碼方法

題目描述&#xff1a; 一條包含字母A-Z的消息通過以下映射進行了編碼 1-A ...... 26-Z 要特別注意&#xff0c;11106可以映射為AAJF或KJF 06不是一個合法編碼 給你一個只含數字的非空字符串s&#xff0c;請計算并返回解碼方法的總數。如果沒有合法的方法解碼整個字符串&#xf…

Rocky Linux 9 源碼包安裝Mysql8

Rocky Linux 9 源碼包安裝Mysql8 大家好我是星哥&#xff0c;之前介紹了&#xff0c;Rocky Linux 9 源碼包安裝Mysql5.7。 本文將介紹如何在Rocky Linux 9操作系統上&#xff0c;從源碼一步步安裝MySQL 8&#xff0c;為您提供一個穩定、高效且可控的數據庫解決方案。 為什么…

AI小智項目全解析:軟硬件架構與開發環境配置

AI小智項目全解析&#xff1a;軟硬件架構與開發環境配置 一、項目整體架構 AI小智是一款基于ESP32的智能物聯網設備&#xff0c;集成了語音交互、邊緣計算等功能。整體系統架構如下&#xff1a; 終端設備&#xff1a;ESP32模組作為核心通信方式&#xff1a; WebSocket實現實…

設計模式之上下文對象設計模式

目錄 一、模式介紹 二、架構設計 三、Demo 示例 四、總結 一、模式介紹 上下文對象&#xff08;Context Object&#xff09;模式 最早由《Core J2EE Patterns》第二版提出&#xff0c;其核心目標是在多層或多組件間共享與當前作用域&#xff08;如一次請求、一次會話、一次…

@Linux服務器加域退域

文章目錄 **一、加入Active Directory域****1. 準備工作****2. 配置步驟****步驟1&#xff1a;驗證網絡和DNS****步驟2&#xff1a;發現域****步驟3&#xff1a;加入域****步驟4&#xff1a;配置SSSD&#xff08;可選&#xff09;****步驟5&#xff1a;配置sudo權限&#xff08…

鴻蒙系統(HarmonyOS)4.2 設備上實現無線安裝 APK 并調試

在鴻蒙系統&#xff08;HarmonyOS&#xff09;4.2 設備上實現無線安裝 APK 并調試的步驟與 Android 類似&#xff0c;但需注意鴻蒙系統的特殊設置。以下是詳細操作指南&#xff1a; 鴻蒙系統特殊準備 開啟開發者選項&#xff1a; - 設置 > 關于手機 > 連續點擊"H…