天天看點

推薦:一款分布式的對象存儲服務

最近公司在準備内部資料上雲,并且内部資料庫每天的資料量很大,需要采用大資料存儲的方案。

方案調研

每個程式技術在實作之前,需要進行開源産品的調研,适合自己産品的技術方案才是最好的。

需求

我們需要處理是圖像資訊,大小在1M左右。

供以後各個項目組用來拉取圖像。

自定義了一個按照标準存儲的一批圖像,這批圖像大小可能在幾百兆或者小到幾兆大小

技術選型

我們選取了兩種技術方案

采用hdfs的叢集存儲的方案,将資料進行流讀取,存儲二進制文;将相關的檔案内容進行整合成一個大檔案存儲到hdfs上。

另外一個技術方案采用的是minio,分布式存儲方案。

今天要給大家介紹的是minio技術方案。

Minio

什麼是Minio

minio 是一款開源的對象存儲服務。可以相容亞馬遜的S3存儲服務接口,非常适合存儲大容量的非結構化資料。

這些非結構化資料包含 圖檔,視訊,日志檔案,備份資料和容器、虛拟機鏡像。

對象檔案大小可以從幾kb到最大5T.

我們可以用來做什麼

企業上我們可以利用其分布式的功能,内部搭建圖檔處理伺服器,檔案存儲伺服器,公司内部的檔案存儲伺服器,這樣就不用限制存儲的大小,也不限制存儲位置。

我們個人可以直接在家庭内部搭建個人的雲盤服務,開心的儲存家裡面的資料檔案,再也不擔心資料丢失的問題了。

怎麼安裝

Minio 分布式對象存儲,在官網提供了很多的技術選擇方案。

推薦:一款分布式的對象存儲服務

根據圖中有5種不同的方案,讓我們進行選擇,可以使用docker 單機部署,也可以采用Docker-compose進行部署僞分布式。 可以使用Docker Swarm 和 k8s 部署分布式架構的選型。

因為是測試階段,是以采用的是僞分布式的建構方式。使用docker-compose 方式進行部署。

部署

docker-compose 部署方案,我們需要進行安裝docker 與docker-compose ,這個在docker文檔中都有,可以參考docker-compose官網。為了友善小夥伴進行學習,簡單流程安裝給大小說下。

安裝docker

centos
yum install docker 
ubuntu 
apt-get install docker.io
           

安裝docker-compose

sudo curl -L"https://github.com/docker/compose/releases/download/1.23.1/ocker-compose-$(uname -s)-$(uname -m)"-o /usr/local/bin/docker-compose
執行下權限操作
sudo chmod +x /usr/local/bin/docker-compose

檢驗下版本是否是正确的
docker-compose --version
docker-compose version 1.23.1, build 1719ceb
           

以上步驟操作成功後,我們就可以安裝minio 來進行實戰演練了。

下載下傳docker-compose.yaml檔案

version: '2'
# starts 4 docker containers running minio server instances. Each
# minio server's web interface will be accessible on the host at port
# 9001 through 9004.
services:
 minio1:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   
- data1:/data  
  ports:
-
 "9001:9000"
  environment:
   MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command: server http://minio1/data http://minio2/datahttp://minio3/data http://minio4/data 
 minio2:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:
  - data2:/data
  ports:   - "9002:9000"
  environment:
   MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command: server http://minio1/data http://minio2/data http://minio3/data http://minio4/data 
 minio3:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z

  volumes:   - data3:/data
  ports:   - "9003:9000"
  environment:
   MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123
  command:
 server http://minio1/data http://minio2/data http://minio3/datahttp://minio4/data 
 minio4:  image:
 minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   - data4:/data  ports:   - "9004:9000"
  environment:
   MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command:
 server http:
//minio1/data http://minio2/data http://minio3/data http://minio4/data 
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.

volumes:  data1:
  data2:
  data3:
  data4:
           

在上面我們需要注意兩點。

volumes 全局:如果我們不進行配置的話,使用的是預設的路徑檔案。

在這裡向找到相關的存儲的檔案内容我們可以使用docker inspect 鏡像id 來檢視。

不配置全局:我們每個鏡像id配置一個路徑那麼我們需要改下檔案配置檔案

version: '2'

# starts 4 docker containers running minio server instances. Each

# minio server's web interface will be accessible on the host at port

# 9001 through 9004.

services:
 minio1:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   - /media/data1:/data:z  
  ports:   - "9001:9000"  environment:
   MINIO_ACCESS_KEY:minio
   MINIO_SECRET_KEY: minio123
  command: server http://minio1/data http://minio2/data http://minio3/data http://minio4/data 
 minio2:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   - /meida/data2:/data:z  ports:-"9002:9000"
  environment: 
  MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command: server http:
//minio1/data http://minio2/data http://minio3/data http://minio4/data 
 minio3:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   -/media/data3:/data:z
  ports:   - "9003:9000"
  environment:  
 MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command:
 server http://minio1/data http://minio2/data http://minio3/datahttp://minio4/data 

 minio4:
  image: minio/minio:RELEASE.2018-12-19T23-46-24Z
  volumes:   - /media/data4:/data:z
  ports:   -"9004:9000"
  environment:

   MINIO_ACCESS_KEY: minio
   MINIO_SECRET_KEY: minio123

  command: server http://minio1/data http://minio2/datahttp://minio3/data http://minio4/data 
           

在這個檔案中,我們主要做了兩項修改:

/media/data1:/data ,我們将data裡面的資料映射到media/data1本地目錄下。

在:/data 後面增加:z ,這個是為了解決權限問題所增加的。

權限問題是這樣的,在我們後面加上:
z 
就是我們就可以啟動成功了
 
ERROR 
Unable
 to initialize posix backend: 
Unable
 to write to the backend.
minio3_1_2ce510efd213 |
       > 
Please 
ensure 
Minio
 binary has write permissions 
for
 the backend
           

啟動

首先拉取鏡像
docker-compose pull
鏡像啟動
docker-compose up
如果沒有出現錯誤,那麼我們程式就啟動成功了  
           

浏覽器檢視

ip:9001

通路,第一次登陸我們需要填寫
ACCESS_KEY 
與
SECRET_KEY 
。這個兩個内容的值在我們配置檔案中已存在,直接檢視配置檔案内容然後填寫
           

浏覽器頁面展示:

推薦:一款分布式的對象存儲服務
推薦:一款分布式的對象存儲服務

出現以上界面就代表我們安裝成功了

使用

進入界面後我們需要先點選右下角的加号,然後建立檔案目錄,我們的圖像是存儲在檔案目錄下的。

推薦:一款分布式的對象存儲服務

結束

這樣我們的一個分布式系統就搭建完成了,怎麼樣是不是很簡單?嘿嘿。

總結

分布式檔案系統存儲,是我們搭建開始的第一步,後面性能問題,存儲壓力都是我們需要面臨的。做好準備工作才能更好的服務我們的産品。

原文釋出時間為:2018-12-20

本文作者: 琪琪

本文來自雲栖社群合作夥伴“ LuckQI”,了解相關資訊可以關注“LuckQI”微信公衆号