目錄javascript
Minio是一個基於Apache License v2.0開源和談的工具存儲服務。它兼容亞馬遜S3雲存儲服務接口,異常符合於存儲大容量非構造化的數據,好比圖片、視頻、日記文獻、備份數據和容器/杜撰機鏡像等,而一個工具文獻可以是任性鉅細,從幾kb到最大5T不等。且Minio十足笨重,可與使用順序繩捆索綁在一齊,類似於NodeJS,Redis和MySQL。
官方文檔地址:https://docs.min.io/cn
對於有需求不能或不使用雲廠商提供的存儲服務,例如阿里雲的oss、七牛雲的對象存儲等,能夠經過自建minio對象存儲集羣的方式css
sdk支持
基於Minio輕量的特色,它獲得相似Java、Python或Go等語言的sdk支持html
調用S3接口,經過Minio使用FS或NFS來操做Object
java
多節點的Minio會根據不一樣的Access_key及Secret_Key來區分不一樣租戶,每一個租戶可操做對應Server獲取Object。Minio Server間能夠經過不一樣的進程模型、容器或是虛擬機來互相隔離。
python
分佈式Minio在無共享架構中根據需求擴展到儘量多的服務器,全部節點須要使用相同的Access_key及Secret_key來登陸。分佈式Minio使用Web負載均衡器或DNS輪循(DNS round-robin),在各服務器之間實現負載均衡。
linux
minio存儲的部署方案在官網有不少,例如在docker-compose,kubernetes,DC/OS等環境下,本文采用的是較穩定的二進制部署方式。nginx
minio二進制文件下載地址: https://dl.minio.io/server/minio/release/linux-amd64/minio
操做系統CentOS 7.6
服務器資源:算法
172.16.1.102
/minio/data1 /minio/data2
本集羣由2臺服務器構成(官方推薦集羣最小4臺服務器),每一個服務器上掛載兩個磁盤目錄,最小數據掛載點爲4個docker
[root@localhost ~]# mkdir -p /minio/data1 [root@localhost ~]# mkdir -p /minio/data2
[root@localhost ~]# mkdir -p /opt/minio
[root@localhost ~]# mkdir -p /etc/minio
[root@localhost ~]# vim /opt/minio/run.sh #!/bin/bash export MINIO_ACCESS_KEY=Minio export MINIO_SECRET_KEY=Test123456 /opt/minio/minio server --config-dir /etc/minio \ http://172.16.1.101/minio/data1 http://172.16.1.101/minio/data2 \ http://172.16.1.102/minio/data1 http://172.16.1.102/minio/data2 \
其中,「MINIO_ACCESS_KEY」爲用戶名,「MINIO_SECRET_KEY」爲密碼,密碼不能設置過於簡單,否則minio會啓動失敗,「–config-dir」指定集羣配置文件目錄,生成複雜用戶名和密碼可經過相似Linux命令
tr -cd '[:alnum:]' </dev/urandom |fold -w64|head -n1
的方式來生成數據庫
[root@localhost ~]# vim /usr/lib/systemd/system/minio.service [Unit] Description=Minio service Documentation=https://docs.minio.io/ [Service] WorkingDirectory=/opt/minio/ ExecStart=/opt/minio/run.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target [root@localhost ~]# chmod +x /usr/lib/systemd/system/minio.service
其中,「WorkingDirectory」爲啓動腳本目錄,「ExecStart」爲指定集羣啓動腳本
將minio二進制文件上傳到/opt/minio目錄下並賦予權限
chmod +x minio
chmod +x /opt/minio/run.sh
systemctl daemon-reload systemctl start minio systemctl enable minio systemctl status minio
啓動後可經過訪問節點:9000,並使用設置的key登陸到控制檯,也可在啓動腳本中加入參數--address "127.0.0.1:9000"
修改端口,即:
#!/bin/bash export MINIO_ACCESS_KEY=Minio export MINIO_SECRET_KEY=Test123456 /opt/minio/minio server --config-dir /etc/minio \ --address "127.0.0.1:9000" \ http://172.16.1.101/minio/data1 http://172.16.1.101/minio/data2 \ http://172.16.1.102/minio/data1 http://172.16.1.102/minio/data2 \
使用nginx配置域名進行訪問,在 Nginx 的配置文件中加入下面的內容:
location / { proxy_set_header Host $http_host; proxy_pass http://localhost:9000; }
使用nginx配置https安全訪問,並根據301規則自動跳轉到https,https證書可自籤、也可申請一個瀏覽器可信的證書,下面的證書屬於瀏覽器可信的,全局配置以下:
worker_processes 1; events { worker_connections 1024; } http { include 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"'; sendfile on; server_tokens off; keepalive_timeout 65; client_max_body_size 50m; access_log /var/log/nginx/nginx.access.log; error_log /var/log/nginx/nginx.error.log; upstream minio_server { server 192.168.10.101:9000; server 192.168.10.102:9000; ip_hash; } server { listen 80; server_name minio.test.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name minio.test.com; if ($host != 'minio.test.com'){ return 403; } ssl_certificate /usr/local/nginx/cert-ssl/minio.test.com.pem; ssl_certificate_key /usr/local/nginx/cert-ssl/minio.test.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://minio_server; proxy_redirect off; 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; } } }
minio控制檯界面是經過Accsss Key和Secret Key登陸的,除了將這對Key用於客戶端,做爲管理員還可能有須要對控制檯訪問作保護,即在用Key登陸的基礎上再加一層。這就如同非X-pack版本的Kibana界面同樣,沒有訪問控制。一樣的,能夠嘗試使用nginx的basic_auth模塊。一番折騰發現是不可行的,對於nginx基礎認證,後端不支持非AWS4-HMAC-SHA256簽名算法,可能出現以下圖所示的返回結果:
所以這個想法不可行,具體如何實現也沒有google到。。。
經過上面配置的域名訪問到minio界面
並經過指定的Access Key及Secret Key登陸到控制檯
控制檯能夠作的操做以下:
文件生成連接,設置連接過時時間
更多內容可查看官網文檔
多租戶的實現可參考: https://blog.csdn.net/dingjs520/article/details/79118305