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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…