文章目录
- 1、概要
- 2、整体架构流程
- 3、集群搭建
- 3.1、服务器准备
- 3.2、下载并安装
- 3.3、minio集群配置
- 3.4、minio.service配置
- 3.5、启动
- 4、nginx 转发
1、概要
minIO 是一个开源的分布式对象存储服务,可用于构建高可用性和高扩展性的存储集群。
-
分布式架构:minIO 集群由多个独立的 minIO 实例组成,在不同的物理服务器或虚拟机上运行,这些实例协同工作以提供存储服务。
-
负载均衡:minIO 集群会使用负载均衡算法来将数据块分配到不同的节点上,确保数据在整个集群中平均分布。这有助于提高性能和可靠性。
-
数据复制:minIO 使用数据冗余来确保高可用性。用户可以配置数据的副本数目,以便在发生节点故障时保证数据的安全性和可靠性。
-
Erasure Coding:minIO 还支持纠删码技术(Erasure Coding),通过将数据进行编码和切片,并在多个节点上存储切片的方式来提高存储效率和容错性。
-
元数据管理:minIO 使用元数据来跟踪对象信息和位置,确保数据可以快速定位和检索。元数据通常存储在单独的数据库中,以提高查询效率。
-
动态伸缩:minIO 集群能够在运行时进行动态扩展和收缩。用户可以根据需要添加或删除节点,以适应不同的存储需求。
2、整体架构流程
minIO 集群的整体架构流程如下:
- 集群初始化:用户启动 minIO 集群时,各个节点会相互通信建立连接,并形成一个分布式存储集群。每个节点都有自己的身份信息和角色,例如主节点、从节点等。
- 客户端请求:客户端通过 minIO 提供的 API 向集群发送请求,可以是文件上传、下载、删除等操作。
- 负载均衡:minIO 集群中的负载均衡组件会接收客户端请求,然后将请求路由到合适的节点上进行处理。这有助于平衡各个节点的负载和提高性能。
- 数据访问:一旦请求被路由到特定节点,该节点会根据请求执行相应的操作,如读取或写入数据。
- 数据存储:数据会根据配置的规则进行存储,可能会使用数据复制或纠删码技术来确保数据的可靠性和容错性。
- 元数据管理:集群中的元数据管理模块会跟踪对象的位置、大小、权限等信息,以便快速检索和访问数据。
- 失败处理:如果某个节点发生故障,集群会自动识别并采取措施,例如重新分配数据或修复损坏的数据副本。
- 动态扩展:集群支持动态节点的加入和移除,用户可以根据需求扩展或缩减存储容量。
- 监控和管理:minIO 集群通常提供监控和管理工具,用于实时监视集群状态、性能指标和故障情况,以确保集群的正常运行。
通过以上流程,minIO 集群实现了高效的对象存储服务,具备高可用性、高性能和弹性伸缩的特点,适用于各种存储场景,如大规模数据存储、备份和归档等。
3、集群搭建
3.1、服务器准备
host | ip |
---|---|
minio-01 | 192.168.1.1 |
minio-02 | 192.168.1.2 |
minio-03 | 192.168.1.3 |
minio-04 | 192.168.1.4 |
在所有服务器分别执行
$ hostnamectl set-hostname minio-01
$ hostnamectl set-hostname minio-02
$ hostnamectl set-hostname minio-03
$ hostnamectl set-hostname minio-04
在所有服务器全部执行
修改系统最大文件数
## 查看系统最大文件数
$ ulimit -n
## 查看系统最大文件数
$ ulimit -a
## 修改系统最大文件数
$ echo "* soft nofile 65535" >> /etc/security/limits.conf
$ echo "* hard nofile 65535" >> /etc/security/limits.conf
$ sysctl -p
## 重启服务器
$ reboot
关闭所有服务器的防火墙
$ systemctl stop firewalld.service
3.2、下载并安装
$ mkdir /home/minio
$ mkdir /home/minio/data
$ chown minio-user:minio-user /home/minio/
$ chown minio-user:minio-user /home/minio/data
$ cd /home/minio
$ wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240113075303.0.0-1.x86_64.rpm
$ rpm -i minio-20240113075303.0.0-1.x86_64.rpm
3.3、minio集群配置
$ vim /etc/default/minio
/etc/default/minio 文件中找到以下字段,修改其中的配置
## 这块是文件磁盘的位置 因为我们之前配置了hosts,所以直接使用host,{1...4} 这边是一种池化写法
MINIO_VOLUMES="http://minio-0{1...4}/home/minio/data"
## minio-console的地址 就是web界面控制台
MINIO_OPTS="--console-address :9001"
# console的登陆账号
MINIO_ROOT_USER=admin
# console的登陆密码
MINIO_ROOT_PASSWORD=password
3.4、minio.service配置
$ vim /usr/lib/systemd/system/minio.service
minio.service文件内容
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
Type=notify
WorkingDirectory=/home/minio
User=minio-user
Group=minio-user
ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
3.5、启动
$ systemctl enable minio.service
$ systemctl daemon-reload
$ systemctl start minio.service
http://192.168.102.231:9001/
打开页面,输入密码
点击左侧Buckets 进入创建桶的页面
4、nginx 转发
# 反向代理配置
upstream minio-cluster{
ip_hash;
server minio-01:9001;
server minio-02:9001;
server minio-03:9001;
server minio-04:9001;
}
server {
listen 9001;
client_max_body_size 1G;
location / {
proxy_set_header Host $host;
proxy_set_header Remote_Addr $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://minio-cluster;
}
}