Minio 分布式集群部署

minio 同时被 2 个专栏收录
4 篇文章 0 订阅
55 篇文章 0 订阅

在这里插入图片描述

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
在这里插入图片描述

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

分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。

2. 冗余

冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如 Hadoop 的文件系统(3个副本),Redis 的集群,MySQL 的主备模式等。

3. 校验

校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。

二、分布式Minio优势
2.1. 数据保护

分布式Minio采用 纠删码来防范多个节点宕机和位衰减 bit rot 。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

2.2. 高可用

单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。

2.3.一致性

Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型

三、运行分布式Minio
3.1. 启动方案简述

启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。
    为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境
    变量。新版本使用MINIO_ROOT_USER&MINIO_ROOT_PASSWORD。
  • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
  • 下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
  • 分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
  • 在Windows下运行分布式Minio处于实验阶段,请悠着点使用。
3.2. 案例说明

8个节点,每节点1块盘
启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令:

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 \
http://192.168.92.107:9000/mnt/data7 http://192.168.92.108:9000/mnt/data8 

在这里插入图片描述

4节点,每节点4块盘
启动分布式Minio实例,4节点,每节点4块盘,需要在4个节点上都运行下面的命令

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 \
http://192.168.92.104:9000/mnt/data3 http://192.168.92.104:9000/mnt/data4

在这里插入图片描述

3.3. 制作分布式启动脚本

脚本演示:4个节点,每个节点挂载4块磁盘。在实际的服务器上依次执行以下命令即可
案例演示:伪分布式模式

vim minio_cluster.sh
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 u+x minio_cluster.sh
./minio_cluster.sh
3.4. 制作伪分布式启动脚本

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

vim minio_cluster.sh
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 u+x minio_cluster.sh
./minio_cluster.sh

在这里插入图片描述

3.5. 登录minio

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、分布式Minio负载均衡
4.1. nginx安装

https://blog.csdn.net/weixin_40816738/article/details/119536779

4.2. 配置nginx
cd /usr/local/nginx/conf/

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 -9  进程号1 进程号2
4.4. 重新启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
4.5. 登录monio

真实后端控制台端口:50001~5004,
现在访问50000自动负载到50001~5004的任意一个端口

http://192.168.92.104:50000/

账号密码:admin/12345678
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值