一、优势
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不
同的节点上,分布式Minio避免了单点故障。
分布式存储可靠性常用方法
分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现
的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性
的方法主要有两类,一类是冗余法,一类是校验法。
冗余
冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢
复,而副本备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可
靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是
采用此种方式实现,如Hadoop的文件系统(3个副本),Redis的集群,MySQL的主备模式等。
校验
校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个
作用,一个校验,通过对数据进行校验和(checksum)进行计算,可以检查数据是否完整,有无损坏或
更改,在数据传输和保存时经常用到,如TCP协议;二是恢复还原,通过对数据结合校验码,通过数学
计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的RAID
技术,纠删码(ErasureCode)技术等。MinIO采用的就是纠删码技术。
二、前期准备
服务器:175.178.41.99 、8.129.86.98
端口:9000、9001(都同)
软件目录:
(都同)
授权变可执行文件:
chmod +x minio export MINIO_ROOT_USER=wyy export MINIO_ROOT_PASSWORD=wuyueyang00237 nohup /root/minio/soft/minio server --address ":9000" --console-address ":9001" MinIO Console http://8.129.86.98:9001/data1 >/root/minio/soft/minio-cluster.log 2>&1 & |
|
错了:提示要大于等于4个节点
通过脚本运行伪集群:
minio-cluster.sh: export MINIO_ROOT_USER=wyy export MINIO_ROOT_PASSWORD=wuyueyang00237 MINIO_HOME=/root/minio/soft MINIO_HOST=175.178.41.99 for i in {01..04}; do nohup /root/minio/soft/minio server --address ":90${i}" --console-address ":100${i}" http://${MINIO_HOST}:9001/data1 http://${MINIO_HOST}:9002/data2 http://${MINIO_HOST}:9003/data3 http://${MINIO_HOST}:9004/data4 >${MINIO_HOME}/log/minio-cluster-90${i}.log 2>&1 & done |
又tm错了,全部干掉:
ps -ef |grep minio |grep -v grep | awk '{print $2}'| xargs kill -9
|
sudo chmod 777 minio sudo chmod 777 data01 - data05 |
都不行。。。有点绝望
大概问题就是目录要挂载,每个大小要大于1g,但是验证可行性期间没那么多的机器设备。。
改用docker-compose实现伪集群
①编写配置文件
docker-compose.yaml
version: '3.7' # 所有容器的通用设置和配置 x-minio-common: &minio-common image: minio/minio command: server --console-address ":9001" http://minio{1...4}/data{1...2} expose: - "9000" - "9001" environment: MINIO_ROOT_USER: wyy MINIO_ROOT_PASSWORD: wuyueyang00237 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s #间隔 timeout: 20s #超时 retries: 3 #重试次数 # 启动4个docker容器,运行minio服务器实例。 # 使用nginx反向代理,负载均衡,就可以访问了 # 通过9000端口 services: minio1: <<: *minio-common hostname: minio1 volumes: - ./data1-1:/data1 - ./data1-2:/data2 minio2: <<: *minio-common hostname: minio2 volumes: - ./data2-1:/data1 - ./data2-2:/data2 minio3: <<: *minio-common hostname: minio3 volumes: - ./data3-1:/data1 - ./data3-2:/data2 minio4: <<: *minio-common hostname: minio4 volumes: - ./data4-1:/data1 - ./data4-2:/data2 nginx: image: nginx hostname: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro ports: - "9000:9000" - "9001:9001" depends_on: - minio1 - minio2 - minio3 - minio4 ## 默认情况下,该配置使用默认的本地驱动 ## 对于自定义卷,请使用卷驱动程序配置替换。 volumes: data1-1: data1-2: data2-1: data2-2: data3-1: data3-2: data4-1: data4-2: |
nginx.conf
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 4096; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # include /etc/nginx/conf.d/*.conf; upstream minio { server minio1:9000; server minio2:9000; server minio3:9000; server minio4:9000; } upstream console { ip_hash; server minio1:9001; server minio2:9001; server minio3:9001; server minio4:9001; } server { listen 9000; listen [::]:9000; server_name localhost; # 允许在头文件中使用特殊字符 ignore_invalid_headers off; # 允许任何大小的文件被上传。 # 设置一个值,如1000m; 将文件大小限制为特定值 client_max_body_size 0; # 禁用缓冲 proxy_buffering off; proxy_request_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; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://minio; } } server { listen 9001; listen [::]:9001; server_name localhost; # To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off; proxy_request_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; # This is necessary to pass the correct IP to be hashed real_ip_header X-Real-IP; proxy_connect_timeout 300;
# To support websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";
chunked_transfer_encoding off; proxy_pass http://console; } } } |
②创建挂载目录、上传配置文件,开放端口9000,10001
③运行docker-compose
要在yaml文件的当前目录下运行 # 第一次启动前拉取镜像(可略) docker-compose pull # 后台启动 docker-compose up -d # 集群停止 docker-compose stop # 集群开始 docker-compose start # 集群停止并删除 docker-compose down |
④创建桶cluster上传文件
tree -d du -Th du -a |