非 Docker 方式安装MinIO单机版和集群版
MinIO单机版安装
生产环境肯定不能单机模式,因为无法做到高可用,但是对于实验环境或者体验功能,完全够了。
下面我来给大家演示下如何部署 MinIO
官方文档:https://www.minio.org.cn/docs/minio/linux/index.html
1)下载二进制包:
wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/
2)启动服务端
假设系统最大的磁盘或者分区挂载到了 /data/ 下,我们将 MinIO 的存储目录放到 /data/ 下,如果没有则放到home新建目录下,本文以home为例
mkdir /home/minio cd /home/minio nohup minio server /home/minio --console-address :9090 &
如果端口冲突请修改9090为其他端口
3)浏览器访问
http://127.0.0.1:9090
注意,这个 IP 就是你的 linux 机器 IP,如果访问不到,则需要关闭 firewalld 或者放行 9090 端口
默认用户名和密码都是:minioadmin(进入后记得修改密码)
MinIO集群版安装(生产环境推荐)
生产环境还得是部署集群模式,保证高可用和扩展性。
由于是非常轻量级的软件,MinIO 架构上也没有这么复杂,它使用操作系统的文件系统作为存储介质,我们在向任意节点写数据的时候,MinIO 会自动同步数据到另外的节点。
如果一个 N 节点的分布式 MinIO 集群,只要有 N/2 节点在线,数据就是安全的。但是要保证至少有N/2+1 个节点来创建新的对象。假设集群有 4 个节点,即使有 2 两个节点宕机,这个集群仍然是可读的,但是,需要 3 个节点才能让集群写数据,官方建议至少用 4 台机器搭建集群。
下面针对 4 台机器来做集群部署实验。
1)准备工作
准备4台机器,配置:1 核 CPU、2G 内存、20G 单独磁盘
IP | 主机名 |
192.168.222.111 | minio-1 |
192.168.222.112 | minio-2 |
192.168.222.113 | minio-3 |
192.168.222.114 | minio-4 |
192.168.222.115 | Nginx负载均衡 |
设置主机名、关闭防火墙和 selinux、挂载单独磁盘(/data/)如果没有data则做其他盘比如home下、/etc/hosts、设置时间同步(安装chrony)
关于chrony的内容请转战查看https://xtbiancheng.cn/system/11.html
2)下载二进制包(采用二进制包部署):
四台机器都这样做:
mkdir -p /data/minio/{run,data} && mkdir -p /etc/minio
建好目录后去所有主机上建立
vim /data/minio/run/run.sh
#!/bin/bash data MINIO_ROOT_USER=admin data MINIO_ROOT_PASSWORD=12345678 MINIO_HOME=/root ${MINIO_HOME}/minio server --address ":9000" --console-address ":50000" \ http://192.168.92.101:9000/mnt/data1 http://192.168.92.102:9000/mnt/data2 \ http://192.168.92.103:9000/mnt/data3 http://192.168.92.104:9000/mnt/data4 \ http://192.168.92.105:9000/mnt/data5 http://192.168.92.106:9000/mnt/data6 \
将minio二进制文件上传到
/data/minio/run
目录!
作为服务启动:
$ vim /usr/lib/systemd/system/minio.service [Unit] Description=Minio service Documentation=https://docs.minio.io/ [Service] WorkingDirectory=/data/minio/run/ ExecStart=/data/minio/run/run.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
做运行权限处理
$ chmod +x /data/minio/run/minio && chmod +x /data/minio/run/run.sh
加入集群服务,并且启动
$ systemctl daemon-reload $ systemctl enable minio && systemctl start minio
大文件分片上传
一图胜千言
默认一个分片大小为 10M,可通过配置chunk-size-mb
修改:
# minio 存储配置 minio: endpoint: ${MINIO_ENDPOINT:http://127.0.0.1:9000} bucket: ${MINIO_BUCKET:yunmianshi} access-key: ${MINIO_ACCESS_KEY:zWXHMYJl99MGISbaVanX} secret-key: ${MINIO_SECRET_KEY:kPDoBRlxpIwMEHje1ve5l6e3TGSGUfwE1ONSzRb4} chunk-size-mb: ${MINIO_CHUNK_SIZE_MB:10}
bucket 的存储策略配置:https://northflank.com/guides/use-a-minio-s3-bucket-on-northflank#manage-bucket-access
如 bucket 名为 xingtaijiqirenbiancheng 的策略配置如下(如果权限没有设置好,读取时会出现的是xml文件):
{ "Version": "2012-10-17", "Statement": [ { "Action": ["s3:GetObject"], "Effect": "Allow", "Principal": { "AWS": ["*"] }, "Resource": ["arn:aws:s3:::xingtaijiqirenbiancheng/*"], "Sid": "" } ] }
建议:把 MinIO 部署到内网,通过 nginx 访问
配置好后需要配置nginx,先随便配置一个,然后再反代就可以了。
upstream minio { server 192.168.1.10:9000; server 192.168.1.11:9000; server 192.168.1.12:9000; server 192.168.1.220:9000; } upstream console { ip_hash; server 192.168.1.10:50000; server 192.168.1.11:50000; server 192.168.1.12:50000; server 192.168.1.220:50000; } server { listen 19000; server_name localhost; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; location / { proxy_set_header Host $http_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 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio; } } server { listen 51000; server_name localhost; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; location / { proxy_set_header Host $http_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_set_header X-NginX-Proxy true; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://console; } }