minio文件服務(wù)器搭建以及使用
下載官網(wǎng)
wget https://dl.min.io/server/minio/release/linux-amd64/minio
簡介
MinIO 是一個基于Apache License v2.0開源協(xié)議的對象存儲服務(wù)。它兼容亞馬遜S3云存儲服務(wù)接口,非常適合于存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
MinIO是一個非常輕量的服務(wù),可以很簡單的和其他應(yīng)用的結(jié)合,類似 NodeJS, Redis 或者 MySQL。
docker-compose 單機(jī)版安裝
version: '3'
services:
minio:
image: minio/minio
hostname: "minio"
ports:
- 9000:9000 # api 端口
- 9001:9001 # 控制臺端口
environment:
MINIO_ACCESS_KEY: admin #管理后臺用戶名
MINIO_SECRET_KEY: admin123 #管理后臺密碼,最小8個字符
volumes:
- /docker/minio/data:/data #映射當(dāng)前目錄下的data目錄至容器內(nèi)/data目錄
- /docker/minio/config:/root/.minio/ #映射配置目錄
command: server --console-address ':9001' /data #指定容器中的目錄 /data
privileged: true
restart: always
拉取鏡像運(yùn)行容器
docker-compose pull
docker-compose up -d
docker-compose 搭建 minio 分布式對象存儲
部署
官方推薦docker-compose.yaml
:下載地址
vim docker-compose.yml
version: '3.7'
# 所有容器通用的設(shè)置和配置
x-minio-common: &minio-common
image: minio/minio
command: server --console-address ":9001" http://minio{1...4}/data
expose:
- "9000"
# environment:
# MINIO_ROOT_USER: minioadmin
# MINIO_ROOT_PASSWORD: minioadmin
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
# 啟動4個docker容器運(yùn)行minio服務(wù)器實(shí)例
# 使用nginx反向代理9000端口,負(fù)載均衡, 你可以通過9001、9002、9003、9004端口訪問它們的web console
services:
minio1:
<<: *minio-common
hostname: minio1
ports:
- "9001:9001"
volumes:
- ./data/data1:/data
minio2:
<<: *minio-common
hostname: minio2
ports:
- "9002:9001"
volumes:
- ./data/data2:/data
minio3:
<<: *minio-common
hostname: minio3
ports:
- "9003:9001"
volumes:
- ./data/data3:/data
minio4:
<<: *minio-common
hostname: minio4
ports:
- "9004:9001"
volumes:
- ./data/data4:/data
nginx:
image: nginx:1.19.2-alpine
hostname: nginx
volumes:
- ./config/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "9000:9000"
depends_on:
- minio1
- minio2
- minio3
- minio4
接著創(chuàng)建 config目錄
mkdir config
vim config/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
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;
keepalive_timeout 65;
# include /etc/nginx/conf.d/*.conf;
upstream minio {
server minio1:9000;
server minio2:9000;
server minio3:9000;
server minio4:9000;
}
server {
listen 9000;
listen [::]:9000;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
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;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
}
}
執(zhí)行啟動命令,看到各個節(jié)點(diǎn)healthy
狀態(tài)即成功
docker-compose up -d
配置
瀏覽器訪問任意節(jié)點(diǎn)web console
,進(jìn)行簡單配置,配置會自動在節(jié)點(diǎn)間同步
創(chuàng)建桶(Buckets)后,選擇管理(Manage),在總結(jié)(Summary)中可以進(jìn)行訪問策略(Access Policy)配置
選擇菜單設(shè)置(Settings)-配置( Configuration),選擇掃描器(Scanner),配置Max Wait
和Cycle
為1s,可以大大加快節(jié)點(diǎn)間的同步效率
docker部署minio集群-多節(jié)點(diǎn)
準(zhǔn)備3個節(jié)點(diǎn),每個節(jié)點(diǎn)創(chuàng)建2個掛載點(diǎn),由于集群模式下不能使用根磁盤,這里使用docker卷作為掛載點(diǎn)。 3節(jié)點(diǎn)的集群,故障一個節(jié)點(diǎn)時不影響對集群的讀寫操作。
1、所有節(jié)點(diǎn)配置主機(jī)名解析:
cat >> /etc/hosts << EOF
192.168.2.205 minio-1
192.168.2.242 minio-2
192.168.2.241 minio-3
EOF
首先準(zhǔn)備三臺服務(wù)器都下載docker進(jìn)行拉取minio的鏡像
docker pull minio/minio
docker images 查看所有鏡像
docker images |grep minio
部署minio集群,3個節(jié)點(diǎn)每個節(jié)點(diǎn)掛載2個目錄
minio-1節(jié)點(diǎn)執(zhí)行
docker run -d --name minio \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v minio-data1:/data1 \
-v minio-data2:/data2 \
minio/minio server \
--address 192.168.2.242:9000 \
http://minio-{1...3}/data{1...2}
minio-2節(jié)點(diǎn)執(zhí)行
docker run -d --name minio \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v minio-data1:/data1 \
-v minio-data2:/data2 \
minio/minio server \
--address 192.168.2.64:9000 \
http://minio-{1...3}/data{1...2}
minio-3節(jié)點(diǎn)執(zhí)行
docker run -d --name minio \
--restart=always --net=host \
-e MINIO_ACCESS_KEY=minio \
-e MINIO_SECRET_KEY=minio123 \
-v minio-data1:/data1 \
-v minio-data2:/data2 \
minio/minio server \
--address 192.168.2.241:9000 \
http://minio-{1...3}/data{1...2}
說明:docker部署集群模式時必須指定–net=host參數(shù),使用主機(jī)網(wǎng)絡(luò),使用端口映射無法創(chuàng)建集群。
查看容器日志,創(chuàng)建1個zone、1個set以及6個在線的drivers:
[root@minio-1 ~]# docker logs -f minio
......
Waiting for all other servers to be online to format the disks.
Formatting 1st zone, 1 set(s), 6 drives per set.
Waiting for all MinIO sub-systems to be initialized.. lock acquired
Attempting encryption of all config, IAM users and policies on MinIO backend
All MinIO sub-systems initialized successfully
Status: 6 Online, 0 Offline.
Endpoint: http://192.168.92.10:9000
Browser Access:
http://192.168.92.10:9000
Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
瀏覽器訪問minio UI,任意節(jié)點(diǎn)IP:
故障場景:
場景1:模擬一個節(jié)點(diǎn)故障,上傳數(shù)據(jù)驗(yàn)證minio能夠正常讀寫,節(jié)點(diǎn)重新上線后集群自動恢復(fù)正常:
[root@minio-3 ~]# docker stop minio
場景2:模擬一個節(jié)點(diǎn)徹底故障無法恢復(fù),在一個節(jié)點(diǎn)上使用下面清理容器集群命令徹底刪除數(shù)據(jù),只需在準(zhǔn)備一個節(jié)點(diǎn),配置好hosts解析,然后執(zhí)行啟動集群命令即可。
清理minio容器集群
docker stop minio
docker rm minio
docker volume rm minio-data1 minio-data2
配置負(fù)載均衡
使用nginx和keepalived部署負(fù)載均衡,實(shí)際部署需要額外準(zhǔn)備2個節(jié)點(diǎn),這里作為測試復(fù)用minio集群前2個節(jié)點(diǎn)。
在192.168.92.241及192.168.92.242節(jié)點(diǎn)執(zhí)行以下操作: 負(fù)載均衡配置一個就可以了
準(zhǔn)備nginx配置文件,2個節(jié)點(diǎn)執(zhí)行:
mkdir -p /etc/nginx/conf.d
cat > /etc/nginx/conf.d/minio-lb.conf << 'EOF'
upstream minio_server {
server 192.168.2.64:9000;
server 192.168.2.241:9000;
server 192.168.2.242:9000;
}
server {
listen 9001;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
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 Host $http_host;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio_server;
}
}
EOF
部署nginx容器,2個節(jié)點(diǎn)執(zhí)行: 負(fù)載均衡可以只執(zhí)行一個
docker run -d --name nginx \
--restart always -p 9001:9001 \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
nginx
準(zhǔn)備keepalived配置文件,注意修改interface及virtual_ipaddress參數(shù),2個節(jié)點(diǎn)執(zhí)行:
mkdir /etc/keepalived
cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
router_id minio
vrrp_version 2
vrrp_garp_master_delay 1
script_user root
enable_script_security
}
vrrp_script chk_nginx {
script "/bin/sh -c 'curl -I http://127.0.0.1:9001 &> /dev/null'"
timeout 3
interval 1 # check every 1 second
fall 2 # require 2 failures for KO
rise 2 # require 2 successes for OK
}
vrrp_instance lb-minio {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
virtual_ipaddress {
192.168.92.50
}
track_script {
chk_nginx
}
}
EOF
部署keepalived容器,2個節(jié)點(diǎn)執(zhí)行:
docker run -d --name keepalived \
--restart always \
--cap-add=NET_ADMIN \
--net=host \
-v /etc/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
--detach osixia/keepalived --copy-service
查看創(chuàng)建的vip
[root@minio-1 ~]# ip a | grep 192.168.92
inet 192.168.92.10/24 brd 192.168.92.255 scope global noprefixroute ens33
inet 192.168.92.50/32 scope global ens33
停止vip所在節(jié)點(diǎn)nginx容器模擬負(fù)載均衡故障,驗(yàn)證vip轉(zhuǎn)移
docker stop nginx
查看keepalived日志
[root@minio-1 ~]# docker logs -f keepalived
......
Tue Dec 22 01:22:06 2020: Script `chk_nginx` now returning 7
Tue Dec 22 01:22:09 2020: VRRP_Script(chk_nginx) failed (exited with status 7)
Tue Dec 22 01:22:09 2020: (lb-minio) Entering FAULT STATE
Tue Dec 22 01:22:09 2020: (lb-minio) sent 0 priority
Tue Dec 22 01:22:09 2020: (lb-minio) removing VIPs.
vip自動遷移至節(jié)點(diǎn)2
[root@minio-2 ~]# ip a | grep 192.168.92
inet 192.168.92.11/24 brd 192.168.92.255 scope global noprefixroute ens33
inet 192.168.92.50/32 scope global ens33
瀏覽器訪問minio UI,使用vip地址和9001端口:
(二) Minio環(huán)境搭建
2.1 單機(jī)部署
minio server的standalone模式,即要管理的磁盤都在host本地。在standalone模式下,還可以分為non-erasure code mode和erasure code mode。
non-erasure code mode
在此啟動模式下,對于每一份對象數(shù)據(jù),minio直接在data下面存儲這份數(shù)據(jù),不會建立副本,也不會
啟用糾刪碼機(jī)制。因此,這種模式無論是服務(wù)實(shí)例還是磁盤都是“單點(diǎn)”,無任何高可用保障,磁盤損壞 就表示數(shù)據(jù)丟失
erasure code mode
此模式為minio server實(shí)例傳入多個本地磁盤參數(shù)。一旦遇到多于一個磁盤參數(shù),minio server會自動 啟用erasure code mode。erasure code對磁盤的個數(shù)是有要求的,如不滿足要求,實(shí)例啟動將失 敗。 erasure code啟用后,要求傳給minio server的endpoint(standalone模式下,即本地磁盤上的目 錄)至少為4個。
2.2 基于debian10部署
2.2.1 下載Minio
#也可以使用命令下載 這里我使用官網(wǎng)下載(命令僅供參考)
wget -q http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
2.2.2 創(chuàng)建目錄
#創(chuàng)建文件夾
sudo mkdir /usr/local/minio
2.2.3 將下載的Minio復(fù)制到創(chuàng)建的文件夾中
#復(fù)制文件
cp minio /usr/local/minio
#使下載的Minio文件為可執(zhí)行文件
chmod +x minio
2.2.4 創(chuàng)建文件存放目錄
#切換目錄
cd /usr/local
#創(chuàng)建文件存放目錄
sudo mkdir data
2.2.5 啟動Minio
#進(jìn)入安裝目錄
cd /usr/local/minio
#修改Minio的初始賬號密碼(也可以不修改)
#初始賬號:minioadmin
#初始密碼:minioadmin
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=12345678 #注意密碼至少八位
#啟動Minio (需要進(jìn)入minio存放目錄下)
#50000 固定端口號 否則每次啟動Minio會隨機(jī)生成一個不一樣的端口(控制臺會有打印信息)
#/usr/local/java/etc 指定文件存放目錄
./minio server --console-address ":50000" /usr/local/data
nohup ./minio server --console-address ":50000" /usr/local/data & 放在后臺
#在瀏覽器輸入 http://Ip:50000 成功打開頁面可以登錄說明安裝成功
訪問測試—登陸成功
小米控制臺
systemctl方式啟動minio
安裝下載
# mkdir /usr/local/minio/
# cd /usr/local/minio/
# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# chmod +x /usr/local/minio/minio
創(chuàng)建相關(guān)目錄
# mkdir -p /home/minio/data
創(chuàng)建用戶組還有權(quán)限
# groupadd minio
# useradd -r -g minio minio
# chown -R minio:minio /home/minio/
編輯minio配置文件
# vim /home/minio/minio.conf
root@debian:/home/minio# pwd
/home/minio
內(nèi)容如下
MINIO_VOLUMES="/home/minio/data"
MINIO_ACCESS_KEY="admin"
MINIO_SECRET_KEY="admin123"
編輯systemctl方式啟動
# vim /etc/systemd/system/minio.service
內(nèi)容如下
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/minio/minio
[Service]
# User and group
User=minio
Group=minio
EnvironmentFile=/home/minio/minio.conf
ExecStart=/usr/local/minio/minio server $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
啟動
# systemctl daemon-reload
# systemctl enable minio.service
# systemctl start minio.service
# systemctl status minio.service
查看結(jié)果
netstat -lntp | grep minio
tcp6 0 0 :::9000 :::* LISTEN 5960/minio
tcp6 0 0 :::35993 :::* LISTEN 5960/minio
訪問
minio文件服務(wù)器基本使用
登陸賬號
開始上傳
創(chuàng)建存儲桶
在上傳之前,提示我們需要先創(chuàng)建一個上傳的文件夾(存儲桶)
名稱自定義
?
嘗試上傳文件,或者其他東西
上傳成功
添加訪問規(guī)則
默認(rèn)配置下,訪問存儲桶是需要請求授權(quán)的。但是在實(shí)際場景下,我們往往希望允許直接訪問,此時就需要添加一條 readonly 或readwrite訪問規(guī)則;或者直接在[Access Policy]直接設(shè)置public(不安全)
① 點(diǎn)擊右上角的 [Manage] 設(shè)置圖標(biāo),然后選擇 [Access Rules] 菜單。
② 點(diǎn)擊 [Add Access Rule] 按鈕,添加一條 Prefix 為 /
或者*
,Access 為 readwrite
的規(guī)則。
上傳文件
點(diǎn)擊 [Upload] 按鈕,點(diǎn)擊 [Upload File] 選項(xiàng),選擇一個文件上傳
訪問文件
文件的訪問地址的格式為 <http://127.0.0.1:9000/{bucket}/{name}>
,注意是 9000 端口。比如我的是http://196.196.196.12:9000/bimuyu/577521.png
文章來源:http://www.zghlxwxcb.cn/news/detail-409675.html
img-3zM9TPO9-1660035759394)]
嘗試上傳文件,或者其他東西
[外鏈圖片轉(zhuǎn)存中…(img-i0vSbNnH-1660035759395)]
[外鏈圖片轉(zhuǎn)存中…(img-3I07ZI2E-1660035759396)]
上傳成功
[外鏈圖片轉(zhuǎn)存中…(img-kdjNXAga-1660035759396)]
添加訪問規(guī)則
默認(rèn)配置下,訪問存儲桶是需要請求授權(quán)的。但是在實(shí)際場景下,我們往往希望允許直接訪問,此時就需要添加一條 readonly 或readwrite訪問規(guī)則;或者直接在[Access Policy]直接設(shè)置public(不安全)
① 點(diǎn)擊右上角的 [Manage] 設(shè)置圖標(biāo),然后選擇 [Access Rules] 菜單。
[外鏈圖片轉(zhuǎn)存中…(img-tQ61WNKq-1660035759397)]
② 點(diǎn)擊 [Add Access Rule] 按鈕,添加一條 Prefix 為 /
或者*
,Access 為 readwrite
的規(guī)則。[外鏈圖片轉(zhuǎn)存中…(img-VmPfjQt6-1660035759398)]
上傳文件
點(diǎn)擊 [Upload] 按鈕,點(diǎn)擊 [Upload File] 選項(xiàng),選擇一個文件上傳
[外鏈圖片轉(zhuǎn)存中…(img-hganMFx5-1660035759398)]
訪問文件
文件的訪問地址的格式為 <http://127.0.0.1:9000/{bucket}/{name}>
,注意是 9000 端口。比如我的是http://196.196.196.12:9000/bimuyu/577521.png
文章來源地址http://www.zghlxwxcb.cn/news/detail-409675.html
到了這里,關(guān)于minio文件服務(wù)器-docker docker-compose 搭建部署以及使用大全的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!