最簡單的開源方式饭冬?對象存儲服務(wù)-Minio

對象存儲服務(wù)(Object Storage Service使鹅,OSS)是一種海量、安全昌抠、低成本患朱、高可靠的云存儲服務(wù),適合存放任意類型的文件炊苫。容量和處理能力彈性擴(kuò)展麦乞,多種存儲類型供選擇,全面優(yōu)化存儲成本劝评。

710a2147gy1fpb5qct64pj20hs0by0vh.jpg

對象存儲服務(wù)#

在項(xiàng)目開發(fā)過程中姐直,我們會產(chǎn)生大量的對象數(shù)據(jù),包括:日志文件蒋畜,數(shù)據(jù)庫腳本文件声畏、安裝包,容器鏡像姻成,圖像插龄、視頻等等,我們不僅僅是需要有一個集中的地方來存儲科展,還需要能基于 Web 的方式來訪問它們均牢,以往我們有以下幾種方法來解決:

  • 阿里云、Azure 等云服務(wù)商提供的SaaS 級別的 OSS 服務(wù)
  • 自己搭建 NAS 網(wǎng)絡(luò)存儲通過 Samba 服務(wù)來訪問
  • 自己搭建 FTP 服務(wù)器來存儲
image.png

介紹下其中的Minio方案

Minio#

image.png

Minio是GlusterFS創(chuàng)始人之一Anand Babu Periasamy發(fā)布新的開源項(xiàng)目才睹。Minio兼容Amason的S3分布式對象存儲項(xiàng)目徘跪,采用Golang實(shí)現(xiàn),客戶端支持Java,Python,Javacript, Golang語言琅攘。

Minio是建立在云原生的基礎(chǔ)上垮庐;有分布式和共享存儲等功能;旨在多租戶環(huán)境中以可持續(xù)的方式進(jìn)行擴(kuò)展的對象存儲服務(wù)坞琴。它最適合存儲非結(jié)構(gòu)化數(shù)據(jù)哨查,如:照片、視頻剧辐、日志文件寒亥、容器/虛擬機(jī)/映像等邮府,單次存儲對象的大小最大可達(dá)5TB

參考#

Minio 架構(gòu)#

image.png

左邊是 MINIO 集群的示意圖,整個集群是由多個角色完全相同的節(jié)點(diǎn)所組成的溉奕。因?yàn)闆]有特殊的節(jié)點(diǎn)褂傀,所以任何節(jié)點(diǎn)宕機(jī)都不會影響整個集群節(jié)點(diǎn)之間的通信。通過 rest 跟 RPC 去通信的腐宋,主要是實(shí)現(xiàn)分布式的鎖跟文件的一些操作

右邊這張圖是單個節(jié)點(diǎn)的示意圖紊服,每個節(jié)點(diǎn)都單獨(dú)對外提供兼容 S3 的服務(wù)

為什么要用 Minio#

  • Minio 有良好的存儲機(jī)制
  • Minio 有很好糾刪碼的算法與擦除編碼算法
  • 擁有RS code 編碼數(shù)據(jù)恢復(fù)原理
  • 公司做強(qiáng)做大時,數(shù)據(jù)的擁有重要性胸竞,對數(shù)據(jù)治理與大數(shù)據(jù)分析做準(zhǔn)備欺嗤。
  • 搭建自己的一套文件系統(tǒng)服務(wù),對文件數(shù)據(jù)進(jìn)行安全保護(hù)。
  • 擁有自己的平臺卫枝,不限于其他方限制煎饼。

存儲機(jī)制#

Minio使用糾刪碼erasure code和校驗(yàn)和checksum來保護(hù)數(shù)據(jù)免受硬件故障和無聲數(shù)據(jù)損壞。 即便丟失一半數(shù)量(N/2)的硬盤校赤,仍然可以恢復(fù)數(shù)據(jù)吆玖。

糾刪碼#

糾刪碼是一種恢復(fù)丟失和損壞數(shù)據(jù)的數(shù)學(xué)算法,目前马篮,糾刪碼技術(shù)在分布式存儲系統(tǒng)中的應(yīng)用主要有三類沾乘,陣列糾刪碼(Array Code: RAID5、RAID6 等)浑测、RS(Reed-Solomon)里德-所羅門類糾刪碼和 LDPC(LowDensity Parity Check Code)低密度奇偶校驗(yàn)糾刪碼翅阵。Erasure Code 是一種編碼技術(shù),它可以將 n 份原始數(shù)據(jù)迁央,增加 m 份數(shù)據(jù)掷匠,并能通過 n+m 份中的任意 n 份數(shù)據(jù),還原為原始數(shù)據(jù)岖圈。即如果有任意小于等于 m 份的數(shù)據(jù)失效讹语,仍然能通過剩下的數(shù)據(jù)還原出來

MinIO概念#

如下圖,每一行是一個機(jī)器節(jié)點(diǎn)蜂科,這里有32個集群顽决,每個節(jié)點(diǎn)里有一個小方塊,我們稱之為Drive崇摄,Drive可簡單地理解為磁盤擎值。一個節(jié)點(diǎn)有32個Drive,相當(dāng)于32個磁盤逐抑。

Set是一組Drive的集合,所有紅色標(biāo)識的Drive組成了一個Set屹蚊。

image.png
  • 一個對象存儲在一個Set上; 一個集群劃分為多個Set
  • 一個Set包含的Drive數(shù)量是固定的, 默認(rèn)由系統(tǒng)根據(jù)集群規(guī)模自動計算得出 MINIO_ERASURE_SET_DRIVE_COUNT
  • 一個SET中的Drive盡可能分布在不同的節(jié)點(diǎn)上

部署#

Minio 提供了兩種部署方式:單機(jī)部署和分布式厕氨,兩種部署方式都非常簡單进每,其中分布式部署還提供了糾刪碼功能來降低數(shù)據(jù)丟失的風(fēng)險

單機(jī)部署:#

wgethttps://dl.min.io/server/minio/release/linux-amd64/miniochmod +x minio ./minio server /data`` #``若``/data``目錄不存在,要新建一個

Docker 部署Minio#

mkdir /data/minio-data&&mkdir /data/minio-config # 創(chuàng)建一個數(shù)據(jù)存儲目錄
docker run -p 9000:9000 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123456" \
-v /data/minio-data:/data \
-v /data/minio-config:/root/.minio \
minio/minio server /data

http://localhost:9000/ 即可登陸Minio 的管理界面

image.png

分布式Minio#

image.png

單機(jī)Minio服務(wù)存在單點(diǎn)故障命斧,相反田晚,如果是一個有 m 臺服務(wù)器, n 塊硬盤的分布式Minio,只要有 m/2 臺服務(wù)器或者 m*n/2 及更多硬盤在線国葬,你的數(shù)據(jù)就是安全的贤徒。

例如,一個16節(jié)點(diǎn)的Minio集群汇四,每個節(jié)點(diǎn)200塊硬盤接奈,就算8臺服務(wù)器宕機(jī),即大概有1600塊硬盤通孽,這個集群仍然是可讀的序宦,不過你需要9臺服務(wù)器在線才能寫數(shù)據(jù)。

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio serverhttp://host{1...n}/export{1...m}http://host{1...o}/export{1...m}

當(dāng)然如果我們只有一臺機(jī)器背苦,但是想用糾刪碼的功能互捌,也可以直接配置使用多個本地盤
minio server /data1 /data2 /data3 ... /data8

Minio配置#

默認(rèn)的配置目錄是 ${HOME}/.minio,你可以使用--config-dir命令行選項(xiàng)重寫之行剂。MinIO server在首次啟動時會生成一個新的config.json秕噪,里面帶有自動生成的訪問憑據(jù)。
minio server --config-dir /etc/minio /data

  • 證書目錄

TLS證書存在${HOME}/.minio/certs目錄下厚宰,你需要將證書放在該目錄下來啟用HTTPS

  • 憑據(jù)

只能通過環(huán)境變量MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 更改MinIO的admin憑據(jù)和root憑據(jù)腌巾。使用這兩個值的組合,MinIO加密存儲在后端的配置

export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=minio13
minio server /data

如何存儲和訪問對象#

將對象數(shù)據(jù)存儲到 Minio 中有以下幾種方式:
? 通過 MINIO CLIENT
? 通過 MINIO SDK 目前支持的語言包括:Go固阁,Java壤躲,Node.js,Python备燃,.NET
? 通過瀏覽器訪問 Web 管理界面碉克,在管理界面中上傳和下載對象
? 如果你有存儲目錄 minio-data 的賬號和訪問權(quán)限,可以直接使用 SCP 命令將數(shù)據(jù)寫入磁盤

MinIO Client (mc)#

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc

MinIO Client (mc)為ls并齐,cat漏麦,cp,mirror况褪,diff撕贞,find等UNIX命令提供了一種替代方案。它支持文件系統(tǒng)和兼容Amazon S3的云存儲服務(wù)(AWS Signature v2和v4)测垛。

命令使用

ls       列出文件和文件夾捏膨。
mb       創(chuàng)建一個存儲桶或一個文件夾。
cat      顯示文件和對象內(nèi)容。
pipe     將一個STDIN重定向到一個對象或者文件或者STDOUT号涯。
share    生成用于共享的URL描睦。
cp       拷貝文件和對象毒返。
mirror   給存儲桶和文件夾做鏡像饿幅。
find     基于參數(shù)查找文件微猖。
diff     對兩個文件夾或者存儲桶比較差異。
rm       刪除文件和對象域蜗。
events   管理對象通知巨双。
watch    監(jiān)聽文件和對象的事件。
policy   管理訪問策略霉祸。
session  為cp命令管理保存的會話筑累。
config   管理mc配置文件。
update   檢查軟件更新脉执。
version  輸出版本信息疼阔。

列出Mino服務(wù)端

image.png

命令行創(chuàng)建bucket

image.png
image.png

通過代碼存儲對象#

// 構(gòu)造訪問對象
var minio = new MinioClient("localhost:9000","accessKey","secretKey");
// 輸出所有的 Buckets 
var rs = minio.ListBucketsAsync();
foreach (varbucket in rs.Result.Buckets)
{
    Console.Out.WriteLine(bucket.Name + " " + bucket.CreationDateDateTime);
}
// 存儲對象
var bucketName = "logs";
var objectName = "logs.zip";
var filePath = "c:\\logs.zip";
var contentType = "application/zip";
minio.PutObjectAsync(bucketName, objectName, filePath, contentType);
// 獲取對象
var find  = minio.GetObjectAsync(bucketName, objectName)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市半夷,隨后出現(xiàn)的幾起案子婆廊,更是在濱河造成了極大的恐慌,老刑警劉巖巫橄,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淘邻,死亡現(xiàn)場離奇詭異,居然都是意外死亡湘换,警方通過查閱死者的電腦和手機(jī)宾舅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彩倚,“玉大人筹我,你說我怎么就攤上這事》耄” “怎么了蔬蕊?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哥谷。 經(jīng)常有香客問我岸夯,道長,這世上最難降的妖魔是什么们妥? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任猜扮,我火速辦了婚禮,結(jié)果婚禮上监婶,老公的妹妹穿的比我還像新娘旅赢。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布鲜漩。 她就那樣靜靜地躺著源譬,像睡著了一般集惋。 火紅的嫁衣襯著肌膚如雪孕似。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天刮刑,我揣著相機(jī)與錄音喉祭,去河邊找鬼。 笑死雷绢,一個胖子當(dāng)著我的面吹牛泛烙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播翘紊,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蔽氨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帆疟?” 一聲冷哼從身側(cè)響起鹉究,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踪宠,沒想到半個月后自赔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柳琢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年绍妨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柬脸。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡他去,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倒堕,到底是詐尸還是另有隱情灾测,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布涩馆,位于F島的核電站行施,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏魂那。R本人自食惡果不足惜蛾号,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一涯雅、第九天 我趴在偏房一處隱蔽的房頂上張望鲜结。 院中可真熱鬧,春花似錦、人聲如沸精刷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怒允。三九已至埂软,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纫事,已是汗流浹背勘畔。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丽惶,地道東北人炫七。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像钾唬,于是被迫代替她去往敵國和親万哪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容