minio分布式对象存储

介绍

Minio的冗余

(纠删码可以在丢失一半-1的盘的情况下,仍可以保证数据安全)

采用纠删码来防范多个节点宕机和位衰减。

分布式至少需要4个节点(4台服务器),使用分布式 Minio 就自动引入了纠删码功能。

MinIO存储机制

  1. 概念

    硬盘(Drive)
    即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。

    组( Set )
    即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。

    桶(Bucket)
    文件对象存储的逻辑位置,对于客户端而言,就相当于一个存放文件的顶层文件夹。

  2. 纠删码EC

    使用 highwayhash 来处理数据损坏

  3. 存储形式

    文件对象上传到 MinIO ,会在对应的数据存储磁盘中,前者是编码数据块及检验块,后者是元数据文件。 #如有4个磁盘,当文件上传后,会有2个编码数据块,2个检验块,分别存储在4个磁盘中。
    minio分布式对象存储_第1张图片

部署

环境准备

名称 IP地址 应用
minio01 192.168.66.61 Minio、nginx、keepalived
minio02 192.168.66.62 Minio、nginx、keepalived
minio03 192.168.66.63 Minio
minio04 192.168.66.64 minio
minio05 192.168.66.65 minio
VIP 192.168.66.66

基础环境

  1. 安装常用工具

    yum -y install bash-completion  bash-completion-extras  vim  net-tools.x86_64  yum-utils lsof unzip zip
    
  2. 关闭selinux

    setenforce 0
    vim /etc/selinux/config
    SELINUX=disabled
    getenforce
    
  3. 优化文件打开数

    vim /etc/security/limits.conf
    *       soft    nofile  655360
    *       hard    nofile  655360
    *       soft    nproc  131072
    *       hard    nproc  131072
    *       soft    core    unlimited
    *       hard    core    unlimited
    root    soft    nofile  655360
    root    hard    nofile  655360
    root    soft    core    unlimited
    

    优化系统参数

    vi /etc/sysctl.conf
    # see details in https://help.aliyun.com/knowledge_detail/39428.html
    # see details in https://help.aliyun.com/knowledge_detail/41334.html
    #仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。
    vm.swappiness = 0
    
    #单个进程可分配的最大文件数
    fs.nr_open=2097152
    
    #系统最大文件句柄数
    #计算grep -r MemTotal /proc/meminfo | awk  '{printf("%d",$2/10)}'
    fs.file-max=1048576
    
    #backlog 设置
    net.core.somaxconn=32768
    net.ipv4.tcp_max_syn_backlog=16384
    net.core.netdev_max_backlog=16384
    
    #TCP Socket 读写 Buffer 设置
    net.core.rmem_default=262144
    net.core.wmem_default=262144
    net.core.rmem_max=16777216
    net.core.wmem_max=16777216
    net.core.optmem_max=16777216
    net.ipv4.neigh.default.gc_stale_time=120
    
    #TIME-WAIT Socket 最大数量、回收与重用设置
    net.ipv4.tcp_max_tw_buckets=1048576
    net.ipv4.tcp_tw_reuse=1
    
    # FIN-WAIT-2 Socket 超时设置
    #net.ipv4.tcp_fin_timeout=30
    
    #解决大量state=TIME_WAIT问题
    net.ipv4.tcp_tw_recycle=0
    net.ipv4.tcp_timestamps=0
    net.ipv4.conf.all.accept_redirects=0
    #net.ipv4.ip_local_port_range = 1024 65000 
    
    #TCP 连接追踪设置
    net.nf_conntrack_max=1000000
    net.netfilter.nf_conntrack_max=1000000
    net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
    
    #开启动网络转发功能
    net.ipv4.ip_forward = 1 
    
    #支持网桥过滤器
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    
    sysctl -p
    
  4. 指定时间

    yum -y install chrony
    systemctl restart chronyd
    date
    

安装环境

Minio安装

  1. 创建相关文件并上次包/data/minio/run/minio

    mkdir -p /data/minio/run
    mkdir -p /data/minio/etc/minio
    mkdir -p /data/minio/data1
    mkdir -p /data/minio/data2
    chmod 777 /data/minio/run/minio
    
  2. 编写集群启动脚本

    vim /data/minio/run/run.sh
    #!/bin/bash
    #用户名
    export MINIO_ACCESS_KEY=admin
    #密码,过于简单,不然minio会启动失败
    export MINIO_SECRET_KEY=mtxx87668438
    
    #–config-dir指定集群配置文件目录,--console-address ":PORT" 选择静态端口
    /data/minio/run/minio server --console-address ":8090" --config-dir /data/minio/etc/minio \
    http://192.168.66.61:9000/data/minio/data1 http://192.168.66.61:9000/data/minio/data2 \
    http://192.168.66.62:9000/data/minio/data1 http://192.168.66.62:9000/data/minio/data2 \
    http://192.168.66.63:9000/data/minio/data1 http://192.168.66.63:9000/data/minio/data2 \
    http://192.168.66.64:9000/data/minio/data1 http://192.168.66.64:9000/data/minio/data2 \
    http://192.168.66.65:9000/data/minio/data1 http://192.168.66.65:9000/data/minio/data2
    
  3. 配置启动

    vim /usr/lib/systemd/system/minio.service
    [Unit]
    Description=Minio service
    Documentation=https://docs.minio.io/
    
    [Service]
    WorkingDirectory=/data/minio/run
    ExecStart=/data/minio/run/run.sh
    
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
    chmod 777 /data/minio/run/*
    systemctl daemon-reload
    systemctl start minio.service
    systemctl enable minio.service
    systemctl status minio.service
    
  4. mc安装(命令操作)

    cd /usr/bin
    chmod +x /usr/bin/mc
    

安装nginx(负载端)

  1. 安装nginx

    yum install  -y  gcc  gcc-c++  pcre  pcre-devel  openssl-devel  zlib  zlib-devel
    useradd -s /sbin/nologin nginx
    tar -xvf nginx-1.18.0.tar.gz  -C /data/
    mv /data/nginx-1.18.0/ /data/nginx-install
    cd /data/nginx-install
    ./configure --prefix=/data/nginx --user=nginx --group=nginx --with-stream
    	--with-http_stub_status_module --with-http_ssl_module --with-http_v2_module
    make && make install
    
  2. 修改配置文件

    vi /data/nginx/conf/nginx.conf
    http {
        ...
        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;
        ...
        upstream minio {
            server minio1ip:9000;
            server minio2ip:9000;
            server minio3ip:9000;
            server minio4ip:9000;
        }
        server {
            listen       80;
            server_name  localhost 本机ip;
            #允许在标题中使用特殊字符
            ignore_invalid_headers off;
            #允许上传任何大小的文件
            #设置为1000m等值;将文件大小限制为特定值
            client_max_body_size 0;
            #禁用缓冲
            proxy_buffering off;                                   
            location / {
                proxy_pass http://minio;
                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_set_header Connection "";
                chunked_transfer_encoding off;
            }
    
  3. 启动

    vim /usr/lib/systemd/system/nginx.service
    [Unit]
    Description=nginx
    After=network.target
      
    [Service]
    Type=forking
    ExecStart=/data/nginx/sbin/nginx
    ExecReload=/data/nginx/sbin/nginx -s reload
    ExecStop=/data/nginx/sbin/nginx -s quit
    PrivateTmp=true
      
    [Install]
    WantedBy=multi-user.target
    
    
    systemctl daemon-reload
    systemctl start nginx.service
    systemctl enable nginx.service
    systemctl status nginx.service
    

安装keepalive(负载端)

  1. 安装keepalive

    yum install -y keepalived
    
  2. 修改配置文件

    vim /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
       router_id LVS_MINIO
       vrrp_iptables
    }
    
    vrrp_instance VI_1 {
        state MASTER(BACKUP)
        interface ens32
        virtual_router_id 100
        priority 100(备50)
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            VIP/24
        }
    }
    
  3. 启动

    systemctl restart keepalived
    iptables -F
    systemctl status keepalived
    systemctl enable keepalived
    #查看vip
    ip add | grep 66.66
    

访问
http://192.168.66.66/
admin/mtxx87668438

使用操作

服务操作

  1. 添加 MinIO服务

    mc config host add myminio http://ip:9000 用户名 密码
    
  2. 查看MinIO服务

    mc config host list myminio
    
  3. 删除MinIO服务

    mc alias remove myminio
    

存储桶操作

  1. 创建存储桶

    mc mb myminio/testoos1
    
  2. 递归创建桶

    #不需要我们加参数,和普通创建单个桶一样,MinIO 会递归创建。
    mc mb myminio/testoos1/2021/11/21
    
  3. 删除存储桶和对象

    mc rb  myminio/testoos1
    #bucket不为空,可以强制删除 慎用
    mc rb --recursive --force myminio/testoos1
    
  4. 存储桶内文件权限设置(默认可以不用设置)

    #允许的权限包括:none, download, upload, public
    mc policy set download myminio/cxk /*
    
  5. 查看存储桶桶的策略

    mc policy list myminio/cxk 
    

文件对象操作

  1. 拷贝文件对象

    #下载 minio文件到本地
    mc cp myminio/testoos1/6.8.7.jpg  /TempFiles
    #上传本地文件到 minio的桶中
    mc cp  /1027秋.zip  myminio/testoos1
    #复制 minio文件到 minio另一个桶(同一个MinIO服务)
    mc cp myminio/testoos1/1027秋.zip myminio/testoos1
    #复制 minio文件到 minio另一个桶(不同一个MinIO服务)
    mc cp --recursive myminio/testoos1 my2minio/testoos2
    
  2. 列出文件、对象和存储桶

    mc ls myminio
    
  3. 树结构列出

    #列出文件夹
    mc tree --files myminio
    #列出文件
    mc tree --files myminio
    
  4. 查看大小

    mc du myminio/testoos1
    

MinIO服务多租户操作

  1. 对应MinIO服务的用户操作

    #创建MinIO服务下的用户:user1/12345678
    mc admin user add myminio user1 12345678
    #查看MinIO服务下所有用户状态
    mc admin user list myminio
    #启用|禁用 MinIO服务用户
    mc admin user enable|disable myminio user1
    
  2. MinIO服务策略权限操作

    #列出MinIO服务所有权限策略
    mc admin policy list myminio 
    

    MinIO服务添加自定义策略权限操作

    #编辑权限文件
    #权限列表:
    https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/list_amazons3.html
    vim /data/minio/etc/cxk.json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    #全部权限
                    "s3:*"
                    ##########################或者
                    #列出所有存储桶列表权限
                    "s3:ListAllMyBuckets",
                    #列出存储桶内列表权限
                    "s3:ListBucket",
                    #下载存储桶权限
                    "s3:GetBucketLocation",
                    #下载文件权限
                    "s3:GetObject",
                    #上传文件权限
                    "s3:PutObject",
                    #删除文件权限
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::存储桶/*"
                ]
            }
        ]
    }
    

    上传生效权限文件

    mc admin policy add myminio cxk cxk.json
    

    用户授权权限

    mc admin policy set myminio cxk user=cxk
    

喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章; 文章中用到的文件、安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKLittleBrother 进入运维交流群

你可能感兴趣的:(运维,linux,minio,对象存储,分布式存储)