minio分布式集群部署(三)

一、优势

分布式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

⑤完事,成功了,最后一步就是给客户安排免费大保健了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值