MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
1、首页
2、下载
3、中文文档
http://docs.minio.org.cn/docs/
MinIO分布式集群是指在多个服务器节点均部署MinIO服务,并将其组建为分布式存储集群,对外提供标准S3接口以进行统一访问。
MinIO集群采用去中心化无共享架构,各节点间为对等关系,连接至任一节点均可实现对集群的访问。在我们的方案中还选择了Nginx的轮询实现各个节点的负载均衡。
数据对象在MinIO集群中进行存储时,先进行纠删分片,后打散存储在各硬盘上。具体为:
假设某MinIO集群内纠删组包含4块硬盘,某数据对象名为MyObject,其隶属存储桶名为MyBucket,哈希计算得到对应的纠删组为Disk 14。那么在Disk 14的数据路径下,都会生成MyBucket/MyObject子路径,子路径中包含2个文件,分别为存储元数据信息的xl.meta和MyObject对象在该盘上的第一个分片part.1。其中,xl表示MinIO中数据对象的默认存储格式。
1、S3
Simple Storage Service,简单存储服务,这个概念是Amazon在2006年推出的,对象存储就是从那个时候诞生的。S3提供了一个简单Web服务接口,可用于随时在Web上的任何位置存储和检索任何数量的数据。
2、Object
存储到 Minio 的基本对象,如文件、字节流,Anything...
3、Bucket
用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。
4、Drive
部署 Minio 时设置的磁盘,Minio 中所有的对象数据都会存储在 Drive 里。
5、Set
一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。
纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份校验数据,并能通过n+m份中的任意n份原始数据,还原为原始数据。即如果有任意小于等于m份的校验数据失效,仍然能通过剩下的数据还原出来。
Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。
在同一集群内,MinIO 自己会自动生成若干纠删组(Set),用于分布存放桶数据。一个纠删组中的一定数量的磁盘发生的故障(故障磁盘的数量小于等于校验盘的数量),通过纠删码校验算法可以恢复出正确的数据。
有两台服务器:
1、在每台服务器上创建minio目录
mkdir -p /home/minio/{run,data1,data2} && mkdir -p /etc/minio
2、下载或者上传下载好的minio二进制文件
官网下载地址:
https://dl.min.io/server/minio/release/linux-amd64/minio
3、集群启动文件配置
Minio默认9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
注意 :
vim /home/minio/run/minio-run.sh
集群节点192.168.3.17内容为
#!/bin/bash export MINIO_ACCESS_KEY=admin export MINIO_SECRET_KEY=admin123 /home/minio/run/minio server --config-dir /etc/minio \ --address "192.168.3.17:9000" \ http://192.168.3.17/home/minio/data1 http://192.168.3.17/home/minio/data2 \ http://192.168.3.18/home/minio/data1 http://192.168.3.18/home/minio/data2 \
集群节点192.168.3.18内容为
#!/bin/bash export MINIO_ACCESS_KEY=admin export MINIO_SECRET_KEY=admin123 /home/minio/run/minio server --config-dir /etc/minio \ --address "192.168.3.18:9000" \ http://192.168.3.17/home/minio/data1 http://192.168.3.17/home/minio/data2 \ http://192.168.3.18/home/minio/data1 http://192.168.3.18/home/minio/data2 \
4、创建Minio.server,将minio加入系统服务
vim /usr/lib/systemd/system/minio.service
[Unit] Description=Minio service Documentation=https://docs.minio.io/ [Service] WorkingDirectory=/home/minio/run/ ExecStart=/home/minio/run/minio-run.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
修改配置文件后需要重加载配置
systemctl daemon-reload
5、权限修改
chmod +x /usr/lib/systemd/system/minio.service && chmod +x /home/minio/run/minio && chmod +x /home/minio/run/minio-run.sh
6、启动集群
systemctl start minio systemctl enable minio
查看集群状态
systemctl status minio.service -l
apt-get install nginx
nginx文件安装完成之后的文件位置:
/usr/sbin/nginx
:主程序/etc/nginx
:存放配置文件/usr/share/nginx
:存放静态文件/var/log/nginx
:存放日志为了保证安全性,将采用https形式访问minio,下面展示再服务器本地生成ssl证书,并且集成到nginx中。
1、创建证书目录
[root@localhost ~]# cd /etc/nginx/ [root@localhost nginx]# mkdir ssl [root@localhost nginx]# cd ssl/
2、生成一个RSA密钥
[root@localhost ssl]# openssl genrsa -des3 -out nginx.key 1024 #实际使用中看服务器性能,如果足够好也可以使用4096位秘钥 Generating RSA private key, 1024 bit long modulus .......++++++ ...++++++ e is 65537 (0x10001) Enter pass phrase for nginx.key: 123456 #输入密码,自定义 Verifying - Enter pass phrase for nginx.key: 123456 #确认密码
3、生成一个证书请求
[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr Enter pass phrase for nginx.key: #输入刚刚创建的秘密码 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN #国家名称 State or Province Name (full name) []:JiangSu #省 Locality Name (eg, city) [Default City]:NanJing #市 Organization Name (eg, company) [Default Company Ltd]:Dwing #公司 Organizational Unit Name (eg, section) []:Tech #部门 Common Name (eg, your name or your server's hostname) []:*.generalstorage.com #注意,此处应当填写你要部署的域名,如果是单个则直接添加即可,如果不确定,使用*,表示可以对所有generalstorage.com的子域名做认证 Email Address []:admin@generalstorage.com #以域名结尾即可 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: #是否设置密码,可以不写直接回车 An optional company name []: #其他公司名称 可不写
4、创建不需要输入密码的RSA证书,否则每次reload、restart都需要输入密码
[root@localhost ssl]# openssl rsa -in nginx.key -out nginx_nopass.key Enter pass phrase for nginx.key: #之前RSA秘钥创建时的密码 writing RSA key
5、签发证书(由于是测试自己签发,实际应该将自己生成的csr文件提交给SSL认证机构认证)
[root@localhost ssl]# openssl x509 -req -days 3650 -in nginx.csr -signkey nginx.key -out nginx.crt Signature ok subject=/C=CN/ST=JiangSu/L=NanJing/O=Dwing/OU=Tech/CN=*.generalstorage.com/emailAddress=admin@generalstorage.com Getting Private key Enter pass phrase for nginx.key: #RSA创建时的密码
server { listen 80 default_server; listen [::]:80 default_server; server_name test.generalstorage.com; include /etc/nginx/default.d/*.conf; return 301 https://$server_name$request_uri; #在80监听端口 配置跳转 } server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name test.generalstorage.com; client_max_body_size 20M; charset utf-8; ssl_certificate "/etc/nginx/ssl/nginx.crt"; # ssl_certificate_key "/etc/nginx/ssl/nginx_nopass.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location /{ 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_pass http://minio_server; } }
启动服务
[root@localhost nginx]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@localhost nginx]# systemctl restart nginx
本地hosts绑定域名
192.168.3.17 test.generalstorage.com
浏览器中输入:https://test.generalstorage.com/
输入账号/密码:admin/admin123
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。