龙空技术网

Minio之部署与访问(1)

空山细兩 69

前言:

当前姐妹们对“apache协议v2”大概比较注意,姐妹们都想要分析一些“apache协议v2”的相关文章。那么小编同时在网上收集了一些对于“apache协议v2””的相关内容,希望各位老铁们能喜欢,咱们一起来学习一下吧!

基础环境

Ubuntu 20.4

Minio latest(独立运行程序)

Docker minio latest(基于Docker容器)

Docker Nginx latest

Minio简介Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、从几kb到最大5T。Minio是一个非常轻量的服务,由go语言开发,本地部署只需要一个可执行文件即可。部署方式多样:minio可以使用Docker部署,同样与可以快速实现集群部署。官方网站:。2、Minio部署1、独立的Server步1、下载minio

# wget

步2、添加运行权限

root@server105:/app/minio# chmod +x minio

步3、运行

输入:./minio server /app/minio/data即可以启动minio

# ./minio server ./data

参数说明:

server 服务

/app/minio/data保存文件对象的目录,可以任意目录。

示例,以下启动后,显示可以访问的地址及用户名和密码,同时显示如何使用api访问minio。最后建议使用环境变量修改登录的用户和密码。

注意最后两行警告:

1:动态监听端口46859,建议使用--console-address “:port” 设置一个静态的地址。

2:使用了默认的密码minioadmin:minioadmin,建议通过设置环境变量的方式设置用户名和密码。

2021-10-21 后版本为:(通过--console-address指定了一个新的地址专门用于访问)

root@server105:~/program# export MINIO_ROOT_USER=root

root@server105:~/program# export MINIO_ROOT_PASSWORD=12345678

root@server105:~/program# ./minio server ./data --address ":9000" --console-address ":9001"

console-address是指:

以下是启动日志:

步4、访问

默认用户名和以都是:minioadmin,如果上述通过MINIO_ROOT_USER和MINIO_ROOT_PASSWORD设置了用户名和密码,则使用新的用户名和密码。

,

或:

步5、(可选)放到/usr/local/bin目录下

将minio放到/usr/local/bin目录下

将minio放到/usr/local/bin目录下,可以以任何目录下执行minio启动程序。

步6、修改登录密码和端口

关闭minio,重新启动可以通过以下参数设置用户和密码及端口,创建脚本:start.sh,并启动:

#!/bin/bash

export MINIO_ROOT_USER=root

export MINIO_ROOT_PASSWORD=root123456

minio server --address=server105:9100 /app/minio/data > minio.log 2>&1 &

然后,就可以访问9100端口了,root/root123456是新的用户和密码。

步7、基本操作创建桶

必须要有桶(类似于目录),默认第一级就是桶。桶不能嵌套,即桶下不能有桶。

创建:

创建桶以后,将桶设置为public否则通过 ;桶名称 >/图片名.png无法访问图片:

将access Policy设置为Public即可

上传文件并访问

上传成功后,查看,如果可以直接看到图片,则说明已经可以了。

2、使用MinioClient操作Minio

Minio Client是操作minio的命令行工具。

步1、下载mc

wget

chmod +x mc

./mc --help

root@server105:/app/minio# wget

下载后,放到/usr/local/bin目录下,查看mc版本:

root@server105:/app/minio# ./mc -v

mc version RELEASE.2022-01-07T06-01-38Z

mc的一些命令见:

alias set, remove and list aliases in configuration file

ls list buckets and objects

mb make a bucket

rb remove a bucket

cp copy objects

mirror synchronize object(s) to a remote site

cat display object contents

head display first 'n' lines of an object

pipe stream STDIN to an object

share generate URL for temporary access to an object

find search for objects

sql run sql queries on objects

stat show object metadata

mv move objects

tree list buckets and objects in a tree format

du summarize disk usage recursively

retention set retention for object(s)

legalhold set legal hold for object(s)

diff list differences in object name, size, and date between two buckets

rm remove objects

encrypt manage bucket encryption config

event manage object notifications

watch listen for object notification events

undo undo PUT/DELETE operations

policy manage anonymous access to buckets and objects

tag manage tags for bucket(s) and object(s)

ilm manage bucket lifecycle

version manage bucket versioning

replicate configure server side bucket replication

admin manage MinIO servers

update update mc to latest release

步2、设置

请先启动minio server,然后再设置mc。如下,请根据情况,修改您的服务器地址和端口。

# mc alias set server101 root root123456

步3、更多操作

# ./mc ls server101/

列表查看:

[2022-01-24 22:09:00 EST] 0B one/

创建一个桶:

[root@server101 client]# ./mc mb server101/two

Bucket created successfully `server101/two`

显示所有policy

[root@server101 client]# ./mc admin policy list server101/two

writeonly

consoleAdmin

diagnostics

readonly

readwrite

上传一个本地文件:

[root@server101 client]# ./mc cp ~/2.png server101/two/2.png

设置可以直接访问里面的图片,即设置policy策略:

[root@server101 client]# ./mc policy set public server101/two

Access permission for `server101/two` is set to `public`

获取某个目录下的访问策略:

[root@server101 client]# ./mc policy get server101/two

Access permission for `server101/two` is `public`

比较本地文件与minio文件异同:

[root@server101 client]# ./mc diff ~/two server101/two

使用sql命令,查询csv文件中的数据,其中from后面必须是s3object,文件必须是csv文件:

[root@server101 client]# ./mc sql --query "select * from s3object" server101/two/aa.csv

Jack,33

Rose,78

[root@server101 client]# ./mc sql --query "select * from s3object where name='Jack'" server101/two/aa.csv

Jack,33

[root@server101 client]# ./mc sql --query "select * from s3object where age>50" server101/two/aa.csv

Rose,78

[root@server101 client]# ./mc sql --query "select count(1) from s3object" server101/two/aa.csv

2

watch监听目录变化

[root@server101 client]# ./mc watch server101/one

[2022-01-25T09:06:21.150Z] s3:ObjectRemoved:Delete

[2022-01-25T09:06:38.905Z] 34 KiB s3:ObjectCreated:Put

修改文件名称

mc命令或minio不支持直接修改object对象名称,虽然mc命令拥有mv子命令,但mv子命令的功能,仅类似于cp子命令,mv子命令可以将本地文件移动到minio上去。

修改一个文件名称,先使用cp再使用rm删除即可:

[root@server101 fdfsstorage]# mc cp cluster/myjjkj/two/b.txt cluster/myjjkj/two/a.txt

[root@server101 fdfsstorage]# mc rm cluster/myjjkj/two/b.txt

步4、Event-可用于临听目录中文件的增减

配置event:

event可以监控一个目录的变化,当一个目录文件发生主变化时,就会将通知保存到指定的目标。

1、Redis做为通知的媒体步1、安装好redis

安装好redis并可以正常访问。

步2、创建Notification Target

# ./mc admin config set server101/two notify_redis:1 address="192.168.56.101:6379" \

format="namespace" key="bucketevents" password="" queue_dir="" queue_limit="0"

Successfully applied new settings.

Please restart your server 'mc admin service restart server101/two'.

以下官方提示好像是说,创建成功以后,会有一个arn:minio:sqs::1:redis开始的提示,但好像并没有,不过通过界面倒是可以看到这个名称。

Use mc admin config set command to update the configuration for the deployment.Restart the MinIO server to put the changes into effect. The server will print a line like SQS ARNs: arn:minio:sqs::1:redis at start-up if there were no errors.

以下是界面上看到的名称:

上面创建成功后,根据最后一句话的提示,需要重新启动server101/two这个目录,以下重新启动:

# ./mc admin service restart server101/two

Restart command successfully sent to `server101/two`. Type Ctrl-C to quit or wait to follow the status o f the restart process.

....

Restarted `server101/two` successfully.

提示:

Note that, you can add as many Redis server endpoint configurations as needed by providing an identifier (like "1" in the example above) for the Redis instance and an object of per-server configuration parameters.

步3、启用

可以通过界面,也可以通过命令:

1、通过界面:

然后向server101/two里面追加或是删除文件后,再去查看redis缓存中的数据:

注意,关于delete只会对新添加的文件进行通知。

示例:

现在put一个文件:

缓存里面多一个文件的通知;

现在再删除这个文件,缓存中这个文件也同样消失:

2、通过命令

列表查询所有配置的监听事件,可以看到,以下配置的是两个:

[root@server101 client]# ./mc admin config get server101/ notify_redis

notify_redis format=namespace address=192.168.56.101:6379 key="one" queue-dir="/home/events" queue-limit="1000" password= queue _dir= queue_limit=0

notify_redis:1 format=namespace address=192.168.56.101:6379 key=bucketevents password= queue_dir= queue_limit=0

添加:

# ./mc event add server101/two arn:minio:sqs::1:redis

Successfully added arn:minio:sqs::1:redis

查看这个目录上的事件:

[root@server101 client]# ./mc event list server101/two

arn:minio:sqs::1:redis s3:ObjectCreated:*,s3:ObjectRemoved:*,s3:ObjectAccessed:* Filter:

查看界面上,出现了相同的提示:

现在测试上传,删除,访问文件,所有操作都会放到Redis缓存中。

redis中的缓存数据格式如下:

步4、删除

删除这个目录上的所有监听:

# ./mc event remove server101/two --force

Successfully removed

删除配置:(没有找到如何删除)

minio的配置文件在<data>/.minio.sys/config目录下,可以通过删除此文件或删除此文件中的配置的方式删除,或重新启用一个新的data目录即可废弃之前的配置。

步5、admin config命令帮助

通过以下命令,可以看到server101中可以设置哪些配置:

[root@server101 client]# ./mc admin config get server101/

KEYS:

site label the server and its location

cache add caching storage tier

compression enable server side compression of objects

etcd federate multiple clusters for IAM and Bucket DNS

identity_openid enable OpenID SSO support

identity_ldap enable LDAP SSO support

identity_tls enable X.509 TLS certificate SSO support

policy_opa [DEPRECATED] enable external OPA for policy enforcement

api manage global HTTP API call specific features, such as throttling, authentication types, etc.

heal manage object healing frequency and bitrot verification checks

scanner manage namespace scanning for usage calculation, lifecycle, healing and more

logger_webhook send server logs to webhook endpoints

audit_webhook send audit logs to webhook endpoints

audit_kafka send audit logs to kafka endpoints

notify_webhook publish bucket notifications to webhook endpoints

notify_amqp publish bucket notifications to AMQP endpoints

notify_kafka publish bucket notifications to Kafka endpoints

notify_mqtt publish bucket notifications to MQTT endpoints

notify_nats publish bucket notifications to NATS endpoints

notify_nsq publish bucket notifications to NSQ endpoints

notify_mysql publish bucket notifications to MySQL databases

notify_postgres publish bucket notifications to Postgres databases

notify_elasticsearch publish bucket notifications to Elasticsearch endpoints

notify_redis publish bucket notifications to Redis datastores 可见,这个值是固定值

subnet set subnet config for the cluster e.g. api key

如,获取redis配置列表:

./mc admin config get server101/ notify_redis

notify_redis format=namespace address=192.168.56.101:6379 key="one" queue-dir="/home/events" queue-limit="1000" password= queue_dir= queue_limit=0

notify_redis:1 format=namespace address=192.168.56.101:6379 key=bucketevents password= queue_dir= queue_limit=0

2、webhook做为通知

官网参考地址:

webhook就是提供一个url,可以是自己开发的api,用于接收minio桶中文件的变化。

webhook的参数:

步1、创建一个可以接收请求的endpoint

可以使用任何的方法,开发一个api接口,用于接收参数。以下使用springboot开发一个api接口,参数直接使用fastjson的JSONObject。

步2、启动minio并设置webhook

首先需要给minio添加一个Notification:

也可以使用一个名称便于记:

添加成功后,需要使用restart重新启动一下:

设置成功后,可以在Notifications位置找到设置了webhook:

步3、将Event绑定到某个桶上

打开某个桶,并设置Events:

此步通过界面就可以操作了:

步4、测试Webhook Event

现在向此桶中保存或是删除此桶中的文件,查看接收到的数据:

向里面保存数据时,接收到的json数据:

删除里面的文件时,接收到的数据:

到此,你已经可以通过redis或webhook来监听minio桶中文件的变化了。

3、minio的配置文件

经过多方查找,发现minio的配置文件所在的位置为 <data>/.minio.sys/config/config.json中:

# find . -name config.json

./minio/data/.minio.sys/config/config.json

从里面可以找到webhook或redis的配置信息如下:

4、事件Redis与webhook的区别

使用Redis监听minio桶中文件的变化,如果在redis缓存中不存在某个文件,仅在minio上存在,则删除minio中的文件时,minio会试图删除redis缓存中这个文件,但由于此文件并不存在,所有,并不能接收到这个文件被删除的通知。

而webhook就不同了,对文件的任何put,delete都会向webhook发出请求。

所以,我个人认为使用webhook更加灵活。

3、Java Client步1、添加依赖

<dependency>

<groupId>io.minio</groupId>

<artifactId>minio</artifactId>

<version>8.3.1</version>

</dependency>

步2、创建MinioClient客户端

MinioClient mc = MinioClient.builder().endpoint(endPoint).credentials(accessKey, secretKey).build();

其中:

endPoint: 修改成你的ip地址。

accessKey:你的用户名

secretKey:你的密码。

步3、实现操作上传文件

上传IO流:

2、创建桶下载文件4、获取文件的二进制数据获取文件的访问url4、nginx

在使用单一节点启动Minio的情况下,可以使用Nginx直接对Minio的目录进行管理。这样放到此目录下的文件,就可以直接通过nginx访问了。不过,这一步,有点多余,因为,只要将bucket的访问权限设置为public后,即可以直接通过url访问。

具体如下:

步1、启动minio

#!/bin/bash

export MINIO_ROOT_USER=root

export MINIO_ROOT_PASSWORD=root123456

minio server --address=server105:9000 --config-dir=/app/minio/conf /app/minio/data > minio.log 2>&1 &

步2、使用docker启动nginx

nginx的配置文件:

启动docker的脚本文件,注意第6行的影射关系。

#!/bin/bash

docker run --name nginx \

-d -p 80:80 \

-v nginx_html:/usr/share/nginx/html \

-v /app/nginx/nginx.conf:/etc/nginx/nginx.conf \

-v /app/minio/data:/minio/data/minio \

nginx

现在通过minio向服务器上传图片后,

通过以下方式来访问:

5、分布式

官方参考地址:

根据官网参考,至少需要4个节点或8,16个节点等分配形式,如4个节点的话可以的选择是:

1:在一台服务器上设置4个目录。

2:在两台服务器上分别设置2个目录。

3:在4台服务器上分别设置一个目录。

1、两台服务器*每台服务器两磁盘

这儿我们采用第2种做法,毕竟是测试,也没有那么多的服务器哈:

1、准备工作

1、修改两台服务器的主机名称。

2、修改两台服务器的/etc/hosts文件,让主机名与ip地址对应,如下:

192.168.56.101 server101

192.168.56.102 server102

3、上传minio可执行文件到两台服务器的相同目录下,如/minio/目录下。并修改此方法为可执行即chmod +x

2、启动脚本

根据官网提示,MINIO_ROOT_USER及MINIO_ROOT_PASSWORD两台服务器必须要一致。

#!/bin/bash

export MINIO_ROOT_USER=root

export MINIO_ROOT_PASSWORD=12345678

/minio/minio server \

\

\

\

\

--console-address ":8000" &

3、启动

分别启动两台服务器的脚本。查看启动日志:

4、访问

可以分别访问两台服务器的8000端口:

5、使用nginx配置对两台服务器9000端口的影射

配置成功以后,完全可以使用一台服务器做为写服务器,另一台做为读服务器。也可以配置nginx对两台服务器的9000进行影射。

2、4台服务器每台服务器1磁盘1、准备工作1、所有服务器配置hosts(可选):

192.168.56.101 server101

192.168.56.102 server102

192.168.56.103 server103

192.168.56.104 server104

2、配置ssh免密码登录(可选)

server101# ssk-keygen -t rsa

server101# ssh-copy-id server10{1..4}

3、关闭所有主机的防火墙

systemctl stop firewalld

systemctl disable firewalld

2、创建启动脚本

在每一台服务器都创建一个启动脚本如下:

#!/bin/bash

export MINIO_ROOT_USER=root

export MINIO_ROOT_PASSWORD=root12345

./minio server \

\

\

\

\

--console-address ":9001"

分别启动四4台服务器

创建一个桶,访问策略设置为public,上传一个图片,并查看。

4、使用mc操作

添加:

[root@server101 client]# ./mc alias set cluster

Enter Access Key: root

Enter Secret Key:

Added `cluster` successfully.

5、创建一个Event(config_redis)

可直接参考二.2.4的命令:

# ./mc admin config set server101/one notify_redis:1 address="192.168.56.101:6379" \

> format="namespace" key="mybucketevents" password="" queue_dir="" queue_limit="0"

Successfully applied new settings.

Please restart your server 'mc admin service restart server101/one'.

给指定的目录,添加Event:

测试保存到桶中图片及删除图片,并查看Redis缓存中的数据。

3、最优最低的集群配置

先参考官方文档的集群要求:

现在选择:

1、生产的最低系统配置

服务器

驱动器(每个节点)

条纹尺寸

选择奇偶校验(默认)

读取容差(服务器)

写入容差(服务器)

4

2

8

4

2

1

配置的具体步骤1、环境说明

主机 - Anolias(兼容CentOS8)

ip

minio-version

目录

server101

192.168.56.101

RELEASE.2022-03-05T06-32-39Z

/app/minio/data/data1

/app/minio/data/data2

/app/minio/config

server102

192.168.56.102

同上

同上

server103

192.168.56.103

同上

同上

server104

192.168.56.104

同上

同上

2、启动脚本

在每一台主机上都创建以下启动脚本:

#!/bin/bash

docker run --name minio \

-e "MINIO_ROOT_USER=minio" \

-e "MINIO_ROOT_PASSWORD=minio123" \

-v /app/minio/data:/data \

-v /app/minio/config:/config \

--network host \

-d \

minio/minio:RELEASE.2022-03-05T06-32-39Z server \

{101...104}:8801/data/data{1...2} \

--config-dir /config --console-address ":9901" --address ":8801"

启动后效果图,可以看到,是2*4的一个配置方案:

4、集群扩容

参考:

扩展的最基本要求就是扩展出来的主机与磁盘个数与原主机与磁盘个数必须相同。

扩展新主机(不使用etcd)

扩展前配置:

主机

目录

Server101/192.168.56.101

/app/minio/data/data{1...2}

Server102/192.168.56.102

/app/minio/data/data{1...2}

扩展新的配置:

主机

目录

Server103/192.168.56.103

/app/minio/data/data{1...2}

Server104/192.168.56.104

/app/minio/data/data{1...2}

步1、先配置集群(即被扩展的集群)

以下是启动脚本,集群中有两台服务器,每个服务器上两块硬盘(要求至少4)

#!/bin/bash

docker run --name minio \

-v /app/minio/data:/data \

-v /app/minio/config:/config \

-e "MINIO_ROOT_USER=minio" \

-e "MINIO_ROOT_PASSWORD=minio123" \

--network host \

minio/minio:RELEASE.2022-03-05T06-32-39Z server \

{1...2}/data/data{1...2} \

--address ":8801" --console-address ":9901"

分别在两台机器上启动上述脚本:

然后创建一个桶,并上传一些文件:

查看服务器池1下的磁盘存储,这些存储的文件,应该是上述文件的列表:

步2、扩展

停止上面的集群:

# docker stop minio

创建新的启动脚本,注意给docker容器取一个新的名称,其中:{3...4}/data/data{1...2}行,就是新添加到集群中的服务器池:

#!/bin/bash

docker run --name minio2 \

-v /app/minio/data:/data \

-v /app/minio/config:/config \

-e "MINIO_ROOT_USER=minio" \

-e "MINIO_ROOT_PASSWORD=minio123" \

--network host \

minio/minio:RELEASE.2022-03-05T06-32-39Z server \

{1...2}/data/data{1...2} \

{3...4}/data/data{1...2} \

--address ":8801" --console-address ":9901"

将文件放到4台服务器上,并分别启动:(注意关闭Linux的防火墙)

查看集群状态:

现在上传一些文件,到原有的桶中,然后去新服务器池的目录下,查看是否有这些文件,

注意:文件的保存是按服务器池的hash来计算的,新添加到集群中的为服务器池2,一个文件,只会放到服务器池1或服务器池2的某一个下面,不会同时放到两个服务器池的磁盘上,这一点,请一定注意。

到此,你已经可以无限的扩展现有的minio集群了。

标签: #apache协议v2 #linux重启minio