minio 配置

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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章