(纠删码可以在丢失一半-1的盘的情况下,仍可以保证数据安全)
采用纠删码来防范多个节点宕机和位衰减。
分布式至少需要4个节点(4台服务器),使用分布式 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 = 1
sysctl -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.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
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.target
systemctl 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 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
}
}
启动
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 进入运维交流群