Minio 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務接口,很是適合於存儲大容量非結構化的數據,例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等,而一個對象文件能夠是任意大小,從幾kb到最大5T不等。
Minio是一個很是輕量的服務,能夠很簡單的和其餘應用的結合,相似 NodeJS, Redis 或者 MySQL。(引自https://docs.min.io/docs/minio-quickstart-guide.html )html
wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio
mv minio /usr/local/bin/
cat <<EOT >> /etc/default/minio # Volume to be used for MinIO server. MINIO_VOLUMES="/data/minio/" # Use if you want to run MinIO on a custom port. #MINIO_OPTS="--address :9199" # Access Key of the server. MINIO_ACCESS_KEY=admin # Secret key of the server. MINIO_SECRET_KEY=12345678 EOT
MINIO_VOLUMES:minio server使用的存儲卷,minio要有存儲卷的讀寫權限
MINIO_OPTS:自定義minio server監聽的ip和端口
MINIO_ACCESS_KEY:用戶名,最少三個字符
MINIO_SECRET_KEY:密鑰,最少八個字符linux
curl -O https://raw.githubusercontent.com/minio/minio-service/master/linux-systemd/minio.service mv minio.service /usr/lib/systemd/system/minio.service 編輯minio.service,修改User=root 、Group=root。
systemctl enable minio.service
使用Access Key與Secret Key登陸Minio。登陸成功後進入以下界面Access Key與Secret Key可由Minio Server隨機生成,也可經過變量來自定義。
USAGE:ios
minio server [FLAGS] DIR1 [DIR2..] minio server [FLAGS] DIR{1...64}
DIR:定義文件系統上的目錄,用空格分割每一個存儲目錄,也可用「…」來縮寫目錄;構建分佈式minio時,設置爲HTTP(s) URIs.git
FLAGS:github
--address value :綁定的套接字,默認端口9000 --config-dir value, -C value [DEPRECATED] :老版本遺留的配置文件目錄 (默認: "/root/.minio") --certs-dir value, -S value :certs目錄的路徑. (默認: "/root/.minio/certs") --quiet :禁止打印啓動信息 --anonymous :隱藏日誌中的敏感信息 --json :以json格式輸出服務器日誌和啓動信息。 --help, -h :幫助信息
環境變量設置:docker
ACCESS: MINIO_ACCESS_KEY:自定義用戶名或訪問密鑰,長度至少爲3個字符。 MINIO_SECRET_KEY: 自定義密碼或密鑰,長度至少爲8個字符。 BROWSER: MINIO_BROWSER: 要禁用Web瀏覽器訪問,請將此值設置爲「off」。 CACHE: MINIO_CACHE_DRIVES: 由「;」分隔的已安裝驅動器或目錄的列表. MINIO_CACHE_EXCLUDE:由「;」分隔的緩存排除模式列表。 MINIO_CACHE_EXPIRY: 緩存到期持續時間(天)。 MINIO_CACHE_MAXUSE: 容許的最大緩存使用百分比(0-100)。 DOMAIN: MINIO_DOMAIN: 要啓用虛擬主機請求,請將此值設置爲Minio主機域名。 WORM: MINIO_WORM: 要在服務器中打開Write-Once-Read-Many,請將此值設置爲「on」 BUCKET-DNS: MINIO_DOMAIN: 要啓用存儲桶DNS請求,請將此值設置爲Minio主機域名。 MINIO_PUBLIC_IPS: 要啓用存儲桶DNS請求,請將此值設置爲由「,」分隔的Minio主機公共IP列表。 MINIO_ETCD_ENDPOINTS: 要啓用存儲桶DNS請求,請將此值設置爲由「,」分隔的etcd端點列表。 KMS: MINIO_SSE_VAULT_ENDPOINT: 要將Vault做爲KMS啓用,請將此值設置爲Vault端點。 MINIO_SSE_VAULT_APPROLE_ID: 要將Vault另存爲KMS,請將此值設置爲Vault AppRole ID。 MINIO_SSE_VAULT_APPROLE_SECRET: 要將Vault設置爲KMS,請將此值設置爲Vault AppRole Secret ID。 MINIO_SSE_VAULT_KEY_NAME: 要將Vault另存爲KMS,請將此值設置爲Vault加密密鑰環名稱。
minio server /data/minio
數據保護
分佈式Minio採用 erasure code來防範多個節點宕機和位衰減bit rot。
分佈式Minio至少須要4個節點,使用分佈式Minio自動引入了糾刪碼功能。
高可用
單機Minio服務存在單點故障,相反,若是是一個N節點的分佈式Minio,只要有N/2節點在線,你的數據就是安全的。不過你須要至少有N/2+1個節點 Quorum 來建立新的對象。
例如,一個8節點的Minio集羣,每一個節點一塊盤,就算4個節點宕機,這個集羣仍然是可讀的,不過你須要5個節點才能寫數據。
限制
分佈式Minio單租戶存在最少4個盤最多16個盤的限制(受限於糾刪碼)。這種限制確保了Minio的簡潔,同時仍擁有伸縮性。若是你須要搭建一個多租戶環境,你能夠輕鬆的使用編排工具(Kubernetes)來管理多個Minio實例。
注意,只要遵照分佈式Minio的限制,你能夠組合不一樣的節點和每一個節點幾塊盤。好比,你可使用2個節點,每一個節點4塊盤,也可使用4個節點,每一個節點兩塊盤,諸如此類。
一致性
Minio在分佈式和單機模式下,全部讀寫操做都嚴格遵照read-after-write一致性模型。
(摘自minio官方文檔分佈式minio快速入門)json
• 須要4個節點才能使用分佈式Minio自動引入了糾刪碼功能 • 最少2個節點,最多32個節點 • 分佈式Minio裏全部的節點須要有一樣的access祕鑰和secret祕鑰,這樣這些節點才能創建聯接。爲了實現這個,你須要在執行minio server命令以前,先將access祕鑰和secret祕鑰export成環境變量。 • 分佈式Minio使用的磁盤裏必須是乾淨的,裏面沒有數據。 • 分佈式Minio裏的節點時間差不能超過3秒,你可使用NTP 來保證時間一致
cat <<EOT >> /etc/default/minio # Remote volumes to be used for Minio server. MINIO_VOLUMES=http://192.168.143.130/data/minio_volum1/minio \ http://192.168.143.130/data/minio_volum2/minio \ http://192.168.143.130/data/minio_volum3/minio \ http://192.168.143.130/data/minio_volum4/minio # Use if you want to run Minio on a custom port. #MINIO_OPTS="--address :9199" # Access Key of the server. MINIO_ACCESS_KEY=minioaccesskey # Secret key of the server. MINIO_SECRET_KEY=miniosecretkey EOT
示例使用了一臺虛擬機,生產環境下每一臺節點都須要單獨部署minio server,配置文件一致,同時開啓minio server瀏覽器
systemctl start minio.service
MinIO Client (mc)爲ls,cat,cp,mirror,diff,find等UNIX命令提供了一種替代方案。它支持文件系統和兼容Amazon S3的雲存儲服務(AWS Signature v2和v4)緩存
wget https://dl.minio.io/client/mc/release/linux-amd64/mc chmod +x mc mv mc /usr/local/bin/
mc命令幫助安全
格式:mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...] COMMAND: ls 列出文件和文件夾。 mb 建立一個存儲桶或一個文件夾。 cat 顯示文件和對象內容。 pipe 將一個STDIN重定向到一個對象或者文件或者STDOUT。 share 生成用於共享的URL。 cp 拷貝文件和對象。 mirror 給存儲桶和文件夾作鏡像。 find 基於參數查找文件。 diff 對兩個文件夾或者存儲桶比較差別。 rm 刪除文件和對象。 events 管理對象通知。 watch 監視文件和對象的事件。 policy 管理訪問策略。 session 爲cp命令管理保存的會話。 config 管理mc配置文件。 update 檢查軟件更新。 version 輸出版本信息。 配置文件:/root/.mc/config.json
添加一個雲存儲服務
開啓minio服務 systemctl start minio
從minio服務得到url,minioaccesskey,miniosecretkey
在客戶端鏈接minio服務
mc config host add minio http://192.168.143.131:9000 minioaccesskey miniosecretkey
參考文章
https://github.com/minio/minio-service/tree/master/linux-systemd
https://docs.min.io/cn/minio-docker-quickstart-guide.html