• 信创环境下分布式文件存储MinIO集群部署


    背景

    本次项目涉及20+台服务器的部署,技术包括 Nacos 注册中心集群、 GateWay 网关服务集群、 达梦8 关系型数据库服务集群、 MinIO 分布式文件存储服务集群、 Redis 缓存服务集群、 WebSocket 服务端消息推送集群、 Quartz 定时任务服务集群、 Nginx+KeepAlived 反向代理高可用集群、监控服务集群等。这里主要记录下分布式文件存储服务集群以及缓存服务集群的搭建过程。

    云服务资源

    • 172.27.204.115
    • 172.27.204.101
    • 172.27.204.110
    • 172.27.204.151

    系统信息

    # 查看系统内核信息
    [root@sx-std-oss-220420-0001 opt]# uname -a
    Linux sx-std-oss-220420-0001.novalocal 4.19.90-17.ky10.aarch64 #1 SMP Sun Jun 28 14:27:40 CST 2020 aarch64 aarch64 aarch64 GNU/Linux
    
    # 查看系统版本信息
    [root@sx-std-oss-220420-0001 opt]# cat /etc/os-release
    NAME="Kylin Linux Advanced Server"
    VERSION="V10 (Tercel)"
    ID="kylin"
    VERSION_ID="V10"
    PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
    ANSI_COLOR="0;31"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Note:以下所有操作分别在4台主机上操作,文件传输: scp minio root@172.27.204.151:/opt/

    挂载

    在4台主机上创建目录并挂载。

    mkdir -p /data/minio
    mount /dev/vda1 /data/minio
    
    • 1
    • 2

    编写启动脚本

    • 新建脚本
    cd /opt
    vi start-minio.sh
    
    #!/bin/bash
    export MINIO_ACCESS_KEY=Hello
    export MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE
     
    /opt/minio server \
    http://172.27.204.115/data/minio http://172.27.204.101/data/minio \
    http://172.27.204.110/data/minio http://172.27.204.151/data/minio
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 赋予执行权限
    chmod +x start-minio.sh
    
    chmod +x minio
    
    • 1
    • 2
    • 3

    编写服务脚本

    • 新建脚本
    vi /lib/systemd/system/minio.service
     
    [Unit]
    Description=Minio service
    Documentation=https://docs.minio.io/
     
    [Service]
    WorkingDirectory=/opt/
    ExecStart=/opt/start-minio.sh
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 验证系统服务
    systemctl list-unit-files | grep minio
    systemctl enable minio
    systemctl list-unit-files | grep minio
    
    systemctl status minio
    systemctl start minio
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    关闭防火墙

    由于四台主机之间需要进行通信,这里直接关掉了防火墙。

    systemctl status firewalld
    systemctl stop firewalld
    
    • 1
    • 2

    配置桶权限

    可以直接登录 MinIO 提供的控制台进行可视化的配置,不过由于我们在信创环境下没有申请开放对应端口,所有通过 mc 命令行客户端进行配置。

    这里记录一个实际中因开放了匿名下载文件权限之后,可以遍历所有对象存储目录的问题的解决方法。

    • 可下载

    2022-06-18-Download.jpg

    • 可遍历整个桶

    2022-06-18-ListBucket.jpg

    • MinIO权限

    MinIO 的权限其实就是关于文件、桶的 CRUD 的配置,基于AWS的对象存储规则,配置文件为 JSON 格式。

    # 开放匿名下载权限
    [root@sx-std-oss-220420-0001 opt]# mc policy set download name-it/local
    
    # 查看下默认的下载权限的JSON文件
    [root@sx-std-oss-220420-0001 minio_policy]# mc policy get-json name-it/local
    {
     "Statement": [
      {
       "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
       ],
       "Effect": "Allow",
       "Principal": {
        "AWS": [
         "*"
        ]
       },
       "Resource": [
        "arn:aws:s3:::local"
       ]
      },
      {
       "Action": [
        "s3:GetObject"
       ],
       "Effect": "Allow",
       "Principal": {
        "AWS": [
         "*"
        ]
       },
       "Resource": [
        "arn:aws:s3:::local/*"
       ]
      }
     ],
     "Version": "2012-10-17"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    可以看到,默认的 download 可以列出桶里的文件列表: GetBucketLocation ,我们把这个权限去掉。

    新建一个 custom-local.json ,写入以下内容(与默认生成的配置相比,仅去掉了 GetBucketLocation )。

    {
     "Statement": [
      {
       "Action": [
        "s3:GetBucketLocation"
       ],
       "Effect": "Allow",
       "Principal": {
        "AWS": [
         "*"
        ]
       },
       "Resource": [
        "arn:aws:s3:::local"
       ]
      },
      {
       "Action": [
        "s3:GetObject"
       ],
       "Effect": "Allow",
       "Principal": {
        "AWS": [
         "*"
        ]
       },
       "Resource": [
        "arn:aws:s3:::local/*"
       ]
      }
     ],
     "Version": "2012-10-17"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    使用我们自定义的权限 JSON 文件。

    [root@sx-std-oss-220420-0001 minio_policy]# mc policy set-json custom-local.json name-it/local
    
    • 1
    • 可下载,但不可遍历桶下的文件目录

    2022-06-18-AccessDenied.jpg

    mc常用命令

    mc 命令行客户端的使用可参考官方文档,这里附上之前华为云上操作 MinIOmc 客户端常用的命令。

    mc常用命令清单

    [root@ecs-c8ee-0011  ~]# cd /opt/minio 
    [root@ecs-c8ee-0011  minio]# wget https://dl.min.io/client/mc/release/linux-amd64/mc
    [root@ecs-c8ee-0011  minio]# mv ./mc /usr/local/bin/ 
    [root@ecs-c8ee-0011  minio]# mc config host ls 
    -bash: /usr/local/bin/mc: 权限不够
    [root@ecs-c8ee-0011  minio]# cd /usr/local/bin 
    [root@ecs-c8ee-0011  bin]# chmod +x mc 
    
    # 查看服务列表
    mc config host ls
    # 新增服务
    mc config host add name-it http://localhost:9000 HelloWorld wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE
    Added name-it successfully.
    # 密码要求至少八位。
    mc config host add name-it http://localhost:9000 HelloWorld
    
    # 删除服务
    mc config host remove name-it
    
    # 查看服务信息
    mc admin info name-it
    
    # 查看服务下的桶以及桶下的文件
    mc ls name-it
    mc ls name-it/bucketname
    
    # 下载文件
    mc cp name-it/bucketname/filename /tmp
    
    # 删除文件
    mc rm name-it/bucketname/filename
    
    # 上传文件
    mc cp test.txt name-it/bucketname
    mc ls name-it/bucketname
    
    # 创建桶
    mc mb name-it/new-bucketname
    mc ls name-it
    
    # 删除桶
    mc rb name-it/new-bucketname
    mc ls name-it
    
    # 强制删除(当桶中有文件,而且想删除)
    mc rb --force name-it/new-bucketname
    mc ls name-it
    
    # 查看服务下桶的容量
    mc du name-it
    
    mc du name-it/bucketname
    
    # 添加用户
    mc admin user add name-it user1
    mc admin user add name-it user2 12345678
    
    # 列出用户
    mc admin user list name-it
    
    # 禁用用户
    mc admin user disable name-it user2
    mc admin user list name-it
    
    # 启用用户
    mc admin user enable name-it user2
    mc admin user list name-it
    
    mc admin user info name-it user2
    
    # 删除用户
    mc admin user remove name-it user2
    
    # 策略管理
    mc admin policy list name-it
    
    mc admin policy info name-it readonly
    
    mc admin policy info name-it writeonly
    
    mc admin policy info name-it readwrite
    
    # 写策略配置文件
    # 应用文件
    mc admin policy add name-it bucket2-admin-role your-config.json
    
    mc admin policy list name-it
    
    mc admin user info name-it user2
    
    # 关联策略到用户
    mc admin policy set name-it bucket2-admin-role user=user2
    
    mc admin user info name-it user2
    
    # 通过Web Console验证user2的权限
    
    # 解绑权限
    mc admin policy unset name-it bucket2-admin-role user=user2
    
    mc admin user info name-it user2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101

    帮助

    关于 mc 客户端的使用,当遇到不会用的命令时,可通过 --help 参数,查看帮助文档。

    Reference

    https://docs.min.io/minio/baremetal/reference/minio-mc.html


    If you have any questions or any bugs are found, please feel free to contact me.

    Your comments and suggestions are welcome!

  • 相关阅读:
    tomcat中把项目放在任意目录中的步骤
    数字化转型与制造企业绿色创新质量——基于供需双侧机制的再检验(2011-2022年)
    Android SensorManager学习
    分布式理论CAP
    操作系统I/O与显示器---16
    如何写出优美的代码
    redis cluster如何添加和删除节点?
    Python入门系列(十一)一篇搞定python操作MySQL数据库
    SpringBoot--配置Redisson的方法
    千年TGS服务器日志报错如何解决
  • 原文地址:https://blog.csdn.net/u013810234/article/details/125351956