一、MinIO快速入門
1. MinIO簡介
MinIO 是一個基於Apache License v2.0開源協議的對象存儲服務。它兼容亞馬遜S3雲存儲服務接口,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日志文件、備份數據和容器/虛擬機鏡像等,而一個對象文件可以是任意大小,從幾kb到最大5T不等。
MinIO 是一個基於Apache License MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。
2. CentOS7更換成阿里雲鏡像
https://www.cnblogs.com/lishen2021/p/14680564.html
3. 安裝
3.1 下載
下載:
wget https://dl.min.io/server/minio/release/linux-amd64/minio
3.2 運行測試
修改文件執行權限:
chmod +x minio
運行:
MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin ./minio server /data/minio/standalone
安裝啟動后使用瀏覽器訪問http://ip:port,默認端口為:9000,如果可以訪問,則表示minio已經安裝成功。賬號和密碼分別為:MINIO_ACCESS_KEY、MINIO_SECRET_KEY
4. 配置腳本執行文件
4.1 創建配置執行文件
創建可執行文件 minio.sh
touch minio.sh
添加以下腳本內容:
#!/bin/sh
function start() {
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=2020_minio@admin
nohup /home/minio/minio server /home/minio/data > /home/minio/logs/minio.log 2>&1 &
}
NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
#if [ "start" = $1 ]; then
# if [ 0 -eq $NUM ]; then
# start
# fi
#elif [ "restart" = $1 ]; then
# if [ 0 -ne $NUM ]; then
# kill -9 $ID | start
# else
# start
# fi
#elif [ "stop" = $1 ]; then
# if [ 0 -ne $NUM ]; then
# kill -9 $ID
# fi
#else
# echo "No sush command '$1'"
#fi
case $1 in
"start")
if [ 0 -eq $NUM ]; then
start
fi
;;
"restart")
if [ 0 -ne $NUM ]; then
kill -9 $ID | start
else
start
fi
;;
"stop")
if [ 0 -ne $NUM ]; then
kill -9 $ID
fi
;;
*)
echo "No sush command '$1'"
;;
esac
腳本中使用 if 或 case 都可以
4.2 執行
啟動:
sh minio.sh start
輸出執行信息方式啟動:
sh -x minio.sh start
重啟:
sh minio.sh restart
停止服務:
sh minio.sh stop
二、分布式MinIO快速入門
1. 分布式MinIO快速入門
分布式Minio可以讓你將多塊硬盤(甚至在不同的機器上)組成一個對象存儲服務。由於硬盤分布在不同的節點上,分布式Minio避免了單點故障。
1.1 分布式Minio有什么好處?
在大數據領域,通常的設計理念都是無中心和分布式。Minio分布式模式可以幫助你搭建一個高可用的對象存儲服務,你可以使用這些存儲設備,而不用考慮其真實物理位置。
1.2 數據保護
分布式Minio采用 糾刪碼 來防范多個節點宕機和位衰減bit rot。分布式Minio至少需要4個硬盤,使用分布式Minio自動引入了糾刪碼功能。
1.3 高可用
單機Minio服務存在單點故障,相反,如果是一個有N塊硬盤的分布式Minio,只要有N/2硬盤在線,你的數據就是安全的。不過你需要至少有N/2+1個硬盤來創建新的對象。
例如,一個16節點的Minio集群,每個節點16塊硬盤,就算8台服務器宕機,這個集群仍然是可讀的,不過你需要9台服務器才能寫數據。
注意:只要遵守分布式Minio的限制,你可以組合不同的節點和每個節點幾塊硬盤。比如,你可以使用2個節點,每個節點4塊硬盤,也可以使用4個節點,每個節點兩塊硬盤,諸如此類。
1.4 一致性
Minio在分布式和單機模式下,所有讀寫操作都嚴格遵守read-after-write一致性模型。
2. 配置運行分布式Minio
啟動一個分布式Minio實例,你只需要把硬盤位置做為參數傳給minio server命令即可,然后,你需要在所有其它節點運行同樣的命令。
注意:
1. 分布式Minio里所有的節點需要有同樣的access秘鑰和secret秘鑰,這樣這些節點才能建立聯接。為了實現這個,你需要在執行minio server命令之前,先將access秘鑰和secret秘鑰export成環境變量。
2. 分布式Minio使用的磁盤里必須是干凈的,里面沒有數據。
3. 分布式Minio里的節點時間差不能超過3秒,你可以使用NTP來保證時間一致。
2.1 將access秘鑰和secret秘鑰export成環境變量
注:需要在每個節點上都運行
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
2.2 啟動分布式Minio實例
配置:2個節點,每個節點2塊盤。
執行命令:
./minio server http://192.168.199.140/data/minio/export1 http://192.168.199.140/data/minio/export2 http://192.168.199.141/data/minio/export1 http://192.168.199.141/data/minio/export2
注:需要在兩個節點上都運行
2.3 配置成啟動腳本
2.3.1 創建配置執行文件
創建可執行文件 minio-cluster.sh
touch minio-cluster.sh
添加內容如下:
#!/bin/sh
function start() {
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
# nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
# http://192.168.199.140/data/minio/export2 \
# http://192.168.199.141/data/minio/export1 \
# http://192.168.199.141/data/minio/export2 \
# > /dev/null 2>&1 &
nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
http://192.168.199.140/data/minio/export2 \
http://192.168.199.141/data/minio/export1 \
http://192.168.199.141/data/minio/export2 \
> /opt/minio/minio.log 2>&1 &
}
NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
if [ "start" = $1 ]; then
if [ 0 -eq $NUM ]; then
start
fi
elif [ "restart" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID | start
else
start
fi
elif [ "stop" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID
fi
else
echo "No sush command '$1'"
fi
2.3.2 執行
啟動:
sh minio-cluster.sh
輸出執行信息方式啟動:
sh -x minio-cluster.sh
重啟:
sh minio-cluster.sh restart
停止服務:
sh minio-cluster.sh stop
三、糾刪碼(erasure code)
Minio使用糾刪碼erasure code和校驗和checksum來保護數據免受硬件故障和無聲數據損壞。 即便您丟失一半數量(N/2)的硬盤,您仍然可以恢復數據。
1. 糾刪碼(erasure code)
1.1 什么是糾刪碼erasure code?
糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio采用Reed-Solomon code將對象拆分成N/2數據和N/2 奇偶校驗塊。 這就意味着如果是12塊盤,一個對象會被分成6個數據塊、6個奇偶校驗塊,你可以丟失任意6塊盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的盤中的數據進行恢復,是不是很NB,感興趣的同學請FQgoogle。
1.2 為什么糾刪碼有用?
糾刪碼的工作原理和RAID或者復制不同,像RAID6可以在損失兩塊盤的情況下不丟數據,而Minio糾刪碼可以在丟失一半的盤的情況下,仍可以保證數據安全。 而且Minio糾刪碼是作用在對象級別,可以一次恢復一個對象,而RAID是作用在卷級別,數據恢復時間很長。 Minio對每個對象單獨編碼,存儲服務一經部署,通常情況下是不需要更換硬盤或者修復。Minio糾刪碼的設計目標是為了性能和盡可能的使用硬件加速。
1.3 什么是位衰減bit rot保護?
位衰減又被稱為數據腐化Data Rot、無聲數據損壞Silent Data Corruption,是目前硬盤數據的一種嚴重數據丟失問題。硬盤上的數據可能會神不知鬼不覺就損壞了,也沒有什么錯誤日志。正所謂明槍易躲,暗箭難防,這種背地里犯的錯比硬盤直接咔咔宕了還危險。 不過不用怕,Minio糾刪碼采用了高速 HighwayHash 基於哈希的校驗和來防范位衰減。