I. 部署 MinIO
1.1 单节点部署
1.1.1 先决条件
1、存储及内存要求
ℹ️ 参考:官方文档 。
2、配置防火墙
允许流量进入访问 MinIO 服务器和 MinIO 控制台的端口:
- 9000 是 MinIO 服务器监听的默认端口。
- 9001 是访问 MinIO 控制台的推荐端口。
使用以下命令打开所需的防火墙端口(==若使用 Nginx 代理则不需要此项==):
1sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
2sudo firewall-cmd --zone=public --add-port=9001/tcp --permanent
启用 HTTP 和 HTTPS 访问:
1sudo firewall-cmd --zone=public --add-service=http --permanent
2sudo firewall-cmd --zone=public --add-service=https --permanent
重新加载防火墙以应用更改:
1sudo firewall-cmd --reload
1.1.2 部署单节点单硬盘 MinIO
⚠️ 警告:
网络文件系统卷破坏了一致性保证:
MinIO 严格的先读后写和先列后写一致性模型需要本地驱动器文件系统。
如果底层存储卷是 NFS 或类似的网络连接存储卷,MinIO 无法提供一致性保证。
1、下载社区版 MinIO Server 使用以下选项之一,为在英特尔或 AMD 64 位处理器上运行 Linux 的机器下载 MinIO 服务器安装文件。
amd64 (Intel or AMD 64-bit processors)
- RPM(RHEL)
1wget https://dl.min.io/server/minio/release/linux-amd64/minio-20xxxxxxxxx.0.0-1.x86_64.rpm
2sudo dnf install minio-20xxxxxxxxx.0.0-1.x86_64.rpm
📢 注意:
请将minio-20xxxxxxxxx.0.0-1.x86_64.rpm
替换为实际安装包名。
2、创建 systemd
服务.deb
或 .rpm
软件包会将以下 System (systemd.io)
服务文件安装到 /usr/lib/systemd/system/minio.service
,对于二进制安装,请在所有 MinIO 主机上手动创建此文件。
📌 过程说明:
systemd 在检查/usr/lib/systemd/...
路径之前会检查/etc/systemd/...
路径,并使用找到的第一个文件。为避免配置选项冲突或出现意外,请检查文件是否只存在于/usr/lib/systemd/system/minio.service
路径下。
有关文件路径搜索顺序的详细信息,请参阅 systemd.unit 手册。
minio.service
文件默认以 minio-user
用户和组的身份运行。 可以使用 groupadd
和 useradd
命令创建用户和组。 下面的示例创建了用户和组,并设置了访问 MinIO 使用的文件夹路径的权限。 这些命令通常需要 root (sudo
) 权限。
1sudo groupadd -r minio-user
2sudo useradd -M -r -g minio-user minio-user
3sudo mkdir -p /mnt/data/minio
4sudo chown minio-user:minio-user /mnt/data/minio
📌 参数说明:
-M
标志指示命令不为用户创建主目录。-r
标志会创建一个系统用户。-g
标志将用户分配到其主要组。指定的驱动器路径
/mnt/data/minio
仅作为示例参考。 请根据 MinIO 打算使用的驱动器路径进行更改。
3、创建环境变量文件
在 /etc/default/minio
下创建环境变量文件。 对于 Windows 主机,请指定类似于 C:\minio\config
的 Windows 风格路径。 MinIO Server 容器可以将此文件作为所有 环境变量
的来源。
1sudo vim /etc/default/minio
下面的示例提供了一个起始环境文件:
1# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.
2# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.
3# Omit to use the default values 'minioadmin:minioadmin'.
4# MinIO recommends setting non-default values as a best practice, regardless of environment
5
6MINIO_ROOT_USER=minioadmin
7MINIO_ROOT_PASSWORD=minioadmin
8
9# MINIO_VOLUMES sets the storage volume or path to use for the MinIO server.
10
11MINIO_VOLUMES="/mnt/data/minio"
12
13# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.
14# For example, `--console-address :9001` sets the MinIO Console listen port
15
16MINIO_OPTS="--console-address :9001"
17
18# Specify the Fully Qualified Domain Name (FQDN) the MinIO Console listens for incoming connections on.
19# If you want to host the MinIO Console exclusively from a reverse-proxy service, you must specify the hostname managed by that service.
20
21#MINIO_BROWSER_REDIRECT_URL="https://console.example.com/"
根据部署需要加入其他环境变量。
📢 注意:
MINIO_ROOT_USER
长度至少为 3 个字符;MINIO_ROOT_PASSWORD
长度至少为 8 个字符;
如有签名证书,可在参数MINIO_OPTS
中指定(Network Encryption (TLS) ),示例如下:MINIO_OPTS="--certs-dir /home/<user>/.minio/certs --console-address :9001"
4、启动 MinIO 服务
在本地主机上发出以下命令,将 MinIO SNSD 部署作为服务启动:
1sudo systemctl start minio
使用以下命令确认服务是否在线并正常运行:
1sudo systemctl status minio
2journalctl -f -u minio
MinIO 服务不会在主机重启时自动启动。 您必须使用 systemctl enable minio.service
作为主机启动的一部分来启动该进程。
1sudo systemctl enable minio
journalctl 的输出应类似于下面的内容:
1Status: 1 Online, 0 Offline.
2API: http://192.168.2.100:9000 http://127.0.0.1:9000
3RootUser: myminioadmin
4RootPass: minio-secret-key-change-me
5Console: http://192.168.2.100:9001 http://127.0.0.1:9001
6RootUser: myminioadmin
7RootPass: minio-secret-key-change-me
8
9Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html
10 $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me
11
12Documentation: https://min.io/docs/minio/linux/index.html
API
块列出了客户端可以访问 MinIO S3 API 的网络接口和端口。 Console
模块列出了客户端可以访问 MinIO Web 控制台的网络接口和端口。
5、连接 MinIO 服务
在首选浏览器(如 http://localhost:9001
)中输入MinIO 服务器 Console
区块中的任何主机名或 IP 地址,即可访问 MinIO 控制台。
使用容器指定的环境文件中配置的 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
登录。
II. 部署 Nginx
2.1 安装 Nginx
参考 👉 Nginx 安装
2.2 申请 SSL 证书
参考 👉 acme.sh 教程
2.3 配置 Nginx (官方文档 )
1、创建“Web 控制台”和 “API 服务”配置文件
1cd /etc/nginx/conf.d/
2touch minio.conf
2、创建日志文件并修改其属性
1cd /var/log/nginx
2touch api.access.log api.error.log web.access.log web.error.log
3、配置文件内容参考
1upstream minio_s3 {
2 least_conn;
3 server localhost:9000;
4}
5
6upstream minio_console {
7 least_conn;
8 server localhost:9001;
9}
10
11server {
12 listen 443 ssl;
13 listen [::]:443 ssl;
14 http2 on;
15
16 server_name api.example.com;
17
18 if ($host != 'api.example.com') {
19 return 444;
20 }
21
22 # Log configuration
23 access_log /var/log/nginx/api-access.log;
24 error_log /var/log/nginx/api-error.log warn;
25
26 # SSL configuration
27 ssl_certificate /etc/ssl/example-com/fullchain.cer;
28 ssl_certificate_key /etc/ssl/example-com/example.com.key;
29 ssl_session_cache shared:SSL:10m;
30 ssl_session_timeout 1440m;
31 ssl_session_tickets off;
32 ssl_protocols TLSv1.2 TLSv1.3;
33 ssl_prefer_server_ciphers on;
34 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA;
35
36 # Allow special characters in headers
37 ignore_invalid_headers off;
38
39 # Allow any size file to be uploaded.
40 # Set to a value such as 1000m; to restrict file size to a specific value
41 client_max_body_size 0;
42
43 # Disable buffering
44 proxy_buffering off;
45 proxy_request_buffering off;
46
47 location / {
48 proxy_set_header Host $http_host;
49 proxy_set_header X-Real-IP $remote_addr;
50 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
51 proxy_set_header X-Forwarded-Proto $scheme;
52
53 proxy_connect_timeout 300;
54
55 # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
56 proxy_http_version 1.1;
57 proxy_set_header Connection "";
58 chunked_transfer_encoding off;
59
60 # This uses the upstream directive definition to load balance
61 proxy_pass http://minio_s3;
62 }
63}
64
65server {
66 listen 443 ssl;
67 listen [::]:443 ssl;
68 http2 on;
69
70 server_name web.example.com;
71
72 if ($host != 'web.example.com') {
73 return 444;
74 }
75
76 # Log configuration
77 access_log /var/log/nginx/web.access.log;
78 error_log /var/log/nginx/web.error.log warn;
79
80 # SSL configuration
81 ssl_certificate /etc/ssl/example-com/fullchain.cer;
82 ssl_certificate_key /etc/ssl/example-com/example.com.key;
83 ssl_session_cache shared:SSL:10m;
84 ssl_session_timeout 1440m;
85 ssl_session_tickets off;
86 ssl_protocols TLSv1.2 TLSv1.3;
87 ssl_prefer_server_ciphers on;
88 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA;
89
90 # Allow special characters in headers
91 ignore_invalid_headers off;
92
93 # Allow any size file to be uploaded.
94 # Set to a value such as 1000m; to restrict file size to a specific value
95 client_max_body_size 0;
96
97 # Disable buffering
98 proxy_buffering off;
99 proxy_request_buffering off;
100
101 location / {
102 proxy_set_header Host $http_host;
103 proxy_set_header X-Real-IP $remote_addr;
104 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
105 proxy_set_header X-Forwarded-Proto $scheme;
106 proxy_set_header X-NginX-Proxy true;
107
108 # This is necessary to pass the correct IP to be hashed
109 real_ip_header X-Real-IP;
110
111 proxy_connect_timeout 300;
112
113 # To support websocket
114 proxy_http_version 1.1;
115 proxy_set_header Upgrade $http_upgrade;
116 proxy_set_header Connection "upgrade";
117
118 chunked_transfer_encoding off;
119
120 # This uses the upstream directive definition to load balance
121 proxy_pass http://minio_console;
122 }
123}
124
125server {
126 listen 80;
127 listen [::]:80;
128
129 server_name *.example.com;
130
131 return 301 https://$host$request_uri;
132}
4、测试配置
1sudo nginx -t
2.4 添加域名解析
参考示例:域名解析-腾讯云
III. 创建存储桶
3.1 MinIO 登录
访问地址:mi.example.com ,输入你最初设置的用户密码登录。
3.2 Bucket 配置
1、导航至侧菜单 “Object Browser”,然后创建名为 bucket1
(可自定义桶名称)的新桶。
2、从侧菜单中选择 “Access Keys” -> “Create access key”,打开 “Restrict beyond user policy(超出用户策略限制) ” ,指定可访问的“桶”,参考如下:
1{
2 "Version": "2012-10-17",
3 "Statement": [
4 {
5 "Effect": "Allow",
6 "Action": [
7 "admin:*"
8 ]
9 },
10 {
11 "Effect": "Allow",
12 "Action": [
13 "kms:*"
14 ]
15 },
16 {
17 "Effect": "Allow",
18 "Action": [
19 "s3:*"
20 ],
21 "Resource": [
22 "arn:aws:s3:::bucket1/*"
23 ]
24 }
25 ]
26}
为策略命名,如 ‘Bucket1 Token’,完成后生成一个新的访问密钥。 然后,将新创建的访问密钥和秘钥保存在记事本中,以备后用。
3、从侧菜单中选择"Buckets",选择 bucket1
在“Summary”(摘要)项中选择 “Access Policy”为“Public”。
4、在“Anonymous”(匿名)项中修改规则 readwirte
为 readonly
。
1Prefix: /
2Access: readonly
5、返回“Summary”项,可以看到“Access Policy”当前为“Custom”。编辑“Custom”,在“Write Policy”中,删除 "s3:ListBucket"
以关闭公开桶的列表展示。
1...
2"Action": [
3 "s3:GetBucketLocation"
4],
5...
IV. 升级 MinIO
4.1 先决条件
参考:官方文档 。
4.2 升级 MinIO 部署
使用这些步骤升级 MinIO 部署,其中 MinIO 服务器进程由 systemctl
管理,例如使用 MinIO DEB/RPM 软件包
创建的部署。
此过程假定已在所有 MinIO 节点上设置 MINIO_CONFIG_ENV_FILE
变量。
1、在每个节点上更新 MinIO 二进制文件
- RPM (RHEL)
使用以下命令下载最新稳定的 MinIO RPM 并更新现有安装。
1wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20xxxxxxxxx.0.0-1.x86_64.rpm
2sudo dnf update minio-20xxxxxxxxx.0.0-1.x86_64.rpm
在每个节点上运行 minio --version
验证是否已成功将所有二进制文件升级到相同版本。 除非所有节点都使用相同的 MinIO 二进制版本,否则不要继续。
2、重新加载 systemd 管理器配置文件
1sudo systemctl daemon-reload
3、重新启动部署
运行 mc admin service restart
命令,同时重启部署中的所有 MinIO 服务器进程。
1mc admin service restart ALIAS
替换要重启的 MinIO 部署的 alias
与 S3 兼容的 SDK 和应用程序应自动重试操作,这样重启过程通常不会影响正在进行的操作。
4、验证升级
使用 mc admin info
命令检查所有 MinIO 服务器是否在线、运行并反映已安装的 MinIO 版本。
5、更新 MinIO 客户端
您应该升级您的 mc
二进制文件,以匹配或紧跟 MinIO 服务器的发布。 您可以使用 mc update
命令将二进制文件更新到最新的稳定版本:
1mc update
V. 数据备份
5.1 安装 mc 客户端
📌 环境说明:
这里以 Windows 客户端演示。
1、下载客户端:MinIO Client
2、将下载的 mc.exe
客户端文件复制到以下目录👇
1%SystemRoot%\System32
3、打开终端,输入以下命令验证安装👇
1mc -v
5.2 配置 mc 服务
设置 MinIO 别名语法
1mc alias set 名称 服务地址 用户名 密码
- 设置备份源 minio 👇
1mc alias set source http://ip:9000 user password
- 设置备份目标 minio 👇
1mc alias set target http://ip:9000 user password
📢 注意:
这里的端口须是 S3 API 端口,默认为9000
5.3 备份存储桶至本地
1、本地备份语法:
1mc cp -r source/<bucket-name> /path/to/local/directory
📌 参数说明:
source/<bucket-name>
是 MinIO 上存储桶的路径。/path/to/local/directory
是本地的备份目录。
2、本地实操(Windows 演示)
1cp -r source\imgs e:\temp
5.4 迁移到另一存储桶
mc 迁移数据通常有下面 3 种场景:
1、全量迁移,重名文件不覆盖,如 bucket
不存在,会自动创建
1mc mirror source target
2、只迁移某个 bucket
,以 test
为例,迁移的目标 bucket
需要提前创建
1mc mirror source/test target/test
📢 注意:
test
要提前在target
中创建。
3、加上 --overwrite
参数,覆盖重名文件
1mc mirror --overwrite source target
2mc mirror --overwrite source/test target/test
5.5 mc 命令
1、命令参数
Command | Explain |
---|---|
ls | 列出文件和文件夹 |
mb | 创建一个存储桶或一个文件夹 |
cat | 显示文件和对象内容 |
pipe | 将一个STDIN重定向到一个对象或者文件或者STDOUT |
share | 生成用于共享的URL |
cp | 拷贝文件和对象 |
mirror | 给存储桶和文件夹做镜像 |
find | 基于参数查找文件 |
diff | 对两个文件夹或者存储桶比较差异 |
rm | 除文件和对象 |
events | 管理对象通知 |
watch | 监听文件和对象的事件 |
policy | 管理访问策略 |
session | 为cp命令管理保存的会话 |
config | 管理mc配置文件 |
update | 检查软件更新 |
version | 输出版本信息 |
2、演示示例
执行命令测试能否连通,如有文件或至少存在一个 Bucket,会在回显中列出:
1mc ls source
移除已经添加的 minio 服务:
1mc config host remove target
执行命令获取集群数据大小,如果有文件或存在至少一个 Bucket,会在最后一行打印当前集群所有文件总大小:
1mc du source
查看 ~/.mc/config.json
里的配置:
1mc config host ls
查看所有 alias
:
1mc alias ls
使用命令检查是否有未完整传输的文件,如果有未传输完全的文件,会在回显中列出:
1mc ls --incomplete source
如果有必要,可以删除某个桶中的残缺文件:
1mc rm --incomplete $hostName/$bucket
VI. 卸载 MinIO
在 Rocky Linux 9.4 上卸载 MinIO Object Storage 可以按照以下步骤进行:
6.1 停止 MinIO 服务
首先,确保 MinIO 服务已停止,以避免文件锁或其他问题。
1sudo systemctl disable minio --now
6.2 删除 MinIO 文件
6.2.1 卸载 MinIO 二进制文件
查找 MinIO 二进制文件的路径,一般会安装在 /usr/local/bin/minio
或 /usr/bin/minio
,使用以下命令删除它:
1sudo rm -f /usr/local/bin/minio
6.2.2 删除 MinIO 数据与配置
MinIO 的数据和配置目录一般位于 /var/lib/minio
或 /etc/minio
。
1sudo rm -rf /var/lib/minio
2sudo rm -rf /etc/minio
如果你有自定义路径,请根据实际情况删除相应目录:
1sudo rm -rf /path/to/directory
2rm -rf /etc/default/minio
6.2.3 清理 MinIO 用户和组
如果为 MinIO 创建了特定的系统用户或组,可以通过以下命令删除它们:
1sudo userdel minio-user
2sudo groupdel minio-group
6.2.4 清理日志文件
如果 MinIO 生成了日志文件,可以在 /var/log/
中删除相关日志文件。例如:
1sudo rm -rf /var/log/minio.log
卸载完成后,可以通过运行 which minio
或 minio --version
来确认 MinIO 已成功卸载。
6.2.5 查找剩余文件
1find / -name "*minio*"