天天看點

MinIO 搭建MinIO 搭建快速開始一個單節點的 MinIO使用 TLS 安全通路 MinIO 服務Q&Aend

MinIO 搭建

MinIO 是一個基于 Apache License v2.0 開源協定的對象存儲服務。它相容亞馬遜 S3 雲存儲服務接口,非常适合于存儲大容量非結構化的資料,例如圖檔、視訊、日志檔案、備份資料和容器/虛拟機鏡像等,而一個對象檔案可以是任意大小,從幾 kb 到最大 5T 不等。

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

官方對 Minio 的定義是一個高性能的對象存儲。

Build high performance data infrastructure

for machine learning, analytics and

application data workloads with MinIO 。

Minio 的官方網站是

https://min.io

Minio 的官方文檔是

https://docs.min.io/cn/

GitHub 倉庫位址是:

https://github.com/minio/minio

,目前有 18.8k Stars (2019.11.9)

Minio 的 benchmark 說明:

https://min.io/resources/docs/MinIO-vs-HDFS-MapReduce-performance-comparison.pdf https://min.io/resources/docs/MinIO-throughput-benchmarks-on-NVMe-SSD.pdf https://min.io/resources/docs/Performance-comparison-Starburst-Presto-SQL.pdf https://min.io/resources/docs/MinIO-throughput-benchmarks-on-HDD.pdf https://min.io/resources/docs/Performance-comparison-Apache-Spark.pdf

快速開始一個單節點的 MinIO

MinIO 分為服務端和用戶端,服務端提供一個對象存儲,也提供一個 Web 的管理頁面。用戶端是用來管理、檢視服務端的一個工具。服務端的二進制檔案是

minio

,用戶端的二進制檔案是

mc

使用二進制檔案啟動

首先先下載下傳服務端的二進制檔案,其次準備一個用來存儲的磁盤或者目錄,

下載下傳好以後賦予執行權限,可以使用如下指令快速啟動。

chmod +x minio
./minio server /erdong/data           

啟動後可以通過通路

http://localhost:9000

來通路你的對象存儲。

使用 Docker 啟動

MinIO 需要一個持久卷來存儲配置和應用資料。不過, 如果隻是為了測試一下, 您可以通過簡單地傳遞一個目錄(在下面的示例中為

/erdong/data

)啟動 MinIO 。這個目錄會在容器啟動時在容器的檔案系統中建立,不過所有的資料都會在容器退出時丢失。

要建立具有永久存儲的 MinIO 容器,您需要将本地持久目錄從主機作業系統映射到虛拟配置 ~/.minio 并導出 /data 目錄。 為此,請運作以下指令

docker run -p 9000:9000 --name minio \
  -e "MINIO_ACCESS_KEY=minioadmin" \
  -e "MINIO_SECRET_KEY=minioadminpassword" \
  -v /erdong/minio/data:/data \
  -v /erdong/minio/config:/root/.minio \
  minio/minio server /data           

啟動後,即可通路

上述指令中設定了如下參數:

  • MINIO_ACCESS_KEY 管理者的通路秘鑰
  • MINIO_SECRET_KEY 管理者的秘鑰
  • /erdong/minio/data:/data 挂載持久化資料目錄
  • /erdong/minio/config:/root/.minio 挂載配置檔案
  • server 啟動 Server 模式,除了該模式還有一個 Gateway 模式。
  • /data 指定資料目錄

如果需要指定端口可以使用如下參數

--address ":9000"           

使用 TLS 安全通路 MinIO 服務

接下來我們看看如何在 linux 上配置 MinIO 服務使用 TLS 。

使用 TLS 的前提是先下載下傳好 MinIO Server 。

如果你已經有私鑰和公鑰證書,你需要将他們拷貝到 MinIO 的

$HOME/.minio/certs

檔案夾,私鑰的名字必須是

private.key

,公鑰證書的名字必須是

public.crt

。 MinIO 在 Linux 隻支援使用 PEM 格式的秘鑰和證書,在 Windows 上隻支援 PEM 格式的秘鑰和證書,目前不支援 PFX 證書。

如果這個證書是被證書機構簽發的,

public.crt

應該是伺服器的證書。

Linux 可以使用如下工具來生成證書

  • Let‘s Encrypt
  • generate_cert.go
  • OpenSSL

Windows 可以使用如下工具來生成證書

  • GnuTLS

Minio 也可以配置成連接配接其它服務,不管是 Minio 節點還是像 NATs、Redis 這些。如果這些服務用的不是在已知證書機構注冊的證書,你可以讓 Minio 服務信任這些 CA ,怎麼做呢,将這些證書放到Minio配置路徑下(~/.minio/certs/CAs/ Linux 或者 C:Users<Username>.miniocertsCAs Windows).

如何使用 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"           

其中相關内容可以按照實際情況修改,比如

/C

是國家,中國是 CN ,

/ST

是州或者省,

/L

是市或者區,

/CN

是域名。

秘鑰和證書生成好以後,按照上邊的要求放置在對應的目錄即可。

Q&A

Thanos 在連接配接 MinIO 的時候遇到了一些問題,日志裡有很多錯誤提示,列在下邊供參考。

1. 提示冒号太多

日志報錯如下所示:

level=info ts=2019-11-08T02:43:40.981858805Z caller=main.go:170 msg="Tracing will be disabled"
level=info ts=2019-11-08T02:43:40.982326667Z caller=factory.go:39 msg="loading bucket configuration"
level=error ts=2019-11-08T02:43:40.982682262Z caller=main.go:200 err="store command failed: create bucket client: create S3 client: initialize s3 client: address http://127.0.0.1:9000: too many colons in address"           

日志描述直譯過來就是冒号太多了,原因是在配置檔案中,填寫了 MinIO 提供的 S3 協定的 endpoint 的時候,多填寫了

http://

,導緻提示該錯誤。本意是在内網使用, HTTP 協定就可以了,不需要要開啟 HTTPS ,但是 Thanos 在連接配接 S3 存儲的時候預設是使用 HTTPS 的,不能通過這種方式來使用 HTTP 。

錯誤的配置如下:

type: S3
config:
  bucket: "disk1"
  endpoint: "http://127.0.0.1:9000"           

正确的配置如下:

type: S3
config:
  bucket: "disk1"
  endpoint: "127.0.0.1:9000"           

2. 提示對方沒有使用 HTTPS

日志報錯如下

level=info ts=2019-11-08T02:42:04.366000876Z caller=main.go:170 msg="Tracing will be disabled"
level=info ts=2019-11-08T02:42:04.366417674Z caller=factory.go:39 msg="loading bucket configuration"
level=info ts=2019-11-08T02:42:04.384413714Z caller=cache.go:172 msg="created index cache" maxItemSizeBytes=131072000 maxSizeBytes=262144000 maxItems=math.MaxInt64
level=error ts=2019-11-08T02:42:04.385632149Z caller=main.go:200 err="store command failed: bucket store initial sync: sync block: iter: Get https://127.0.0.1:9000/prometheus-store/?delimiter=%2F&max-keys=1000&prefix=: http: server gave HTTP response to HTTPS client"           

這是 Thanos 連接配接的對象存儲隻提供了 HTTP ,沒有提供 HTTPS,這個時候需要讓對象存儲添加證書,啟用 HTTPS 。

3. 不能夠認證某個域名

日志報錯如下:

level=info ts=2019-11-08T03:06:57.90508837Z caller=main.go:170 msg="Tracing will be disabled"
level=info ts=2019-11-08T03:06:57.905445182Z caller=factory.go:39 msg="loading bucket configuration"
level=info ts=2019-11-08T03:06:57.923283984Z caller=cache.go:172 msg="created index cache" maxItemSizeBytes=131072000 maxSizeBytes=262144000 maxItems=math.MaxInt64
level=error ts=2019-11-08T03:06:57.927125234Z caller=main.go:200 err="store command failed: bucket store initial sync: sync block: iter: Get https://10.23.80.18:9000/prometheus-store/?delimiter=%2F&max-keys=1000&prefix=: x509: cannot validate certificate for minio-erdong.site because it doesn't contain any IP SANs"           

因為 Thanos 連接配接 Minio 的 HTTP 配置裡,有一個

insecure_skip_verify

選項,該選項預設為 false ,需要對域名的證書進行驗證,由于使用了自簽證書,沒有在權威的 CA 機構做認證,是以在連接配接過程中會提示不安全,将值改為 true,跳過這個驗證就可以了。

http_config:
    idle_conn_timeout: 90s
    response_header_timeout: 2m
    insecure_skip_verify: true           

end

繼續閱讀