當(dāng)前位置:首頁(yè) > IT技術(shù) > 其他 > 正文

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


Minio 分布式集群部署_nginx

文章目錄

分布式Minio可以讓你將多塊硬盤(pán)(甚至在不同的機(jī)器上)組成一個(gè)對(duì)象存儲(chǔ)服務(wù)。由于硬盤(pán)分布在不同的節(jié)點(diǎn)上,分布式Minio避免了單點(diǎn)故障。

Minio 分布式集群部署_minio_02

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

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

2. 冗余

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

3. 校驗(yàn)

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

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

分布式Minio采用 糾刪碼來(lái)防范多個(gè)節(jié)點(diǎn)宕機(jī)和位衰減 bit rot 。
分布式Minio至少需要4個(gè)硬盤(pán),使用分布式Minio自動(dòng)引入了糾刪碼功能。

2.2. 高可用

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

2.3.一致性

Minio在分布式和單機(jī)模式下,所有讀寫(xiě)操作都嚴(yán)格遵守read-after-write一致性模型

三、運(yùn)行分布式Minio
3.1. 啟動(dòng)方案簡(jiǎn)述

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

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

8個(gè)節(jié)點(diǎn),每節(jié)點(diǎn)1塊盤(pán)
啟動(dòng)分布式Minio實(shí)例,8個(gè)節(jié)點(diǎn),每節(jié)點(diǎn)1塊盤(pán),需要在8個(gè)節(jié)點(diǎn)上都運(yùn)行下面的命令:

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é)點(diǎn),每節(jié)點(diǎn)4塊盤(pán)
啟動(dòng)分布式Minio實(shí)例,4節(jié)點(diǎn),每節(jié)點(diǎn)4塊盤(pán),需要在4個(gè)節(jié)點(diǎn)上都運(yùn)行下面的命令

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. 制作分布式啟動(dòng)腳本

腳本演示:4個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)掛載4塊磁盤(pán)。在實(shí)際的服務(wù)器上依次執(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. 制作偽分布式啟動(dòng)腳本

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

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 分布式集群部署_啟動(dòng)腳本_07


Minio 分布式集群部署_minio_08


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

四、分布式Minio負(fù)載均衡
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服務(wù)
ps -ef |grep nginx
kill
4.4. 重新啟動(dòng)nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4.5. 登錄monio

真實(shí)后端控制臺(tái)端口:50001~5004,
現(xiàn)在訪問(wèn)50000自動(dòng)負(fù)載到50001~5004的任意一個(gè)端口

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

賬號(hào)密碼:admin/12345678

Minio 分布式集群部署_nginx_10


Minio 分布式集群部署_minio_11


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

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >