介绍

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个磁盘中。

部署

环境准备

名称 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 = 1sysctl -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.shRestart=on-failure
    RestartSec=5[Install]
    WantedBy=multi-user.targetchmod 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.targetsystemctl 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 keepalivedglobal_defs {router_id LVS_MINIOvrrp_iptables
    }vrrp_instance VI_1 {state MASTER(BACKUP)interface ens32virtual_router_id 100priority 100(备50)advert_int 1authentication {auth_type PASSauth_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 进入运维交流群

minio分布式对象存储相关推荐

  1. Minio分布式对象存储的部署与使用

    一.部署 下载Minio直接Github搜索即可,minio/minio: Multi-Cloud Object Storage 1.1 单机部署 单机部署命令,指定静态端口9001. 一般会占用两个 ...

  2. python分布式对象存储_推荐:一款分布式的对象存储服务

    最近公司在准备内部数据上云,并且内部数据库每天的数据量很大,需要采用大数据存储的方案. 方案调研 每个程序技术在实现之前,需要进行开源产品的调研,适合自己产品的技术方案才是最好的. 需求 我们需要处理 ...

  3. 对象存储搭建文件服务器,搭建分布式对象存储服务MinIO-单点模式

    # 搭建分布式对象存储服务 MinIO-单点模式 本文介绍开源的分布式对象存储服务 MinIO 的单点模式的搭建步骤.对象存储系统相比于传统的 NAS 文件系统有很多的优势,访问效率高.方便扩容,支持 ...

  4. 如何从零起步搭建一个分布式对象存储的架构

    早在几年前,云存储还只是存在于业界大佬们口中的一个概念,其应用场景仅供大公司使用.突飞猛进的网络技术似乎在一瞬间就把这个概念普及到千家万户,现在云存储已经是大家司空见惯的一个网络服务了.比如大家用的百 ...

  5. 分布式对象存储 读书笔记(一) 开始

    这是 <分布式对象存储 原理架构及Go语言实现>的学习笔记的第一篇 我们简单的实现一个REST(表述性状态传递,英文:Representational State Transfer)服务接 ...

  6. 分布式存储--理解分布式文件系统、分布式块存储、分布式对象存储、分布式数据库

    1. 单机文件系统 vs 分布式文件系统 传统单机文件系统是计算机中一个非常重要的组件,为存储设备提供一致的访问和管理方式.在不同的操作系统中,文件系统会有一些差别,但也有一些共性几十年都没怎么变化: ...

  7. MinIO高性能对象存储

    一.MinIO高性能对象存储 MinIO是一个高性能对象存储解决方案,它提供了与Amazon Web Services S3兼容的API,并支持所有核心S3功能. MinIO旨在部署任何地方-公共或私 ...

  8. 分布式对象存储设计原理

    保存像图片.音视频这类大文件就是对象存储.不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用.数据高可靠. 对象存储"全能",主要因,对象存储是原生分布 ...

  9. 全栈开发之MinIO分布式文件存储集群

    背景 你们项目中关于上传的文件是存储在什么地方的? 我们的项目关于文件存储经过了这么一个演进过程: 静态资源目录:当时前后端不分离,直接在项目的静态资源目录,每次部署前,先备份资源目录,否则就会丢失掉 ...

最新文章

  1. 美多商城之用户中心(用户基本信息)
  2. 独家 | 为什么在CV(视觉识别)领域,Transformers正在缓慢逐步替代CNN?
  3. SAP-注入“AI基因” 打造全球第一款“智能ERP
  4. C语言 联合体使用技巧之位带操作
  5. SQL解析在美团的应用
  6. 桌面上的计算机图标一直被选定,常见电脑桌面图标问题十则
  7. 【牛客网】——字符串的旋转
  8. 数据整理—dplyr包(filter系列)
  9. ToStringBuilder使用
  10. springboot框架的网上书城系统 java图书销售系统
  11. c语言中难度程序,c语言自学难度高么
  12. AT89C51单片机万年历仿真图+代码
  13. Maven clean基本命令
  14. 苹果cms模板_苹果cms怎么做seo?
  15. Android肝帝战纪之Fragmentation的使用(单Activity+多Fragment设计)
  16. 疯癫的我到了巅峰 -- 我的成人礼
  17. tiled素材_瓦片地图 Tiled Map
  18. 利用halcon读取tiff图像,并且获取图像指针
  19. JavaScript中的every方法
  20. 有穷自动机 DFA(确定)和NFA(不确定)

热门文章

  1. C语言——十进制转换为二进制
  2. 高考录取系统的模拟(1)——成绩的模拟生成程序
  3. 校园网组网计算机中心的配置,如何设置校园网连接
  4. 【合作】云计算基础架构【图】
  5. python实现AI抠图
  6. practice是什么意思_practice是什么意思|practice的中文翻译 - 医学词典
  7. 力扣(leetcode)[118. 杨辉三角] 简单
  8. 关于拆项,有理函数积分,留数法
  9. Chrome 76 新特性
  10. GOE:Nintendo Switch™ 对战忍者口香糖动作游戏 『Ninjala』决定于2020年6月25日发售