MinIO對象存儲服務部署及使用

MinIO 是一個基於Apache License v2.0開源協議的對象存儲服務。

它兼容亞馬遜S3雲存儲服務接口,非常適合於存儲大容量非結構化的數據,

例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等,

而一個對象文件可以是任意大小,從幾kb到最大5T不等。

MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。

###在Docker中運行MinIO單點模式:

MinIO自定義Access和Secret密鑰

要覆蓋MinIO的自動生成的密鑰,您可以將Access和Secret密鑰設爲環境變量。 MinIO允許常規字符串作爲Access和Secret密鑰。

docker run -d -p 9090:9000 --name minio1 \

-e "MINIO_ACCESS_KEY=minio" \

-e "MINIO_SECRET_KEY=minio123" \

-v /opt/minio/data:/data \

-v /opt/minio/config:/root/.minio \

minio/minio server /data

啓動和停止容器

啓動容器,你可以使用 docker start 命令。

docker start <container_id>

停止一下正在運行的容器, 使用 docker stop 命令。

docker stop <container_id>

MinIO容器日誌

獲取MinIO日誌,使用 docker logs 命令。

docker logs <container_id>

監控MinioDocker容器

監控MinIO容器使用的資源,使用 docker stats 命令.

docker stats <container_id>

 

###Minio糾刪碼

Minio使用糾刪碼erasure code和校驗和checksum來保護數據免受硬件故障和無聲數據損壞。

即便您丟失一半數量(N/2)的硬盤,您仍然可以恢復數據。

 

什麼是糾刪碼erasure code?

糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio採用Reed-Solomon code將對象拆分成N/2數據和N/2 奇偶校驗塊。

這就意味着如果是12塊盤,一個對象會被分成6個數據塊、6個奇偶校驗塊,你可以丟失任意6塊盤(不管其是存放的數據塊還是奇偶校驗塊),

你仍可以從剩下的盤中的數據進行恢復,是不是很NB,感興趣的同學請翻牆google。

 

爲什麼糾刪碼有用?

糾刪碼的工作原理和RAID或者複製不同,像RAID6可以在損失兩塊盤的情況下不丟數據,而Minio糾刪碼可以在丟失一半的盤的情況下,仍可以保證數據安全。

而且Minio糾刪碼是作用在對象級別,可以一次恢復一個對象,而RAID是作用在卷級別,數據恢復時間很長。 Minio對每個對象單獨編碼,存儲服務一經部署,

通常情況下是不需要更換硬盤或者修復。Minio糾刪碼的設計目標是爲了性能和儘可能的使用硬件加速。

 

什麼是位衰減bit rot保護?

位衰減又被稱爲數據腐化Data Rot、無聲數據損壞Silent Data Corruption,是目前硬盤數據的一種嚴重數據丟失問題。

硬盤上的數據可能會神不知鬼不覺就損壞了,也沒有什麼錯誤日誌。正所謂明槍易躲,暗箭難防,這種背地裏犯的錯比硬盤直接咔咔宕了還危險。

不過不用怕,Minio糾刪碼採用了高速 HighwayHash 基於哈希的校驗和來防範位衰減。

 

Minio糾刪碼

1. 前提條件:

安裝Minio

2. 以糾刪碼模式運行Minio

示例: 使用Minio,在12個盤中啓動Minio服務。

minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8 /data9 /data10 /data11 /data12

示例: 使用Minio Docker鏡像,在8塊盤中啓動Minio服務。

docker run -p 9000:9000 --name minio \

-v /mnt/data1:/data1 \

-v /mnt/data2:/data2 \

-v /mnt/data3:/data3 \

-v /mnt/data4:/data4 \

-v /mnt/data5:/data5 \

-v /mnt/data6:/data6 \

-v /mnt/data7:/data7 \

-v /mnt/data8:/data8 \

minio/minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8

3. 驗證是否設置成功

你可以隨意拔掉硬盤,看Minio是否可以正常讀寫。

 

###分佈式MinIO快速入門 Slack Go Report Card Docker Pulls

分佈式Minio可以讓你將多塊硬盤(甚至在不同的機器上)組成一個對象存儲服務。由於硬盤分佈在不同的節點上,分佈式Minio避免了單點故障。

 

分佈式Minio有什麼好處?

在大數據領域,通常的設計理念都是無中心和分佈式。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服務基於命令行傳入的參數自動切換成單機模式還是分佈式模式。

1. 前提條件

安裝Minio

2. 運行分佈式Minio

啓動一個分佈式Minio實例,你只需要把硬盤位置做爲參數傳給minio server命令即可,然後,你需要在所有其它節點運行同樣的命令。

注意

分佈式Minio裏所有的節點需要有同樣的access祕鑰和secret祕鑰,這樣這些節點才能建立聯接。爲了實現這個,你需要在執行minio server命令之前,

先將access祕鑰和secret祕鑰export成環境變量。

分佈式Minio使用的磁盤裏必須是乾淨的,裏面沒有數據。

下面示例裏的IP僅供示例參考,你需要改成你真實用到的IP和文件夾路徑。

分佈式Minio裏的節點時間差不能超過3秒,你可以使用NTP 來保證時間一致。

在Windows下運行分佈式Minio處於實驗階段,請悠着點使用。

示例1: 啓動分佈式Minio實例,8個節點,每節點1塊盤,需要在8個節點上都運行下面的命令。

GNU/Linux 和 macOS

Copy

export MINIO_ACCESS_KEY=<ACCESS_KEY>

export MINIO_SECRET_KEY=<SECRET_KEY>

minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \

http://192.168.1.13/export3 http://192.168.1.14/export4 \

http://192.168.1.15/export5 http://192.168.1.16/export6 \

http://192.168.1.17/export7 http://192.168.1.18/export8

分佈式Minio,8節點,每個節點一塊盤

示例2: 啓動分佈式Minio實例,4節點,每節點4塊盤,需要在4個節點上都運行下面的命令。

GNU/Linux 和 macOS

 

export MINIO_ACCESS_KEY=<ACCESS_KEY>

export MINIO_SECRET_KEY=<SECRET_KEY>

minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \

http://192.168.1.11/export3 http://192.168.1.11/export4 \

http://192.168.1.12/export1 http://192.168.1.12/export2 \

http://192.168.1.12/export3 http://192.168.1.12/export4 \

http://192.168.1.13/export1 http://192.168.1.13/export2 \

http://192.168.1.13/export3 http://192.168.1.13/export4 \

http://192.168.1.14/export1 http://192.168.1.14/export2 \

http://192.168.1.14/export3 http://192.168.1.14/export4

3. 驗證

驗證是否部署成功,使用瀏覽器訪問Minio服務或者使用 mc。多個節點的存儲容量和就是分佈式Minio的存儲容量。

###使用TLS安全的訪問Minio服務

本文,我們講介紹如何在Linux和Windows上配置Minio服務使用TLS。

1. 前提條件

下載Minio server 這裏

2. 配置已存在的證書

如果你已經有私鑰和公鑰證書,你需要將它們拷貝到Minio的config/certs文件夾,分別取名爲private.key 和 public.crt。

如果這個證書是被證書機構簽發的,public.crt應該是服務器的證書,任何中間體的證書以及CA的根證書的級聯。

3. 生成證書

Linux

Minio在Linux只支持使用PEM格式的key/certificate。

使用 Let's Encrypt

更多信息,請訪問 這裏

使用 generate_cert.go (self-signed certificate)

你需要下載 generate_cert.go,它是一個簡單的go工具,可以生成自簽名的證書,不過大多數情況下用着都是木有問題的。

generate_cert.go 已經提供了帶有DNS和IP條目的SAN證書:

go run generate_cert.go -ca --host "10.10.0.3"

使用 OpenSSL:

生成私鑰:

openssl genrsa -out private.key 2048

生成自簽名證書:

openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj "/C=US/ST=state/L=location/O=organization/CN=domain"

 

4. 安裝第三方CAs

Minio可以配置成連接其它服務,不管是Minio節點還是像NATs、Redis這些。如果這些服務用的不是在已知證書機構註冊的證書,

你可以讓Minio服務信任這些CA,怎麼做呢,將這些證書放到Minio配置路徑下(~/.minio/certs/CAs/ Linux ).

###使用Docker Compose部署MinIO

Docker Compose允許定義和運行單主機,多容器Docker應用程序。

使用Compose,您可以使用Compose文件來配置MinIO服務。 然後,使用單個命令,您可以通過你的配置創建並啓動所有分佈式MinIO實例。

分佈式MinIO實例將部署在同一主機上的多個容器中。 這是建立基於分佈式MinIO的開發,測試和分期環境的好方法。

1. 前提條件

熟悉 Docker Compose.

Docker已經在本機安裝,從這裏下載相關的安裝器。

2. 在Docker Compose上運行分佈式MinIO

在Docker Compose上部署分佈式MinIO,請下載docker-compose.yaml到你的當前工作目錄。Docker Compose會pull MinIO Docker Image,所以你不需要手動去下載MinIO binary。然後運行下面的命令

GNU/Linux and macOS

docker-compose pull

docker-compose up

Windows

docker-compose.exe pull

docker-compose.exe up

現在每個實例都可以訪問,端口從9001到9004,請在瀏覽器中訪問http://127.0.0.1:9001/

 

注意事項

默認情況下Docker Compose file使用的是最新版的MinIO server的Docker鏡像,你可以修改image tag來拉取指定版本的MinIO Docker image.

默認情況下會創建4個minio實例,你可以添加更多的MinIO服務(最多總共16個)到你的MinIO Comose deployment。添加一個服務

複製服務定義並適當地更改新服務的名稱。

更新每個服務中的命令部分。

更新要爲新服務公開的端口號。 另外,請確保分配給新服務的端口尚未使用。

關於分佈式MinIO的更多資料,請訪問這裏.

Docker compose file中的MinIO服務使用的端口是9001到9004,這允許多個服務在主機上運行。

示例:docker-compose.yaml

version: '3.7'

# 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.2019-12-19T22-52-26Z

volumes:

- data1-1:/data1

- data1-2:/data2

ports:

- "9001:9000"

environment:

MINIO_ACCESS_KEY: minio

MINIO_SECRET_KEY: minio123

command: server http://minio{1...4}/data{1...2}

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

interval: 30s

timeout: 20s

retries: 3

 

minio2:

image: minio/minio:RELEASE.2019-12-19T22-52-26Z

volumes:

- data2-1:/data1

- data2-2:/data2

ports:

- "9002:9000"

environment:

MINIO_ACCESS_KEY: minio

MINIO_SECRET_KEY: minio123

command: server http://minio{1...4}/data{1...2}

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

interval: 30s

timeout: 20s

retries: 3

 

minio3:

image: minio/minio:RELEASE.2019-12-19T22-52-26Z

volumes:

- data3-1:/data1

- data3-2:/data2

ports:

- "9003:9000"

environment:

MINIO_ACCESS_KEY: minio

MINIO_SECRET_KEY: minio123

command: server http://minio{1...4}/data{1...2}

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

interval: 30s

timeout: 20s

retries: 3

 

minio4:

image: minio/minio:RELEASE.2019-12-19T22-52-26Z

volumes:

- data4-1:/data1

- data4-2:/data2

ports:

- "9004:9000"

environment:

MINIO_ACCESS_KEY: minio

MINIO_SECRET_KEY: minio123

command: server http://minio{1...4}/data{1...2}

healthcheck:

test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]

interval: 30s

timeout: 20s

retries: 3

 

## By default this config uses default local driver,

## For custom volumes replace with volume driver configuration.

volumes:

data1-1:

data1-2:

data2-1:

data2-2:

data3-1:

data3-2:

data4-1:

data4-2:

 

https://docs.min.io/cn/minio-quickstart-guide.html

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