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

打印 上一主题 下一主题

主题 758|帖子 758|积分 2284

背景

本次项目涉及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
系统信息

  1. # 查看系统内核信息
  2. [root@sx-std-oss-220420-0001 opt]# uname -a
  3. 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
  4. # 查看系统版本信息
  5. [root@sx-std-oss-220420-0001 opt]# cat /etc/os-release
  6. NAME="Kylin Linux Advanced Server"
  7. VERSION="V10 (Tercel)"
  8. ID="kylin"
  9. VERSION_ID="V10"
  10. PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
  11. ANSI_COLOR="0;31"
复制代码
Note:以下所有操作分别在4台主机上操作,文件传输: scp minio root@172.27.204.151:/opt/
挂载

在4台主机上创建目录并挂载。
  1. mkdir -p /data/minio
  2. mount /dev/vda1 /data/minio
复制代码
编写启动脚本



  • 新建脚本
  1. cd /opt
  2. vi start-minio.sh
  3. #!/bin/bash
  4. export MINIO_ACCESS_KEY=Hello
  5. export MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE
  6. /opt/minio server \
  7. http://172.27.204.115/data/minio http://172.27.204.101/data/minio \
  8. http://172.27.204.110/data/minio http://172.27.204.151/data/minio
复制代码


  • 赋予执行权限
  1. chmod +x start-minio.sh
  2. chmod +x minio
复制代码
编写服务脚本



  • 新建脚本
  1. vi /lib/systemd/system/minio.service
  2. [Unit]
  3. Description=Minio service
  4. Documentation=https://docs.minio.io/
  5. [Service]
  6. WorkingDirectory=/opt/
  7. ExecStart=/opt/start-minio.sh
  8. Restart=on-failure
  9. RestartSec=5
  10. [Install]
  11. WantedBy=multi-user.target
复制代码


  • 验证系统服务
  1. systemctl list-unit-files | grep minio
  2. systemctl enable minio
  3. systemctl list-unit-files | grep minio
  4. systemctl status minio
  5. systemctl start minio
复制代码
关闭防火墙

由于四台主机之间需要进行通信,这里直接关掉了防火墙。
  1. systemctl status firewalld
  2. systemctl stop firewalld
复制代码
配置桶权限

可以直接登录 MinIO 提供的控制台进行可视化的配置,不过由于我们在信创环境下没有申请开放对应端口,所有通过 mc 命令行客户端进行配置。
   这里记录一个实际中因开放了匿名下载文件权限之后,可以遍历所有对象存储目录的问题的解决方法。
  

  • 可下载



  • 可遍历整个桶



  • MinIO权限
MinIO 的权限其实就是关于文件、桶的 CRUD 的配置,基于AWS的对象存储规则,配置文件为 JSON 格式。
  1. # 开放匿名下载权限
  2. [root@sx-std-oss-220420-0001 opt]# mc policy set download name-it/local
  3. # 查看下默认的下载权限的JSON文件
  4. [root@sx-std-oss-220420-0001 minio_policy]# mc policy get-json name-it/local
  5. {
  6. "Statement": [
  7.   {
  8.    "Action": [
  9.     "s3:ListBucket",
  10.     "s3:GetBucketLocation"
  11.    ],
  12.    "Effect": "Allow",
  13.    "Principal": {
  14.     "AWS": [
  15.      "*"
  16.     ]
  17.    },
  18.    "Resource": [
  19.     "arn:aws:s3:::local"
  20.    ]
  21.   },
  22.   {
  23.    "Action": [
  24.     "s3:GetObject"
  25.    ],
  26.    "Effect": "Allow",
  27.    "Principal": {
  28.     "AWS": [
  29.      "*"
  30.     ]
  31.    },
  32.    "Resource": [
  33.     "arn:aws:s3:::local/*"
  34.    ]
  35.   }
  36. ],
  37. "Version": "2012-10-17"
  38. }
复制代码
可以看到,默认的 download 可以列出桶里的文件列表: GetBucketLocation ,我们把这个权限去掉。
新建一个 custom-local.json ,写入以下内容(与默认生成的配置相比,仅去掉了 GetBucketLocation )。
  1. {
  2. "Statement": [
  3.   {
  4.    "Action": [
  5.     "s3:GetBucketLocation"
  6.    ],
  7.    "Effect": "Allow",
  8.    "Principal": {
  9.     "AWS": [
  10.      "*"
  11.     ]
  12.    },
  13.    "Resource": [
  14.     "arn:aws:s3:::local"
  15.    ]
  16.   },
  17.   {
  18.    "Action": [
  19.     "s3:GetObject"
  20.    ],
  21.    "Effect": "Allow",
  22.    "Principal": {
  23.     "AWS": [
  24.      "*"
  25.     ]
  26.    },
  27.    "Resource": [
  28.     "arn:aws:s3:::local/*"
  29.    ]
  30.   }
  31. ],
  32. "Version": "2012-10-17"
  33. }
复制代码
使用我们自定义的权限 JSON 文件。
  1. [root@sx-std-oss-220420-0001 minio_policy]# mc policy set-json custom-local.json name-it/local
复制代码


  • 可下载,但不可遍历桶下的文件目录

mc常用命令

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

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

关于 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!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表