信创环境下分布式文件存储MinIO集群部署

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 1年
简介: 信创环境下分布式文件存储MinIO集群部署

VJ{KHCYFG})C$DP8U0M(Z}4.png


持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情


背景


本次项目涉及20+台服务器的部署,技术包括 Nacos 注册中心集群、 GateWay 网关服务集群、 达梦8 关系型数据库服务集群、 MinIO 分布式文件存储服务集群、 Redis 缓存服务集群、 WebSocket 服务端消息推送集群、 Quartz 定时任务服务集群、 Nginx+KeepAlived 反向代理高可用集群、监控服务集群等。这里主要记录下分布式文件存储服务集群以及缓存服务集群的搭建过程。

云服务资源


  • 172.27.204.115
  • 172.27.204.101
  • 172.27.204.110
  • 172.27.204.151

系统信息



# 查看系统内核信息
[root@sx-std-oss-220420-0001 opt]# uname -a
Linux sx-std-oss-220420-0001.novalocal 4.19.90-17.ky10.aarch64 #1 SMP Sun Jun 28 14:27:40 CST 2020 aarch64 aarch64 aarch64 GNU/Linux
# 查看系统版本信息
[root@sx-std-oss-220420-0001 opt]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"

Note:以下所有操作分别在4台主机上操作,文件传输: scp minio root@172.27.204.151:/opt/


挂载


在4台主机上创建目录并挂载。


mkdir -p /data/minio
mount /dev/vda1 /data/minio
编写启动脚本


  • 新建脚本


cd /opt
vi start-minio.sh
#!/bin/bash
export MINIO_ACCESS_KEY=Hello
export MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE
/opt/minio server \
http://172.27.204.115/data/minio http://172.27.204.101/data/minio \
http://172.27.204.110/data/minio http://172.27.204.151/data/minio

• 赋予执行权限

chmod +x start-minio.sh
chmod +x minio

编写服务脚本


  • 新建脚本


vi /lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/opt/
ExecStart=/opt/start-minio.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy
  • 验证系统服务


systemctl list-unit-files | grep minio
systemctl enable minio
systemctl list-unit-files | grep minio
systemctl status minio
systemctl start minio

关闭防火墙


由于四台主机之间需要进行通信,这里直接关掉了防火墙。


systemctl status firewalld
systemctl stop firewalld

配置桶权限


可以直接登录 MinIO 提供的控制台进行可视化的配置,不过由于我们在信创环境下没有申请开放对应端口,所有通过 mc 命令行客户端进行配置。

这里记录一个实际中因开放了匿名下载文件权限之后,可以遍历所有对象存储目录的问题的解决方法。

  • 可下载

1U$1D$MS~S31]0WHHDO6UZT.png

  • 可遍历整个桶

}BB38@X%WSAFRURD`)HBFB4.png

  • MinIO权限

MinIO 的权限其实就是关于文件、桶的 CRUD 的配置,基于AWS的对象存储规则,配置文件为 JSON 格式。


# 开放匿名下载权限
[root@sx-std-oss-220420-0001 opt]# mc policy set download name-it/local
# 查看下默认的下载权限的JSON文件
[root@sx-std-oss-220420-0001 minio_policy]# mc policy get-json name-it/local
{
 "Statement": [
  {
   "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::local"
   ]
  },
  {
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::local/*"
   ]
  }
 ],
 "Version": "2012-10-17"
}

可以看到,默认的 download 可以列出桶里的文件列表: GetBucketLocation ,我们把这个权限去掉。

新建一个 custom-local.json ,写入以下内容(与默认生成的配置相比,仅去掉了 GetBucketLocation )。


{
 "Statement": [
  {
   "Action": [
    "s3:GetBucketLocation"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::local"
   ]
  },
  {
   "Action": [
    "s3:GetObject"
   ],
   "Effect": "Allow",
   "Principal": {
    "AWS": [
     "*"
    ]
   },
   "Resource": [
    "arn:aws:s3:::local/*"
   ]
  }
 ],
 "Version": "2012-10-17"
}

使用我们自定义的权限 JSON 文件。


[root@sx-std-oss-220420-0001 minio_policy]# mc policy set-json custom-local.json name-it/local
• 可下载,但不可遍历桶下的文件目录

LHNV_[ILWFZSSUH0Q%[9{~C.png


mc常用命令


mc 命令行客户端的使用可参考官方文档,这里附上之前华为云上操作 MinIOmc 客户端常用的命令。


mc常用命令清单


[root@ecs-c8ee-0011  ~]# cd /opt/minio 
[root@ecs-c8ee-0011  minio]# wget https://dl.min.io/client/mc/release/linux-amd64/mc
[root@ecs-c8ee-0011  minio]# mv ./mc /usr/local/bin/ 
[root@ecs-c8ee-0011  minio]# mc config host ls 
-bash: /usr/local/bin/mc: 权限不够
[root@ecs-c8ee-0011  minio]# cd /usr/local/bin 
[root@ecs-c8ee-0011  bin]# chmod +x mc 
# 查看服务列表
mc config host ls
# 新增服务
mc config host add name-it http://localhost:9000 HelloWorld wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE
Added name-it successfully.
# 密码要求至少八位。
mc config host add name-it http://localhost:9000 HelloWorld
# 删除服务
mc config host remove name-it
# 查看服务信息
mc admin info name-it
# 查看服务下的桶以及桶下的文件
mc ls name-it
mc ls name-it/bucketname
# 下载文件
mc cp name-it/bucketname/filename /tmp
# 删除文件
mc rm name-it/bucketname/filename
# 上传文件
mc cp test.txt name-it/bucketname
mc ls name-it/bucketname
# 创建桶
mc mb name-it/new-bucketname
mc ls name-it
# 删除桶
mc rb name-it/new-bucketname
mc ls name-it
# 强制删除(当桶中有文件,而且想删除)
mc rb --force name-it/new-bucketname
mc ls name-it
# 查看服务下桶的容量
mc du name-it
mc du name-it/bucketname
# 添加用户
mc admin user add name-it user1
mc admin user add name-it user2 12345678
# 列出用户
mc admin user list name-it
# 禁用用户
mc admin user disable name-it user2
mc admin user list name-it
# 启用用户
mc admin user enable name-it user2
mc admin user list name-it
mc admin user info name-it user2
# 删除用户
mc admin user remove name-it user2
# 策略管理
mc admin policy list name-it
mc admin policy info name-it readonly
mc admin policy info name-it writeonly
mc admin policy info name-it readwrite
# 写策略配置文件
# 应用文件
mc admin policy add name-it bucket2-admin-role your-config.json
mc admin policy list name-it
mc admin user info name-it user2
# 关联策略到用户
mc admin policy set name-it bucket2-admin-role user=user2
mc admin user info name-it user2
# 通过Web Console验证user2的权限
# 解绑权限
mc admin policy unset name-it bucket2-admin-role user=user2
mc admin user info name-it user2

帮助


关于 mc 客户端的使用,当遇到不会用的命令时,可通过 --help 参数,查看帮助文档。


Reference

docs.min.io/minio/barem…


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
173 5
|
4月前
|
监控 Linux 应用服务中间件
Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践
通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考MinIO 官方文档。作者联系方式vx:2743642415。
1031 57
|
6月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
418 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
6月前
|
存储 Java 文件存储
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
本文介绍了如何基于Spring Boot 3和MinIO实现分布式文件存储。随着应用规模扩大,传统的单机文件存储方案难以应对大规模数据和高并发访问,分布式文件存储系统成为更好的选择。文章详细讲解了MinIO的安装、配置及与Spring Boot的整合步骤,包括Docker部署、MinIO控制台操作、Spring Boot项目中的依赖引入、配置类编写及工具类封装等内容。最后通过一个上传头像的接口示例展示了具体的开发和测试过程,强调了将API操作封装成通用工具类以提高代码复用性和可维护性的重要性。
1057 7
🗄️Spring Boot 3 整合 MinIO 实现分布式文件存储
|
8月前
|
SQL 分布式计算 数据处理
云产品评测|分布式Python计算服务MaxFrame | 在本地环境中使用MaxFrame + 基于MaxFrame实现大语言模型数据处理
本文基于官方文档,介绍了由浅入深的两个部分实操测试,包括在本地环境中使用MaxFrame & 基于MaxFrame实现大语言模型数据处理,对步骤有详细说明。体验下来对MaxCompute的感受是很不错的,值得尝试并使用!
178 1
|
11月前
|
存储 开发框架 .NET
C#语言如何搭建分布式文件存储系统
C#语言如何搭建分布式文件存储系统
246 2
|
11月前
|
SQL NoSQL MongoDB
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
一款基于分布式文件存储的数据库MongoDB的介绍及基本使用教程
272 0
|
11月前
|
SQL NoSQL 安全
分布式环境的分布式锁 - Redlock方案
【10月更文挑战第2天】Redlock方案是一种分布式锁实现,通过在多个独立的Redis实例上加锁来提高容错性和可靠性。客户端需从大多数节点成功加锁且总耗时小于锁的过期时间,才能视为加锁成功。然而,该方案受到分布式专家Martin的质疑,指出其在特定异常情况下(如网络延迟、进程暂停、时钟偏移)可能导致锁失效,影响系统的正确性。Martin建议采用fencing token方案,以确保分布式锁的正确性和安全性。
155 0
|
11月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
145 0
|
11月前
|
存储 分布式计算 监控
C# 创建一个分布式文件存储系统需要怎么设计??
C# 创建一个分布式文件存储系统需要怎么设计??
142 0