MinIO
MinIO 是一个高性能的对象存储系统,兼容 Amazon S3 API,专为存储海量非结构化数据而设计。它使用 Golang 编写,支持本地部署和云环境,适用于私有云、混合云和边缘计算等场景。MinIO 提供数据冗余、加密和高可用性,是构建数据湖、备份与恢复等解决方案的理想选择。
前置条件
- 参考:基础配置
单机模式
1. 下载 MinIO 服务器和客户端
首先,通过以下命令下载 MinIO 服务器和客户端二进制文件:
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-11-07T00-52-20Z
wget https://dl.min.io/client/mc/release/linux-amd64/archive/mc.RELEASE.2024-11-17T19-35-25Z2
2. 安装 MinIO
将下载的二进制文件复制到系统的可执行文件目录并赋予执行权限:
sudo cp minio.RELEASE.2024-11-07T00-52-20Z /usr/bin/minio
sudo cp mc.RELEASE.2024-11-17T19-35-25Z /usr/bin/mcli
sudo chmod +x /usr/bin/{minio,mcli}2
3
3. 创建数据目录
创建一个目录用于存储 MinIO 数据:
mkdir -p /data/service/minio4. 创建 MinIO 配置文件
为 MinIO 创建环境变量文件 /etc/default/minio,配置存储路径和服务参数:
sudo tee /etc/default/minio <<EOF
MINIO_VOLUMES="/data/service/minio"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=Admin@123
EOF2
3
4
5
6
配置说明:
MINIO_VOLUMES定义了 MinIO 存储数据的路径,这里为/data/minio。MINIO_OPTS配置了服务监听端口9000和控制台端口9001。- 根据安全需求,请务必更改默认的管理员用户名和密码。
5. 使用 systemd 管理 MinIO 服务
为了便于管理和设置服务的开机自启动,创建 systemd 服务文件:
sudo tee /etc/systemd/system/minio.service << "EOF"
[Unit]
Description=MinIO Server
Documentation=https://docs.min.io
After=network-online.target
[Service]
User=admin
Group=ateng
Type=simple
EnvironmentFile=-/etc/default/minio
ExecStart=/usr/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=30
TimeoutStartSec=120
TimeoutStopSec=180
StartLimitIntervalSec=600
StartLimitBurst=3
KillMode=control-group
KillSignal=SIGTERM
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
说明:
User和Group根据实际的系统用户配置。ExecStart使用配置文件中的变量启动 MinIO。
加载并启动 MinIO 服务:
sudo systemctl daemon-reload
sudo systemctl start minio
sudo systemctl enable minio2
3
6. 访问 MinIO 控制台
安装完成后,您可以通过以下 URL 访问 MinIO 控制台:
URL: http://localhost:9001/
Username: admin
Password: Admin@1232
3
提示:
- 请根据网络配置调整访问 URL,如果防火墙限制了访问,请确保开放端口
9000和9001。 - 强烈建议在生产环境中使用强密码并启用 TLS 加密。
7. 使用 mcli 添加 MinIO 服务器
使用 MinIO 客户端工具 mcli 添加 MinIO 服务器进行管理:
mcli config host add minio http://localhost:9000 admin Admin@123 --api s3v48. 查看 MinIO 服务器状态
可以通过 mcli 查看 MinIO 服务器的状态和信息:
mcli admin info minio集群模式
1. 下载 MinIO 服务器和客户端
首先,通过以下命令下载 MinIO 服务器和客户端二进制文件:
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-11-07T00-52-20Z
wget https://dl.min.io/client/mc/release/linux-amd64/archive/mc.RELEASE.2024-11-17T19-35-25Z2
确保下载了与操作系统匹配的最新稳定版本。可以访问 MinIO Releases 查看最新发布版本。
2. 安装 MinIO
将下载的二进制文件复制到系统的可执行文件目录并赋予执行权限:
sudo cp minio.RELEASE.2024-11-07T00-52-20Z /usr/bin/minio
sudo cp mc.RELEASE.2024-11-17T19-35-25Z /usr/bin/mcli
sudo chmod +x /usr/bin/{minio,mcli}2
3
说明:
minio是 MinIO 服务器端,mcli是 MinIO 客户端工具。
3. 创建数据目录
为 MinIO 服务器创建存储数据的目录。每个节点需要创建多个数据目录:
mkdir -p /data/service/minio/data{01..02}说明:
- 目录
/data/service/minio/data01和/data/service/minio/data02将被用于存储 MinIO 集群数据。 - 根据需求,可以扩展
data{01..02},例如data{01..04}。 - 集群模式的存储目录不能和根目录在同一个分区上,需要挂载单独的分区,如果系统中只有根分区,可以使用
fallocate -l 10G /mnt/minio.img的方式创建一个文件,然后格式化后挂载到相应的目录。
4. 创建 MinIO 配置文件
接下来,创建并配置 MinIO 环境变量文件 /etc/default/minio:
sudo tee /etc/default/minio <<EOF
MINIO_VOLUMES="http://192.168.1.101:9000/data/service/minio/data{01...02} http://192.168.1.102:9000/data/service/minio/data{01...02} http://192.168.1.103:9000/data/service/minio/data{01...02}"
MINIO_OPTS="--address :9000 --console-address :9001"
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=Admin@123
EOF2
3
4
5
6
配置说明:
MINIO_VOLUMES定义了集群中的存储卷路径。请确保节点数量不少于2个,并且不同节点的 IP 地址正确。- 重要: 存储目录应位于与操作系统不同的硬盘上,以避免性能问题或潜在的磁盘冲突。
MINIO_OPTS指定了 MinIO 服务的监听端口和控制台端口。默认情况下,MinIO 服务器在:9000端口上运行,控制台在:9001端口上。
5. 使用 systemd 管理 MinIO 服务
创建 MinIO 的 systemd 服务文件,以便将 MinIO 服务设置为开机启动并便于管理:
sudo tee /etc/systemd/system/minio.service << "EOF"
[Unit]
Description=MinIO Server
Documentation=https://docs.min.io
After=network-online.target
[Service]
User=admin
Group=ateng
Type=simple
EnvironmentFile=-/etc/default/minio
ExecStart=/usr/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
ExecStop=/bin/kill -SIGTERM $MAINPID
Restart=on-failure
RestartSec=30
TimeoutStartSec=120
TimeoutStopSec=180
StartLimitIntervalSec=600
StartLimitBurst=3
KillMode=control-group
KillSignal=SIGTERM
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
EOF2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
说明:
User和Group字段应根据系统实际用户和组进行调整。ExecStart将根据之前配置的环境变量启动 MinIO 服务。
加载并启动服务:
sudo systemctl daemon-reload
sudo systemctl start minio
sudo systemctl enable minio2
3
6. 访问 MinIO 控制台
您可以通过以下 URL 访问 MinIO 的 Web 控制台进行管理:
URL: http://192.168.1.101:9001/
Username: admin
Password: Admin@1232
3
提示:
请确保端口 9001 已在防火墙中开放,并根据安全需求更改默认的用户名和密码。
7. 使用 mcli 添加 MinIO 服务器
通过 MinIO 客户端工具 mcli 添加 MinIO 服务器并进行管理:
mcli config host add minio http://192.168.1.101:9000 admin Admin@123 --api s3v4说明:
minio为服务器名称,可以自定义命名。--api s3v4指定了 S3 API 版本。
8. 查看 MinIO 集群状态
使用 mcli 命令可以查看 MinIO 集群的状态和信息:
mcli admin info minio此命令将返回 MinIO 集群的配置信息、状态和健康检查结果。
配置负载均衡
Nginx
编辑配置文件
编辑/etc/nginx/conf.d/minio.conf添加以下内容:
upstream minio_api_servers {
least_conn;
server 192.168.1.101:9000 max_fails=3 fail_timeout=30s;
server 192.168.1.102:9000 max_fails=3 fail_timeout=30s;
server 192.168.1.103:9000 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 19000;
server_name _;
location / {
proxy_pass http://minio_api_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
参数含义说明
least_conn: 使用最少连接的负载均衡策略,将请求转发到当前连接数最少的服务器上。server: 定义后端服务器的 IP 和端口,max_fails=3表示若服务器连续失败 3 次则判定为不可用,fail_timeout=30s表示服务器不可用的超时时间为 30 秒。keepalive: 定义与后端服务器之间保持的最大长连接数,减少连接开销。listen: 定义前端监听的端口号,在此配置中为19000。server_name: 用_匹配所有请求的域名。proxy_pass: 转发请求到指定的upstream组。proxy_set_header: 设置代理请求头:Host: 设置请求头的Host字段为客户端请求的主机。X-Real-IP: 设置请求头的X-Real-IP字段为客户端真实 IP。X-Forwarded-For: 保留所有代理 IP,确保多层代理时能追踪到客户端真实 IP。X-Forwarded-Proto: 设置协议头,保留客户端请求的协议类型。
proxy_connect_timeout: 定义代理服务器与后端服务器连接的超时时间。proxy_send_timeout: 定义发送数据到后端服务器的超时时间。proxy_read_timeout: 定义从后端服务器读取响应的超时时间。
重新读取配置
sudo systemctl reload nginx添加负载均衡后的服务
mcli config host add minio-lb http://192.168.1.101:19000 admin Admin@123 --api s3v4查看状态
mcli admin info minio-lbHaProxy
编辑配置文件
编辑/etc/haproxy/haproxy.cfg添加以下内容:
frontend minio_api
bind *:19000
default_backend minio_api_servers
backend minio_api_servers
balance leastconn
option tcp-check
server minio01 192.168.1.101:9000 check inter 3s fall 3 rise 2
server minio02 192.168.1.102:9000 check inter 3s fall 3 rise 2
server minio03 192.168.1.103:9000 check inter 3s fall 3 rise 22
3
4
5
6
7
8
9
10
参数含义说明
balance leastconn: 使用最少连接的负载均衡策略,将请求转发到当前连接数最少的服务器上,适用于长连接的负载均衡需求。option httpchk GET /: 开启 HTTP 健康检查,通过发送 GET 请求检查服务器是否存活。server: 定义后端服务器的 IP 和端口,并添加健康检查设置:check: 开启对服务器的健康检查。inter 3s: 设置健康检查的间隔时间为 3 秒。fall 3: 如果连续 3 次健康检查失败,判定服务器不可用。rise 2: 如果连续 2 次健康检查成功,判定服务器恢复可用。
重新读取配置
sudo systemctl restart haproxy添加负载均衡后的服务
mcli config host add minio-lb http://192.168.1.101:19000 admin Admin@123 --api s3v4查看状态
mcli admin info minio-lb