基于Centos7搭建Minio集群

本文详细介绍如何在CentOS 7.x环境下搭建MinIO分布式文件系统集群,包括基础环境准备、集群启动脚本编写、服务脚本配置及桶通知集成等关键步骤。

CentOS-搭建MinIO集群

最近在负责 minio 分布式文件系统,所以在本地搭建一个 demo 练练手

一. 基础环境

操作系统: Centos 7.x

Minio在线演示
Minio下载

二. 准备工作

官网友情提示(非常重要!!!)

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,先将access秘钥和secret秘钥export成环境变量。
  • 分布式Minio使用的磁盘里必须是干净的,里面没有数据。
  • 下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。
  • 分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。
  • 在Windows下运行分布式Minio处于实验阶段,请悠着点使用。

2.1 机器资源

192.168.133.122 
192.168.133.123 
192.168.133.124 
192.168.133.125

本集群由 4 台服务器构成(官方推荐集群最小 4 台服务器),每个服务器上挂载两个磁盘目录,最小数据挂载点为 4 个。

硬盘资源必须准备至少 4 块,否则启动报错:

415

>> 可以在同一台服务器上挂载 4 块硬盘,也可以在不同服务器上。只要硬盘数 >= 4

2.2 创建相关目录(所有节点)

数据存储目录

mkdir -p /home/tools/minio/data

启动脚本目录

mkdir -p /home/tools/minio/

上传启动脚本到该目录下

chmod +x minio

三. 编写集群启动脚本(所有节点配置文件相同)

#集群启动脚本
vi /home/tools/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

nohup /home/ybs/minio/minio server --config-dir /home/ybs/minio/config \
http://192.168.133.122/home/ybs/minio/data \
http://192.168.133.123/home/ybs/minio/data \
http://192.168.133.124/home/ybs/minio/data \
http://192.168.133.125/home/ybs/minio/data >> minio-start.log 2>&1 &

其中,“MINIO_ACCESS_KEY”为用户名,“MINIO_SECRET_KEY”为密码,密码不能设置过于简单,不然minio会启动失败,“-config-dir”指定集群配置文件目录
MinIO 启动日志会输出到当前目录下的 minio-start.log

chmod +x /home/tools/minio/run.sh

四. 编写服务脚本(所有节点)

vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/home/tools/minio/
ExecStart=/home/tools/minio/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本

五. 启动测试 (所有节点)

网上推荐的启动方式

systemctl daemon-reload
systemctl start minio
systemctl enable minio

我自己测试发现好像不行。可能是自己菜的缘故!!

>> 我是直接执行脚本 sh run.sh

测试

浏览器输入集群任意节点地址+9000端口,即可访问minio,用户名密码为前面设置的“MINIO_ACCESS_KEY”和“MINIO_SECRET_KEY”,可创建“bucket”并上传文件测试

发现其实 minio 集群之间可以同步数据

六.单机启动

centos7 minio单机安装

export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio

nohup ./minio server /minio/data > /minio/logs/minio.log 2>&1 &    

七.桶通知

MinIO Server config.json (v18) 指南
桶通知最好是基于绑定的 IP 不会经常动态变化的情况下操作,否则集群的节点会因为访问不到绑定的旧 IP 导致节点一个一个的减少。会提示以下错误

API: SYSTEM()
Time: 16:20:21 CST 12/08/2020
DeploymentID: b858dcdd-d921-489a-aa24-056a821db0e9
Error: Unable to initialize notification target(s): one or more targets are offline. Please use `mc admin info --json` to check the offline targets
       7: github.com/minio/minio@/cmd/config-current.go:487:cmd.lookupConfigs()
       6: github.com/minio/minio@/cmd/config-current.go:604:cmd.loadConfig()
       5: github.com/minio/minio@/cmd/config.go:233:cmd.initConfig()
       4: github.com/minio/minio@/cmd/config.go:193:cmd.(*ConfigSys).Init()
       3: github.com/minio/minio@/cmd/server-main.go:323:cmd.initAllSubsystems()
       2: github.com/minio/minio@/cmd/server-main.go:248:cmd.initSafeMode()
       1: github.com/minio/minio@/cmd/server-main.go:523:cmd.serverMain()
All MinIO sub-systems initialized successfully
Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
Use `mc admin info` to look for latest server/disk info
 Status:         3 Online, 1 Offline. 
Endpoint:  http://10.9.129.15:9003

7.1 使用 Redis 发布 MinIO 发布事件

这种通知目标支持两种格式: namespaceaccess

如果用的是_namespacee_格式,MinIO将存储桶里的对象同步成Redis hash中的条目。对于每一个条目,对应一个存储桶里的对象,其key都被设为"存储桶名称/对象名称",value都是一个有关这个MinIO对象的JSON格式的事件数据。如果对象更新或者删除,hash中对象的条目也会相应的更新或者删除。

如果使用的是access,MinIO使用RPUSH将事件添加到list中。这个list中每一个元素都是一个JSON格式的list,这个list中又有两个元素,第一个元素是时间戳的字符串,第二个元素是一个含有在这个存储桶上进行操作的事件数据的JSON对象。在这种格式下,list中的元素不会更新或者删除。

7.1.1 集成 Redis 到 MinIO

MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中。

默认的配置目录是 ${HOME}/.minio,你可以使用--config-dir命令行选项重写之。

./minio server --config-dir ./config/miniotest ./test

官网说 MinIO Server的配置文件默认路径是 ~/.minio/config.json。我找了一万遍,好像并没有这个文件。。。,所以只能通过强大的命令 find 查找了。

find / -name config.json

find 结果:

[root@localhost config]# find / -name config.json
/root/.mc/config.json (mc 相关的配置信息)
/home/tools/minio/data/.minio.sys/config/config.json (config.json 是目录)
/home/tools/minio/test/.minio.sys/config/config.json (答案所在)

cat /home/tools/minio/test/.minio.sys/config/config.json

{
   
   
    "api": {
   
   
        "_": [
            {
   
   
                "key": "requests_max",
                "value": "0"
            },
            {
   
   
                "key": "requests_deadline",
                "value": "10s"
            },
            {
   
   
                "key": "ready_deadline",
                "value": "10s"
            },
            {
   
   
                "key": "cors_allow_origin",
                "value": "*"
            }
        ]
    },
    "audit_webhook": {
   
   
        "_": [
            {
   
   
                "key": "enable",
                "value": "off"
            },
            {
   
   
                "key": "endpoint",
                "value": ""
            },
            {
   
   
                "key": "auth_token",
                "value": ""
            }
        ]
    },
    "cache": {
   
   
        "_": [
            {
   
   
                "key": "drives",
                "value": ""
            },
            {
   
   
                "key": "exclude",
                "value": ""
            },
            {
   
   
                "key": "expiry",
                "value": "90"
            },
            {
   
   
                "key": "quota",
                "value": "80"
            },
            {
   
   
                "key": "after",
                "value": "0"
            },
            {
   
   
                "key": "watermark_low",
                "value": "70"
            },
            {
   
   
                "key": "watermark_high",
                "value": "80"
            },
            {
   
   
                "key": "range",
                "value": "on"
            }
        ]
    },
    "compression": {
   
   
        "_": [
            {
   
   
                "key": "enable",
                "value": "off"
            },
            {
   
   
                "key": "extensions",
                "value": ".txt,.log,.csv,.json,.tar,.xml,.bin"
            },
            {
   
   
                "key": "mime_types",
                "value": "text/*,application/json,application/xml"
            }
        ]
    },
    "credentials": {
   
   
        "_": [
            {
   
   
                "key": "access_key",
                "value": "minioadmin"
            },
            {
   
   
                "key": "secret_key",
                "value": "minioadmin"
            }
        ]
    },
    "etcd": {
   
   
        "_": [
            {
   
   
                "key": "endpoints",
                "value": ""
            },
            {
   
   
                "key": "path_prefix",
                "value": ""
            },
            {
   
   
                "key": "coredns_path",
                "value": "/skydns"
            },
            {
   
   
                "key": "client_cert",
                "value": ""
            },
            {
   
   
                "key": "client_cert_key",
                "value": ""
            }
        ]
    },
    "identity_ldap": {
   
   
        "_": [
            {
   
   
                "key": "server_addr",
                "value": ""
            },
            {
   
   
                "key": "username_format",
                "value": ""
            },
            {
   
   
                "key": "username_search_filter",
                "value": ""
            }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值