MinIO說(shuō)明
MinIO 是一個(gè)基于Apache License v2.0開(kāi)源協(xié)議的對(duì)象存儲(chǔ)服務(wù)。它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個(gè)對(duì)象文件可以是任意大小,從幾kb到最大5T不等。
1 單機(jī)版搭建
| 操作系統(tǒng) | 搭建方式 |
|---|---|
| linux | docker容器 |
| linux | 宿主機(jī) |
1.1 安裝
1.1.1基于docker安裝
docker search minio
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data
docker 啟服務(wù)時(shí)指定掛在目錄和登陸的用戶名和密碼
docker run -p 9000:9000 --name minio1
-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
啟服務(wù)之后可通過(guò)http://127.0.0.1:9000訪問(wèn)
輸入賬號(hào)密碼之后頁(yè)面.png創(chuàng)建bucket.png
查看文件在本機(jī)的存儲(chǔ).png
1.1.2基于linux平臺(tái)搭建
| 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
chmod +x minio
./minio server /xiyou/my_minio/data
啟動(dòng)服務(wù).png
打馬處是我的名字,路徑可以自己選擇哈
后臺(tái)運(yùn)行:nohup ./minio server /xiyou/my_minio/data > /xiyou/my_minio/data/minio.log 2>&1 &
可以使用Accesskey和Secretkey作為賬號(hào)和密碼登陸頁(yè)面使用
1.2單機(jī)版數(shù)據(jù)備份與恢復(fù)
將data數(shù)據(jù)目錄拷貝至新服務(wù)器即可重啟服務(wù),恢復(fù)數(shù)據(jù)。
具體實(shí)施如下:
使用兩個(gè)linux服務(wù)器作測(cè)試
node1: 10.211.55.5
node2: 10.211.55.8
步驟1: 在node2上采用linux單機(jī)版啟動(dòng)minio服務(wù)后,創(chuàng)建兩個(gè)bucket,分別為bucket1和bucket2,在bucket中上傳文件;
步驟2: 停止node2上的minio服務(wù);
步驟3: 將node2上的my_minio文件夾整個(gè)拷貝至node1;
scp -r ./my_minio root@10.211.55.5:/xiyou/
步驟4: 在node1重新啟服務(wù)
node1.png
2. 集群搭建(Distributed MinIO)
2.1 集群服務(wù)器配置及啟動(dòng)
既然單機(jī)的minio可以采用異結(jié)點(diǎn)備份的方式恢復(fù)數(shù)據(jù),為什么還要使用Distributed MinIO?
數(shù)據(jù)保護(hù)/高可用/限制/一致性
啟動(dòng)一個(gè)分布式Minio實(shí)例,你只需要把硬盤位置做為參數(shù)傳給minio server命令即可,然后,你需要在所有其它節(jié)點(diǎn)運(yùn)行同樣的命令。
注意
- 分布式Minio里所有的節(jié)點(diǎn)需要有同樣的access秘鑰和secret秘鑰,這樣這些節(jié)點(diǎn)才能建立聯(lián)接。為了實(shí)現(xiàn)這個(gè),你需要在執(zhí)行minio server命令之前,先將access秘鑰和secret秘鑰export成環(huán)境變量。
- 分布式Minio使用的磁盤里必須是干凈的,里面沒(méi)有數(shù)據(jù)。
- 下面示例里的IP僅供示例參考,你需要改成你真實(shí)用到的IP和文件夾路徑。
- 分布式Minio里的節(jié)點(diǎn)時(shí)間差不能超過(guò)3秒,你可以使用NTP 來(lái)保證時(shí)間一致。
- 在Windows下運(yùn)行分布式Minio處于實(shí)驗(yàn)階段,請(qǐng)悠著點(diǎn)使用。
參考: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個(gè)結(jié)點(diǎn)的集群
示例: 啟動(dòng)分布式Minio實(shí)例,4個(gè)節(jié)點(diǎn),每節(jié)點(diǎn)1塊盤
minio集群架構(gòu).jpg
搭建命令:
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 加& 進(jìn)行后臺(tái)啟動(dòng)啟動(dòng)完成.png
可訪問(wèn)任一結(jié)點(diǎn):
http://10.211.55.5:9000
http://10.211.55.8:9000
http://10.211.55.9:9000
http://10.211.55.10:9000
腳本方式啟動(dòng)
1.啟動(dòng)腳本
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.服務(wù)腳本
vim /usr/lib/systemd/system/minio.service
# vim /etc/systemd/system/minio.service #ubuntu下的啟動(dòng)腳本
---------------------------------------------------------------------------------------
[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的啟動(dòng)腳本
# chmod +x /etc/systemd/system/minio.service #ubuntu的啟動(dòng)腳本
#參考minio.service配置: https://github.com/minio/minio-service/blob/master/linux-systemd/minio.service
3.服務(wù)啟動(dòng)
chmod +x /opt/minio/run.sh
systemctl daemon-reload #刷新配置
systemctl enable minio
systemctl start minio
systemctl status minio
啟動(dòng)腳本后,瀏覽器打開(kāi)網(wǎng)址進(jìn)行測(cè)試:
瀏覽器測(cè)試
2.2 集群高可用測(cè)試
單機(jī)Minio服務(wù)存在單點(diǎn)故障,相反,如果是一個(gè)N節(jié)點(diǎn)的分布式Minio,只要有N/2節(jié)點(diǎn)在線,你的數(shù)據(jù)就是安全的。不過(guò)你需要至少有N/2+1個(gè)節(jié)點(diǎn) Quorum 來(lái)創(chuàng)建新的對(duì)象。
例如,一個(gè)8節(jié)點(diǎn)的Minio集群,每個(gè)節(jié)點(diǎn)一塊盤,就算4個(gè)節(jié)點(diǎn)宕機(jī),這個(gè)集群仍然是可讀的,不過(guò)你需要5個(gè)節(jié)點(diǎn)才能寫(xiě)數(shù)據(jù)。
2.2.1 測(cè)試結(jié)點(diǎn)down機(jī)對(duì)集群讀寫(xiě)的影響
只down一個(gè)結(jié)點(diǎn)node1,集群可以正常使用,可讀可寫(xiě)
down掉一個(gè)node的集群可正常訪問(wèn)2. down兩個(gè)結(jié)點(diǎn)node1、node2,集群可讀但不可寫(xiě)
down兩個(gè)結(jié)點(diǎn)集群可讀不可寫(xiě)
3.down三個(gè)結(jié)點(diǎn)node1、node2、node3,集群不能訪問(wèn)
down三個(gè)結(jié)點(diǎn)集群不能訪問(wèn)
2.2.2 模擬磁盤損壞影響
Minio使用糾刪碼erasure code和校驗(yàn)和checksum來(lái)保護(hù)數(shù)據(jù)免受硬件故障和無(wú)聲數(shù)據(jù)損壞。 即便您丟失一半數(shù)量(N/2)的硬盤,您仍然可以恢復(fù)數(shù)據(jù)。
開(kāi)始模擬------上傳一個(gè)文件之后,會(huì)有兩個(gè)文件part.1 xl.json
part.1四個(gè)node結(jié)點(diǎn)的查看會(huì)不同,有亂碼
四個(gè)node結(jié)點(diǎn)的xl.json
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,集群仍然可讀,但是瀏覽器中顯示多了一個(gè)空文件夾testMinio2.txt;
集群中多出一個(gè)空文件夾
5、刪掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part、node1中文件testMinio2.txt的xl.part、node3中文件testMinio2.txt的part1,下載文件出現(xiàn)異常,無(wú)法讀文件;
文件下載異常
2.3 備份恢復(fù)
通過(guò)將數(shù)據(jù)目錄下的數(shù)據(jù)文件拷貝到異節(jié)點(diǎn)對(duì)應(yīng)的數(shù)據(jù)目錄下,再起minio集群,可以實(shí)現(xiàn)數(shù)據(jù)恢復(fù)。
3. nginx配置
3.1 nginx安裝
根據(jù)自己的操作系統(tǒng)選擇合適的安裝方式
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之后就可以啟動(dòng)nginx
systemctl start nginx
#查看下端口監(jiān)聽(tīng)
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; #緩沖區(qū)代理緩沖請(qǐng)求的最大字節(jié)數(shù)
#client_max_body_size 10G; #客戶端最大文件上傳大小為10G
#proxy_buffers 1024 4k;
#proxy_read_timeout 300;
#proxy_next_upstream error timeout http_404;
}
}
}
--------------------------------------------------------------------------------
#location 內(nèi)的注釋的字段,建議可以在查看后根據(jù)需求修改
#可參考 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查看訪問(wèn)
配置hosts
vim /etc/hosts
10.211.55.5 minio.dev.com
哇塞!可以正常訪問(wèn)啦!
域名訪問(wèn)
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 config host add mcminio http://10.211.55.8:9000 minio minio123
mc ls mcminio
./mc mb mcminio/third
通過(guò)mc創(chuàng)建bucket
參考:https://docs.min.io/docs/minio-client-quickstart-guide
其他的mc使用自己去參考官網(wǎng)
5. 那些年我們一起踩過(guò)的坑
5.1 node結(jié)點(diǎn)的ntp時(shí)間設(shè)置
node結(jié)點(diǎn)的ntp時(shí)間設(shè)置,別怪我沒(méi)提醒你
設(shè)置系統(tǒng)時(shí)間為中國(guó)時(shí)區(qū)并啟用NTP同步
yum install ntp //安裝ntp服務(wù)
systemctl enable ntpd //開(kāi)機(jī)啟動(dòng)服務(wù)
systemctl start ntpd //啟動(dòng)服務(wù)
timedatectl set-timezone Asia/Shanghai //更改時(shí)區(qū)
timedatectl set-ntp yes //啟用ntp同步
ntpq -p //同步時(shí)間
參考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 解決網(wǎng)頁(yè)“打轉(zhuǎn)轉(zhuǎn)”問(wèn)題
ifconfig ens4 mtu 1450
這跟系統(tǒng)的MTU設(shè)置有關(guān),默認(rèn)一般會(huì)設(shè)置為1500,有的系統(tǒng)也會(huì)設(shè)置為1450。集群中的MTU值一定要保持一致,如果是有多張網(wǎng)卡的,也可以把多張網(wǎng)卡的MTU值設(shè)置一致。
參考文檔:
https://github.com/minio/minio/blob/master/README_zh_CN.md
https://github.com/minio/minio















