minio分布式对象存储
介绍
Minio的冗余
(纠删码可以在丢失一半-1的盘的情况下,仍可以保证数据安全)
采用纠删码来防范多个节点宕机和位衰减。
分布式至少需要4个节点(4台服务器),使用分布式 Minio 就自动引入了纠删码功能。
MinIO存储机制
概念
硬盘(Drive)
即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。组( Set )
即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。桶(Bucket)
文件对象存储的逻辑位置,对于客户端而言,就相当于一个存放文件的顶层文件夹。纠删码EC
使用 highwayhash 来处理数据损坏
存储形式
文件对象上传到 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 |
基础环境
安装常用工具
yum -y install bash-completion bash-completion-extras vim net-tools.x86_64 yum-utils lsof unzip zip
关闭selinux
setenforce 0 vim /etc/selinux/config SELINUX=disabled getenforce
优化文件打开数
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
指定时间
yum -y install chrony systemctl restart chronyd date
安装环境
Minio安装
创建相关文件并上次包/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
编写集群启动脚本
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
配置启动
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
mc安装(命令操作)
cd /usr/bin chmod +x /usr/bin/mc
安装nginx(负载端)
安装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
修改配置文件
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;}
启动
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(负载端)
安装keepalive
yum install -y keepalived
修改配置文件
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} }
启动
systemctl restart keepalived iptables -F systemctl status keepalived systemctl enable keepalived #查看vip ip add | grep 66.66
访问
http://192.168.66.66/
admin/mtxx87668438
使用操作
服务操作
添加 MinIO服务
mc config host add myminio http://ip:9000 用户名 密码
查看MinIO服务
mc config host list myminio
删除MinIO服务
mc alias remove myminio
存储桶操作
创建存储桶
mc mb myminio/testoos1
递归创建桶
#不需要我们加参数,和普通创建单个桶一样,MinIO 会递归创建。 mc mb myminio/testoos1/2021/11/21
删除存储桶和对象
mc rb myminio/testoos1 #bucket不为空,可以强制删除 慎用 mc rb --recursive --force myminio/testoos1
存储桶内文件权限设置(默认可以不用设置)
#允许的权限包括:none, download, upload, public mc policy set download myminio/cxk /*
查看存储桶桶的策略
mc policy list myminio/cxk
文件对象操作
拷贝文件对象
#下载 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
列出文件、对象和存储桶
mc ls myminio
树结构列出
#列出文件夹 mc tree --files myminio #列出文件 mc tree --files myminio
查看大小
mc du myminio/testoos1
MinIO服务多租户操作
对应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
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分布式对象存储相关推荐
- Minio分布式对象存储的部署与使用
一.部署 下载Minio直接Github搜索即可,minio/minio: Multi-Cloud Object Storage 1.1 单机部署 单机部署命令,指定静态端口9001. 一般会占用两个 ...
- python分布式对象存储_推荐:一款分布式的对象存储服务
最近公司在准备内部数据上云,并且内部数据库每天的数据量很大,需要采用大数据存储的方案. 方案调研 每个程序技术在实现之前,需要进行开源产品的调研,适合自己产品的技术方案才是最好的. 需求 我们需要处理 ...
- 对象存储搭建文件服务器,搭建分布式对象存储服务MinIO-单点模式
# 搭建分布式对象存储服务 MinIO-单点模式 本文介绍开源的分布式对象存储服务 MinIO 的单点模式的搭建步骤.对象存储系统相比于传统的 NAS 文件系统有很多的优势,访问效率高.方便扩容,支持 ...
- 如何从零起步搭建一个分布式对象存储的架构
早在几年前,云存储还只是存在于业界大佬们口中的一个概念,其应用场景仅供大公司使用.突飞猛进的网络技术似乎在一瞬间就把这个概念普及到千家万户,现在云存储已经是大家司空见惯的一个网络服务了.比如大家用的百 ...
- 分布式对象存储 读书笔记(一) 开始
这是 <分布式对象存储 原理架构及Go语言实现>的学习笔记的第一篇 我们简单的实现一个REST(表述性状态传递,英文:Representational State Transfer)服务接 ...
- 分布式存储--理解分布式文件系统、分布式块存储、分布式对象存储、分布式数据库
1. 单机文件系统 vs 分布式文件系统 传统单机文件系统是计算机中一个非常重要的组件,为存储设备提供一致的访问和管理方式.在不同的操作系统中,文件系统会有一些差别,但也有一些共性几十年都没怎么变化: ...
- MinIO高性能对象存储
一.MinIO高性能对象存储 MinIO是一个高性能对象存储解决方案,它提供了与Amazon Web Services S3兼容的API,并支持所有核心S3功能. MinIO旨在部署任何地方-公共或私 ...
- 分布式对象存储设计原理
保存像图片.音视频这类大文件就是对象存储.不仅有很好的大文件读写性能,还可通过水平扩展实现近乎无限容量,并兼顾服务高可用.数据高可靠. 对象存储"全能",主要因,对象存储是原生分布 ...
- 全栈开发之MinIO分布式文件存储集群
背景 你们项目中关于上传的文件是存储在什么地方的? 我们的项目关于文件存储经过了这么一个演进过程: 静态资源目录:当时前后端不分离,直接在项目的静态资源目录,每次部署前,先备份资源目录,否则就会丢失掉 ...
最新文章
- 美多商城之用户中心(用户基本信息)
- 独家 | 为什么在CV(视觉识别)领域,Transformers正在缓慢逐步替代CNN?
- SAP-注入“AI基因” 打造全球第一款“智能ERP
- C语言 联合体使用技巧之位带操作
- SQL解析在美团的应用
- 桌面上的计算机图标一直被选定,常见电脑桌面图标问题十则
- 【牛客网】——字符串的旋转
- 数据整理—dplyr包(filter系列)
- ToStringBuilder使用
- springboot框架的网上书城系统 java图书销售系统
- c语言中难度程序,c语言自学难度高么
- AT89C51单片机万年历仿真图+代码
- Maven clean基本命令
- 苹果cms模板_苹果cms怎么做seo?
- Android肝帝战纪之Fragmentation的使用(单Activity+多Fragment设计)
- 疯癫的我到了巅峰 -- 我的成人礼
- tiled素材_瓦片地图 Tiled Map
- 利用halcon读取tiff图像,并且获取图像指针
- JavaScript中的every方法
- 有穷自动机 DFA(确定)和NFA(不确定)