當前位置:首頁 > IT技術 > 其他 > 正文

Minio 分布式集群部署
2022-09-06 22:58:50


Minio 分布式集群部署_nginx

文章目錄

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

Minio 分布式集群部署_minio_02

一、分布式存儲可靠性常用方法
1. 概述

分布式存儲,很關鍵的點在于數(shù)據(jù)的可靠性,即保證數(shù)據(jù)的完整,不丟失,不損壞。只有在可靠性實現(xiàn)的前提下,才有了追求一致性、高可用、高性能的基礎。而對于在存儲領域,一般對于保證數(shù)據(jù)可靠性的方法主要有兩類,一類是冗余法,一類是校驗法。

2. 冗余

冗余法最簡單直接,即對存儲的數(shù)據(jù)進行副本備份,當數(shù)據(jù)出現(xiàn)丟失,損壞,即可使用備份內容進行恢復,而副本 備份的多少,決定了數(shù)據(jù)可靠性的高低。這其中會有成本的考量,副本數(shù)據(jù)越多,數(shù)據(jù)越可靠,但需要的設備就越多,成本就越高??煽啃允窃试S丟失其中一份數(shù)據(jù)。當前已有很多分布式系統(tǒng)是采用此種方式實現(xiàn),如 Hadoop 的文件系統(tǒng)(3個副本),Redis 的集群,MySQL 的主備模式等。

3. 校驗

校驗法即通過校驗碼的數(shù)學計算的方式,對出現(xiàn)丟失、損壞的數(shù)據(jù)進行校驗、還原。注意,這里有兩個作用,一個校驗,通過對數(shù)據(jù)進行校驗和( checksum )進行計算,可以檢查數(shù)據(jù)是否完整,有無損壞或更改,在數(shù)據(jù)傳輸和保存時經(jīng)常用到,如 TCP 協(xié)議;二是恢復還原,通過對數(shù)據(jù)結合校驗碼,通過數(shù)學計算,還原丟失或損壞的數(shù)據(jù),可以在保證數(shù)據(jù)可靠的前提下,降低冗余,如單機硬盤存儲中的 RAID技術,糾刪碼(Erasure Code)技術等。MinIO 采用的就是糾刪碼技術。

二、分布式Minio優(yōu)勢
2.1. 數(shù)據(jù)保護

分布式Minio采用 糾刪碼來防范多個節(jié)點宕機和位衰減 bit rot 。
分布式Minio至少需要4個硬盤,使用分布式Minio自動引入了糾刪碼功能。

2.2. 高可用

單機Minio服務存在單點故障,相反,如果是一個有N塊硬盤的分布式Minio,只要有N/2硬盤在線,你的數(shù)據(jù)就是安全的。不過你需要至少有N/2+1個硬盤來創(chuàng)建新的對象。
例如,一個16節(jié)點的Minio集群,每個節(jié)點16塊硬盤,就算8臺服務器宕機,這個集群仍然是可讀的,不過你需要9臺服務器才能寫數(shù)據(jù)。

2.3.一致性

Minio在分布式和單機模式下,所有讀寫操作都嚴格遵守read-after-write一致性模型

三、運行分布式Minio
3.1. 啟動方案簡述

啟動一個分布式Minio實例,你只需要把硬盤位置做為參數(shù)傳給minio server命令即可,然后,你需要在所有其它節(jié)點運行同樣的命令。

  • 分布式Minio里所有的節(jié)點需要有同樣的access秘鑰和secret秘鑰,這樣這些節(jié)點才能建立聯(lián)接。
    為了實現(xiàn)這個,你需要在執(zhí)行minio server命令之前,先將access秘鑰和secret秘鑰export成環(huán)境
    變量。新版本使用MINIO_ROOT_USER&MINIO_ROOT_PASSWORD。
  • 分布式Minio使用的磁盤里必須是干凈的,里面沒有數(shù)據(jù)。
  • 下面示例里的IP僅供示例參考,你需要改成你真實用到的IP和文件夾路徑。
  • 分布式Minio里的節(jié)點時間差不能超過3秒,你可以使用NTP 來保證時間一致。
  • 在Windows下運行分布式Minio處于實驗階段,請悠著點使用。
3.2. 案例說明

8個節(jié)點,每節(jié)點1塊盤
啟動分布式Minio實例,8個節(jié)點,每節(jié)點1塊盤,需要在8個節(jié)點上都運行下面的命令:

data MINIO_ROOT_USER=admin
data MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/root

${MINIO_HOME}/minio server --address ":9000" --console-address ":50000"
http://192.168.92.101:9000/mnt/data1 http://192.168.92.102:9000/mnt/data2
http://192.168.92.103:9000/mnt/data3 http://192.168.92.104:9000/mnt/data4
http://192.168.92.105:9000/mnt/data5 http://192.168.92.106:9000/mnt/data6

Minio 分布式集群部署_minio_03

4節(jié)點,每節(jié)點4塊盤
啟動分布式Minio實例,4節(jié)點,每節(jié)點4塊盤,需要在4個節(jié)點上都運行下面的命令

data MINIO_ROOT_USER=admin
data MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/root

${MINIO_HOME}/minio server --address ":9000" --console-address ":50000"
http://192.168.92.101:9000/mnt/data1 http://192.168.92.101:9000/mnt/data2
http://192.168.92.101:9000/mnt/data3 http://192.168.92.101:9000/mnt/data4
http://192.168.92.102:9000/mnt/data1 http://192.168.92.102:9000/mnt/data2
http://192.168.92.102:9000/mnt/data3 http://192.168.92.102:9000/mnt/data4
http://192.168.92.103:9000/mnt/data1 http://192.168.92.103:9000/mnt/data2
http://192.168.92.103:9000/mnt/data3 http://192.168.92.103:9000/mnt/data4
http://192.168.92.104:9000/mnt/data1 http://192.168.92.104:9000/mnt/data2

Minio 分布式集群部署_minio_04

3.3. 制作分布式啟動腳本

腳本演示:4個節(jié)點,每個節(jié)點掛載4塊磁盤。在實際的服務器上依次執(zhí)行以下命令即可
案例演示:偽分布式模式

vim
data MINIO_ROOT_USER=admin
data MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/root

nohup ${MINIO_HOME}/minio server --address ":9000" --console-address ":50000"
http://192.168.92.101:9000/mnt/data1 http://192.168.92.101:9000/mnt/data2
http://192.168.92.101:9000/mnt/data3 http://192.168.92.101:9000/mnt/data4
http://192.168.92.102:9000/mnt/data1 http://192.168.92.102:9000/mnt/data2
http://192.168.92.102:9000/mnt/data3 http://192.168.92.102:9000/mnt/data4
http://192.168.92.103:9000/mnt/data1 http://192.168.92.103:9000/mnt/data2
http://192.168.92.103:9000/mnt/data3 http://192.168.92.103:9000/mnt/data4
http://192.168.92.104:9000/mnt/data1 http://192.168.92.104:9000/mnt/data2
http://192.168.92.104:9000/mnt/data3 http://192.168.92.104:9000/mnt/data4 > ${MINIO_HOME}/minio-9000.log 2>&1 &
chmod
3.4. 制作偽分布式啟動腳本

案例演示:偽分布式模式案例

vim
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/root
MINIO_HOST=192.168.92.104

for i in {01..04}; do
nohup ${MINIO_HOME}/minio server --address ":90${i}" --console-address ":500${i}" http://${MINIO_HOST}:9001/mnt/data01 http://${MINIO_HOST}:9002/mnt/data02 http://${MINIO_HOST}:9003/mnt/data03 http://${MINIO_HOST}:9004/mnt/data04 > ${MINIO_HOME}/minio-90${i}.log 2>&1 &
done
chmod

Minio 分布式集群部署_數(shù)據(jù)_05

3.5. 登錄minio

Minio 分布式集群部署_minio_06


Minio 分布式集群部署_啟動腳本_07


Minio 分布式集群部署_minio_08


Minio 分布式集群部署_數(shù)據(jù)_09

四、分布式Minio負載均衡
4.1. nginx安裝


4.2. 配置nginx
cd
worker_processes  1;
events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

upstream minio {
server 192.168.92.104:9001;
server 192.168.92.104:9002;
server 192.168.92.104:9003;
server 192.168.92.104:9004;
}
upstream console {
ip_hash;
server 192.168.92.104:50001;
server 192.168.92.104:50002;
server 192.168.92.104:50003;
server 192.168.92.104:50004;
}
server {
listen 9000;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
}
server {
listen 50000;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;`在這里插入代碼片`
proxy_pass http://console;
}
}
}
4.3. 停止nginx服務
ps -ef |grep nginx
kill
4.4. 重新啟動nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4.5. 登錄monio

真實后端控制臺端口:50001~5004,
現(xiàn)在訪問50000自動負載到50001~5004的任意一個端口

??http://192.168.92.104:50000/??

賬號密碼:admin/12345678

Minio 分布式集群部署_nginx_10


Minio 分布式集群部署_minio_11


本文摘自 :https://blog.51cto.com/g

開通會員,享受整站包年服務立即開通 >