minio搭建單機(jī)/集群

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ě)的影響

  1. 只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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容