minio搭建单机/集群
MinIO说明
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
1 单机版搭建
操作系统 | 搭建方式 |
---|---|
linux | docker容器 |
linux | 宿主机 |
1.1 安装
1.1.1基于docker安装
docker search minio
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data
docker 启服务时指定挂在目录和登陆的用户名和密码
docker run -p 9000:9000 --name minio1
输入账号密码之后页面.png 创建bucket.png
-e "MINIO_ACCESS_KEY=admin"
-e "MINIO_SECRET_KEY=12345678"
-v /Users/xiyou/my_minio/data:/data
-v /Users/xiyou/my_minio/config:/root/.minio
minio/minio server /data
启服务之后可通过http://127.0.0.1:9000访问
查看文件在本机的存储.png
1.1.2基于linux平台搭建
Platform | Architecture | URL |
---|---|---|
GNU/Linux | 64-bit Intel | https://dl.m in.io/server/minio/release/linux-amd64/minio |
wget https://dl.min.io/server/minio/release/linux-amd64/minio
启动服务.png
chmod +x minio
./minio server /xiyou/my_minio/data
打马处是我的名字,路径可以自己选择哈
后台运行:nohup ./minio server /xiyou/my_minio/data > /xiyou/my_minio/data/minio.log 2>&1 &
可以使用Accesskey和Secretkey作为账号和密码登陆页面使用
1.2单机版数据备份与恢复
将data数据目录拷贝至新服务器即可重启服务,恢复数据。
node1.png
具体实施如下:
使用两个linux服务器作测试
node1: 10.211.55.5
node2: 10.211.55.8
步骤1: 在node2上采用linux单机版启动minio服务后,创建两个bucket,分别为bucket1和bucket2,在bucket中上传文件;
步骤2: 停止node2上的minio服务;
步骤3: 将node2上的my_minio文件夹整个拷贝至node1;
scp -r ./my_minio root@10.211.55.5:/xiyou/
步骤4: 在node1重新启服务
2. 集群搭建(Distributed MinIO)
2.1 集群服务器配置及启动
既然单机的minio可以采用异结点备份的方式恢复数据,为什么还要使用Distributed MinIO?
数据保护/高可用/限制/一致性
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
注意
- 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
- 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
- 下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
- 分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
- 在Windows下运行分布式Minio处于实验阶段,请悠着点使用。
参考:https://docs.min.io/cn/distributed-minio-quickstart-guide.html
名称 | IP |
---|---|
node1 | 10.211.55.5 |
node2 | 10.211.55.8 |
node3 | 10.211.55.9 |
node4 | 10.211.55.10 |
nginx | 10.211.55.5 |
搭建的是4个结点的集群
minio集群架构.jpg
示例: 启动分布式Minio实例,4个节点,每节点1块盘
搭建命令:
mkdir -p /xiyou/software
cd /xiyou/software
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 ./minio server http://10.211.55.5/minio_data http://10.211.55.8/minio_data http://10.211.55.9/minio_data http://10.211.55.10/minio_data
注解:./minio为minio文件路径,minio_data是自定义的minio的文件的存放路径 可采取nohup 加& 进行后台启动 启动完成.png
可访问任一结点:
http://10.211.55.5:9000
http://10.211.55.8:9000
http://10.211.55.9:9000
http://10.211.55.10:9000
脚本方式启动
1.启动脚本
mkdir -p /opt/minio
vim /opt/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio123
/xiyou/software/minio server http://10.211.55.5/minio_data \
http://10.211.55.8/minio_data\
http://10.211.55.9/minio_data\
http://10.211.55.10/minio_data
2.服务脚本
vim /usr/lib/systemd/system/minio.service
# vim /etc/systemd/system/minio.service #ubuntu下的启动脚本
---------------------------------------------------------------------------------------
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/xiyou/software/
ExecStart=/opt/minio/run.sh
Restart=on-failure
RestartSec=5
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------------
chmod +x /usr/lib/systemd/system/minio.service #centos的启动脚本
# chmod +x /etc/systemd/system/minio.service #ubuntu的启动脚本
#参考minio.service配置: https://github.com/minio/minio-service/blob/master/linux-systemd/minio.service
3.服务启动
chmod +x /opt/minio/run.sh
systemctl daemon-reload #刷新配置
systemctl enable minio
systemctl start minio
systemctl status minio
启动脚本后,浏览器打开网址进行测试:
浏览器测试
2.2 集群高可用测试
单机Minio服务存在单点故障,相反,如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你需要至少有N/2+1个节点 Quorum 来创建新的对象。
例如,一个8节点的Minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据。
2.2.1 测试结点down机对集群读写的影响
只down一个结点node1,集群可以正常使用,可读可写
down掉一个node的集群可正常访问2. down两个结点node1、node2,集群可读但不可写
down两个结点集群可读不可写
3.down三个结点node1、node2、node3,集群不能访问
down三个结点集群不能访问
2.2.2 模拟磁盘损坏影响
Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
四个node结点的xl.json
开始模拟------上传一个文件之后,会有两个文件part.1 xl.json
part.1四个node结点的查看会不同,有乱码
1、删掉node1中文件testMinio2.txt的part1,集群文件仍然可读;
2、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1,集群文件仍然可读;
3、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part,集群仍然可读;
4、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part、node1中文件testMinio2.txt的xl.part,集群仍然可读,但是浏览器中显示多了一个空文件夹testMinio2.txt;
集群中多出一个空文件夹
5、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part、node1中文件testMinio2.txt的xl.part、node3中文件testMinio2.txt的part1,下载文件出现异常,无法读文件;
文件下载异常
2.3 备份恢复
通过将数据目录下的数据文件拷贝到异节点对应的数据目录下,再起minio集群,可以实现数据恢复。
3. nginx配置
3.1 nginx安装
根据自己的操作系统选择合适的安装方式
http://nginx.org/en/linux_packages.html
##我的os是centos7
#Install the prerequisites:
sudo yum install yum-utils
vim /etc/yum.repos.d/nginx.repo
#with the following contents:
-----------------------------------------------------------------------------------------
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
---------------------------------------------------------------------------------------
sudo yum install nginx
3.2 nginx配置
#安装好nginx之后就可以启动nginx
systemctl start nginx
#查看下端口监听
netstat -lntup|grep 80
#查看下nginx.conf文件的配置
cat /etc/nginx/nginx.conf
----------------------------------------------------------------------------------
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
#include /etc/nginx/conf.d/*.conf;
upstream minio_servers {
ip_hash;
server 10.211.55.5:9000;
server 10.211.55.8:9000;
server 10.211.55.9:9000;
server 10.211.55.10:9000;
}
server {
listen 80;
server_name minio.dev.com;
location / {
proxy_set_header Host $host;
proxy_pass http://minio_servers;
proxy_redirect off;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#client_body_buffer_size 10M; #缓冲区代理缓冲请求的最大字节数
#client_max_body_size 10G; #客户端最大文件上传大小为10G
#proxy_buffers 1024 4k;
#proxy_read_timeout 300;
#proxy_next_upstream error timeout http_404;
}
}
}
--------------------------------------------------------------------------------
#location 内的注释的字段,建议可以在查看后根据需求修改
#可参考 https://docs.min.io/cn/setup-nginx-proxy-with-minio.html
#https://www.nginx.com/blog/enterprise-grade-cloud-storage-nginx-plus-minio/
3.3 配置hosts查看访问
配置hosts
vim /etc/hosts
10.211.55.5 minio.dev.com
哇塞!可以正常访问啦!
域名访问
4. MinIO Client
4.1 安装mc
cd /xiyou/software/
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
4.2 使用mc
chmod +x mc
通过mc创建bucket
./mc config host add mcminio http://10.211.55.8:9000 minio minio123
mc ls mcminio
./mc mb mcminio/third
参考:https://docs.min.io/docs/minio-client-quickstart-guide
其他的mc使用自己去参考官网
5. 那些年我们一起踩过的坑
5.1 node结点的ntp时间设置
node结点的ntp时间设置,别怪我没提醒你
设置系统时间为中国时区并启用NTP同步
yum install ntp //安装ntp服务
systemctl enable ntpd //开机启动服务
systemctl start ntpd //启动服务
timedatectl set-timezone Asia/Shanghai //更改时区
timedatectl set-ntp yes //启用ntp同步
ntpq -p //同步时间
参考https://www.cnblogs.com/tangxiaosheng/p/4986375.html
5.2 Allow port access for Firewalls
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
service iptables restart
参考:https://github.com/minio/minio
5.3 解决网页“打转转”问题
ifconfig ens4 mtu 1450
这跟系统的MTU设置有关,默认一般会设置为1500,有的系统也会设置为1450。集群中的MTU值一定要保持一致,如果是有多张网卡的,也可以把多张网卡的MTU值设置一致。
参考文档:
https://github.com/minio/minio/blob/master/README_zh_CN.md
https://github.com/minio/minio