存儲非結構化數據之利器-minio

一、minio簡介

Minio 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務接口,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
Minio是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。(引自https://docs.min.io/docs/minio-quickstart-guide.html )

二、minio-server單節點部署

2.1、下載minio

wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod +x minio

2.2、將minio移動到/usr/local/bin目錄

mv minio /usr/local/bin/

2.3、編輯配置文件

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:密鑰,最少八個字符

2.4、配置minio服務

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。

2.5、開機啓動minio服務

systemctl enable minio.service 

2.6 、minio server

使用Access Key與Secret Key登錄Minio。登錄成功後進入如下界面Access Key與Secret Key可由Minio Server隨機生成,也可通過變量來自定義。
USAGE:

minio server [FLAGS] DIR1 [DIR2..]
minio server [FLAGS] DIR{1...64}

DIR:定義文件系統上的目錄,用空格分割每個存儲目錄,也可用“…”來縮寫目錄;構建分佈式minio時,設置爲HTTP(s) URIs.

FLAGS:

  --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     :幫助信息

環境變量設置:

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加密密鑰環名稱。

2.7、啓動minio server

 minio server /data/minio

三、分佈式minio server

3.1、分佈式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快速入門)

3.2、前提條件

• 需要4個節點才能使用分佈式Minio自動引入了糾刪碼功能
• 最少2個節點,最多32個節點
• 分佈式Minio裏所有的節點需要有同樣的access祕鑰和secret祕鑰,這樣這些節點才能建立聯接。爲了實現這個,你需要在執行minio server命令之前,先將access祕鑰和secret祕鑰export成環境變量。
• 分佈式Minio使用的磁盤裏必須是乾淨的,裏面沒有數據。
• 分佈式Minio裏的節點時間差不能超過3秒,你可以使用NTP 來保證時間一致

3.3、修改配置文件

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

3.4、開啓分佈式服務

示例使用了一臺虛擬機,生產環境下每一臺節點都需要單獨部署minio server,配置文件一致,同時開啓minio server

systemctl start minio.service 

3.5、測試

存儲非結構化數據之利器-minio

四、Minio-client

MinIO Client (mc)爲ls,cat,cp,mirror,diff,find等UNIX命令提供了一種替代方案。它支持文件系統和兼容Amazon S3的雲存儲服務(AWS Signature v2和v4)

4.1、安裝

wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/

4.2、使用

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章