minio 官方文档全的一批: https://docs.minio.io/cn/store-mongodb-backups-in-minio.html https://www.moewah.com/archives/2886.html https://www.jianshu.com/p/3e81b87d5b0b 中文文档:https://www.bookstack.cn/read/MinioCookbookZH/67.md 主要特点 (1)数据保护 分布式 Minio 采用纠删码(erasure code)来防范多个节点宕机和位衰减(bit rot)。 分布式 Minio 至少需要 4 个节点,使用分布式 Minio 就自动引入了纠删码功能。 (2)高可用 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。 例如,一个 8 节点的 Minio 集群,每个节点一块盘,就算 4 个节点宕机,这个集群仍然是可读的,不过你需要 5 个节点才能写数据。 (3)限制 分布式 Minio 单租户存在最少 4 个盘最多 16 个盘的限制(受限于纠删码)。这种限制确保了 Minio 的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。 注意,只要遵守分布式 Minio 的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用 2 个节点,每个节点 4 块盘,也可以使用 4 个节点,每个节点两块盘,诸如此类。 (4)一致性 Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。 再次强调:注意:********* 1.分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。 2.分布式Minio使用的磁盘里必须是干净的,里面没有数据。 3.分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。 4.集群服务意外停掉后,重启文件自动会同步 5.双挂载磁盘,每个磁盘都有备份 6.高可用,单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio ,只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象。 7.重要:磁盘要么全是系统磁盘,要么全是挂载磁盘,如果两个服务采用系统盘,两个采用挂载盘,会报错。 参考:https://www.jianshu.com/p/52ca764d1efb
操作步骤: 1.下载启动服务端 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password 2.启动命令 (1)单主机单磁盘 cat /server/scripts/minio_run.sh #!/bin/bash #设置用户名密码 export Description=xxxx_Minio_Service export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=xxxxx mkdir -p /server/minio/{data,etc} #--console-address为管理端口 #--address 9000为api端口 nohup /usr/bin/minio server --address=':9000' --console-address ':9001' --config-dir /server/minio/etc/ /server/minio/data >2>&1 1>/server/minio/running.log & ########################################### 2.1 通过supervisorctl 启动服务 cat /etc/supervisord.d/minio.ini [program:minio] command=/usr/bin/minio server --address ':9000' --console-address ':9001' /minio_resources/minio environment=Description="敏特昭阳_Minio_Service",MINIO_ROOT_USER="minio",MINIO_ROOT_PASSWORD="password" autostart=true ;随super一起启动 autorestart=true ;停止后重新启动 startsecs=10 ;重启等待10s startretries=10 ;重启程序次数 stdout_logfile=/minio_resources/minio/minio9002.log stderr_logfile=/minio_resources/minio/minio9002.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB 启动服务:supervisorctl restart minio 3.下载配置客户端 wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc #客户端登录认证 mc alias set myminio/ http://Api地址 用户名 密码 mc alias set myminio/ http://minioapi.test.com userminio passwdminio 4.存储桶策略默认: 有三种策略: private: 未经过授权不能进行任何操作,所有Access Rules规则失效 public : 不经过授权可直接访问下载删除 custom : custom 策略是通过Access Rules 实现的; readonly: 只能读取 writeonly:只能写入 readwrite:可读可写可删 WEB端口设置存储桶策略: 配置为public策略: 储存桶--Manage--Access Policy--public 配置custom 策略 储存桶--Manage--Access Rules--[ readonly, writeonly, readwrite] 如下图所示: ---------------------------------------------------------------------------------------------------
5.用户权限策略 最新版本提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求 管理员权限策略模板如下: json格式 系统默认策略: consoleAdmin 控制台管理员 diagnostics 诊断 readonly 只读 readwrite 读写list列出 writeonly 只写 -------------------------------------------- { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::*" ] } ] } --------------------------------------- 自定义策略: Access-->Create Policy; 默认readonly策略无法list列出桶内资源: 比如修改默认测试如下: --------------------------------------- { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ] } ] } --------------------------------------- 默认readwrite 具有删除权限,这里取消删除权限如: ------------------------------------------------ { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*" ] } ] } 注:--------------------------------------- |"s3:DeleteObject",DeleteObject 删 |"s3:GetObject", get 获取桶内文件 |"s3:ListAllMyBuckets", 列出所有存储桶 |"s3:ListBucket", 列出桶 |"s3:PutObject" 新增写 ----------------------------------------- 如创建用户并希望用户可以查看,上传资源但是不能删除资源:
6 单主机多磁盘集群: cat /server/scripts/minio_run.sh #!/bin/bash #设置用户名密码 export Description=xxxx_Minio_Service export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=xxxxx mkdir -p /server/minio/etc nohup /usr/bin/minio server --address=0.0.0.0:9000 --config-dir /server/minio/etc/ \ /server/minio/data01 \ /server/minio/data02 \ /server/minio/data03 \ /server/minio/data04 >/server/minio/running.log 2>&1 & #或 export MINIO_ACCESS_KEY="minio" export MINIO_SECRET_KEY="xxxx" nohup ./minio server --address ":9001" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2 http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9001.log"& 2>&1 nohup ./minio server --address ":9002" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2 http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9002.log"& 2>&1 nohup ./minio server --address ":9003" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2 http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9003.log"& 2>&1 nohup ./minio server --address ":9004" http://127.0.0.1:9001/usr/minio/data1 http://127.0.0.1:9002/usr/minio/data2 http://127.0.0.1:9003/usr/minio/data3 http://127.0.0.1:9004/usr/minio/data4 > "/usr/minio/9004.log"& 2>&1 7#多主机单磁盘集群 cat /server/scripts/minio_run.sh #!/bin/bash #设置用户名密码 export Description=xxxx_Minio_Service export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=xxxxx mkdir -p /server/minio/etc nohup /usr/bin/minio server --address=0.0.0.0:9000 --config-dir /server/minio/etc/ \ http://192.168.0.1:9000/server/minio/data \ http://192.168.0.2:9000/server/minio/data \ http://192.168.0.3:9000/server/minio/data \ http://192.168.0.4:9000/server/minio/data >/server/minio/running.log 2>&1 & 8 多主机多磁盘集群 cat /server/scripts/minio_run.sh #!/bin/bash #设置用户名密码 export Description=xxxx_Minio_Service export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=xxxxx mkdir -p /server/minio/etc #!/bin/bash #设置用户名密码 export Description=敏特昭阳_Minio_Service export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=xxxxx nohup /usr/bin/minio server --address=0.0.0.0:9000 \ http://192.168.0.1:9000/server/minio/data01 \ http://192.168.0.1:9001/server/minio/data02 \ http://192.168.0.2:9000/server/minio/data01 \ http://192.168.0.2:9001/server/minio/data02 >/server/minio/running.log 2>&1 & nohup /usr/bin/minio server --address=0.0.0.0:9001 \ http://192.168.0.1:9000/server/minio/data01 \ http://192.168.0.1:9001/server/minio/data02 \ http://192.168.0.2:9000/server/minio/data01 \ http://192.168.0.2:9001/server/minio/data02 >/server/minio/running.log 2>&1 & 9.服务器简单优化 服务器优化: echo "* soft nofile 65535" >> /etc/security/limits.conf echo "* hard nofile 65535" >> /etc/security/limits.conf 10.nginx代理配置: upstream minio{ server 192.168.0.1:9000; server 192.168.0.2:9000; server 192.168.0.3:9000; server 192.168.0.4:9000; } server { listen 80; server_name minio.mintelcn.com; location / { proxy_pass http://minio; proxy_set_header Host $http_host; client_max_body_size 10G; } }
11.配置访问策略为public
0.配置minio存储 mc config host add minio http://a.b.com xxx xxx 1.批量授权才会生效(如果不执行上面命令,minio 会认为你授权的localhost 所以切记 for i in `mc ls minio|awk -F "[ ]+" '{print $5}'`;do mc policy set download minio/${i};done; 2.单存储桶授权 mc policy set public minio/aa/ #授权上传,下载,删除权限 mc policy set download minio/bb/ #只授权为下载权限
12. minio 增量同步
1.安装Minio client wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/ chmod +x /usr/local/bin/mc 2.添加minio存储 mc alias set minio/ http://x.x.x.x minio-user minio-passwd 3.先创建一个存储桶 mc mb minio/muyun688 mc ls minio 4.开始同步 #如需要将本地:/wwwroot/test.mintelcn.com/muyun688 同步到远程muyun688下执行: mc mirror -w /wwwroot/test.mintelcn.com/muyun688 minio/muyun688 5.配置开机自动同步:新建 systemd配置文件,适用 CentOS 7 Debian 8+ Ubuntu 16+ #修改成你需要实时同步备份的文件夹 backup="/wwwroot/test.mintelcn.com/muyun688" #修改成你要备份到的存储桶 bucket="muyun688" #将以下代码一起复制到SSH运行 cat > /etc/systemd/system/minioc.service <<EOF [Unit] Description=minio After=network.target [Service] Type=simple ExecStart=$(command -v mc) mirror -w ${backup} minio/${bucket} Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl start minio systemctl enable minio
13. minio mysql 数据备份
cd /usr/bin/ && wget http://124.207.22.2:9001/mt-server-minio-software/linux/mc && chmod +x /usr/bin/mc mc config host add myminio http://124.207.22.2:9001 minio minioMt84540088 mc ls myminio/mt-server-mtmath-mysql-db/ mc mb myminio/mt-server-mtmath-mysql-db/pl/ 例如:mysql全量备份: #!/bin/bash # use mysqldump to Fully backup mysql data per week! #全量备份脚本 BakDir=/home/mysql/backup/ LogFile=/home/mysql/backup/bak.log Date=`date +%Y%m%d` Begin=`date +"%Y年%m月%d日 %H:%M:%S"` mkdir -p /home/mysql/backup/; cd $BakDir DumpFile=$Date.sql GZDumpFile=$Date.sql.tgz ###此处需要写您mysql的用户名和密码 /usr/local/mysql/bin/mysqldump -uroot -pquizii2016 -h127.0.0.1 --events --flush-logs mtmath> $DumpFile /bin/tar -zvcf $GZDumpFile $DumpFile /bin/rm $DumpFile Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile /usr/bin/mc cp $BakDir/${GZDumpFile} myminio/mt-server-mtmath-mysql-db/sy/ && find $BakDir/ -mtime +2 -name "*.tgz" -exec rm -rf {} \; 修复存储桶: mc admin heal -r myminio/xxxxx mc admin heal -r minio1