文章目錄
分布式Minio可以讓你將多塊硬盤(甚至在不同的機(jī)器上)組成一個對象存儲服務(wù)。由于硬盤分布在不同的節(jié)點(diǎn)上,分布式Minio避免了單點(diǎn)故障。
一、分布式存儲可靠性常用方法
1. 概述
分布式存儲,很關(guān)鍵的點(diǎn)在于數(shù)據(jù)的可靠性,即保證數(shù)據(jù)的完整,不丟失,不損壞。只有在可靠性實現(xiàn)的前提下,才有了追求一致性、高可用、高性能的基礎(chǔ)。而對于在存儲領(lǐng)域,一般對于保證數(shù)據(jù)可靠性的方法主要有兩類,一類是冗余法,一類是校驗法。
2. 冗余
冗余法最簡單直接,即對存儲的數(shù)據(jù)進(jìn)行副本備份,當(dāng)數(shù)據(jù)出現(xiàn)丟失,損壞,即可使用備份內(nèi)容進(jìn)行恢復(fù),而副本 備份的多少,決定了數(shù)據(jù)可靠性的高低。這其中會有成本的考量,副本數(shù)據(jù)越多,數(shù)據(jù)越可靠,但需要的設(shè)備就越多,成本就越高??煽啃允窃试S丟失其中一份數(shù)據(jù)。當(dāng)前已有很多分布式系統(tǒng)是采用此種方式實現(xiàn),如 Hadoop 的文件系統(tǒng)(3個副本),Redis 的集群,MySQL 的主備模式等。
3. 校驗
校驗法即通過校驗碼的數(shù)學(xué)計算的方式,對出現(xiàn)丟失、損壞的數(shù)據(jù)進(jìn)行校驗、還原。注意,這里有兩個作用,一個校驗,通過對數(shù)據(jù)進(jìn)行校驗和( checksum )進(jìn)行計算,可以檢查數(shù)據(jù)是否完整,有無損壞或更改,在數(shù)據(jù)傳輸和保存時經(jīng)常用到,如 TCP 協(xié)議;二是恢復(fù)還原,通過對數(shù)據(jù)結(jié)合校驗碼,通過數(shù)學(xué)計算,還原丟失或損壞的數(shù)據(jù),可以在保證數(shù)據(jù)可靠的前提下,降低冗余,如單機(jī)硬盤存儲中的 RAID技術(shù),糾刪碼(Erasure Code)技術(shù)等。MinIO 采用的就是糾刪碼技術(shù)。
二、分布式Minio優(yōu)勢
2.1. 數(shù)據(jù)保護(hù)
分布式Minio采用 糾刪碼來防范多個節(jié)點(diǎn)宕機(jī)和位衰減 bit rot 。
分布式Minio至少需要4個硬盤,使用分布式Minio自動引入了糾刪碼功能。
2.2. 高可用
單機(jī)Minio服務(wù)存在單點(diǎn)故障,相反,如果是一個有N塊硬盤的分布式Minio,只要有N/2硬盤在線,你的數(shù)據(jù)就是安全的。不過你需要至少有N/2+1個硬盤來創(chuàng)建新的對象。
例如,一個16節(jié)點(diǎn)的Minio集群,每個節(jié)點(diǎn)16塊硬盤,就算8臺服務(wù)器宕機(jī),這個集群仍然是可讀的,不過你需要9臺服務(wù)器才能寫數(shù)據(jù)。
2.3.一致性
Minio在分布式和單機(jī)模式下,所有讀寫操作都嚴(yán)格遵守read-after-write一致性模型
三、運(yùn)行分布式Minio
3.1. 啟動方案簡述
啟動一個分布式Minio實例,你只需要把硬盤位置做為參數(shù)傳給minio server命令即可,然后,你需要在所有其它節(jié)點(diǎn)運(yùn)行同樣的命令。
- 分布式Minio里所有的節(jié)點(diǎn)需要有同樣的access秘鑰和secret秘鑰,這樣這些節(jié)點(diǎn)才能建立聯(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é)點(diǎn)時間差不能超過3秒,你可以使用NTP 來保證時間一致。
- 在Windows下運(yùn)行分布式Minio處于實驗階段,請悠著點(diǎn)使用。
3.2. 案例說明
8個節(jié)點(diǎn),每節(jié)點(diǎn)1塊盤
啟動分布式Minio實例,8個節(jié)點(diǎn),每節(jié)點(diǎn)1塊盤,需要在8個節(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
4節(jié)點(diǎn),每節(jié)點(diǎn)4塊盤
啟動分布式Minio實例,4節(jié)點(diǎn),每節(jié)點(diǎn)4塊盤,需要在4個節(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
3.3. 制作分布式啟動腳本
腳本演示:4個節(jié)點(diǎn),每個節(jié)點(diǎn)掛載4塊磁盤。在實際的服務(wù)器上依次執(zhí)行以下命令即可
案例演示:偽分布式模式
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 &
3.4. 制作偽分布式啟動腳本
案例演示:偽分布式模式案例
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
3.5. 登錄minio
四、分布式Minio負(fù)載均衡
4.1. nginx安裝
4.2. 配置nginx
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ù)
4.4. 重新啟動nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4.5. 登錄monio
真實后端控制臺端口:50001~5004,
現(xiàn)在訪問50000自動負(fù)載到50001~5004的任意一個端口
??http://192.168.92.104:50000/??
賬號密碼:admin/12345678