目录
一、后续更新方向
各位老师好!这是我第一次写博客,在最近的工作过程中碰到了minio文件服务器的部署问题,想记录一下解决问题的过程。本系统采用minio+prothmeus+grafana三个服务去实现文件系统功能以及系统监控。在后续过程中会更新一些运维、开发心得以及工作中碰到的问题以及工作岗位上的一些问题,有感兴趣的小伙伴可以留下一个关注!
二、文件系统的搭建
(1)何为MINIO,它有什么作用?
官方解释:MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
在我看来,随着目前技术的进步,系统体量越来越大,一些企业级现场会对重要文件进行存储,例如:国家有硬性要求的文件需要有保存时限3年、5年等,这种大体量文件,仅仅用硬盘已经无法满足需求。这时可以通过服务器将文件存储到服务器之中,而MINIO文件管理系统可以实现对服务器中文件进行管理和传输,拥有成型的UI界面,方便我们进行企业级文件管理。
同时MINIO是一个开源项目,支持市面主流的开发语言并且可以通过SDK快速集成快速集成使用。
(2)docker-compose部署minio
在这里docker、以及docker-comopse的安装过程我就不过多赘述了,教程很多大家可以自行寻找。
[root@MyCentOS7 ~]# docker -v
Docker version 20.10.15, build fd82621
[root@MyCentOS7 ~]# docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6
当我们安装好docker以及docker-compose后,下一步准备minio的镜像。
1.从docker镜像仓库中拉取minio镜像(要确保服务器可以通外网)
[root@MyCentOS7 ~]# docker pull minio/minio
Using default tag: latest
latest: Pulling from minio/minio
ea29d36b883e: Pull complete
5946b96fb1f6: Pull complete
dd3ffe05e053: Pull complete
5e11981e9c8c: Pull complete
e95d9be0e730: Pull complete
85804fd90cc0: Pull complete
55e2b13e3fba: Pull complete
Digest: sha256:78eba29be5c2539b0961dee68b44334d4eda4c9bd7cb1f43f4e07c2ffb609cff
Status: Downloaded newer image for minio/minio:latest
docker.io/minio/minio:latest
[root@MyCentOS7 ~]#
2.获取prothmeus、grafana镜像方法同minio
docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana
注意:这里prothmeus是由两个服务组成prometheus和node-exporter组成,所以此处有三个镜像需要下载!
(3)二进制文件部署minio
1.可以使用wget下载minio二进制文件和mc客户端
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
wget https://dl.minio.org.cn/client/mc/release/linux-amd64/mc
chmod +x mc
mc alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
二进制文件的方式在这里并不推荐,因为不止涉及minio,还有prothmeus、grafana。此方法不便于服务的管理与启停。
(4)整理文件结构,编写docker-compose
1.创建如下文件目录:
grafana-storage文件如下:(将grafana镜像中/var/lib/grafana/ 做好映射)
注意:再此文件下所有文件夹以及文件都需要赋予完整权限 ,否则会出现grafana服务起不来的问题,方法如下:
#777是目录或文件最大权限,后跟路径名或文件名
chmod 777 /root/minio/install_Data/node1/grafana-storage/
prothmeus文件夹下:(同样会在docker-compose做映射)
prothmeus.yml如下:
global:
scrape_interval: 30s
scrape_timeout: 10s
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: minio-job
bearer_token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiYWRtaW4iLCJleHAiOjQ4NjI2ODQ4NzV9.yJAmy_xjRBQAysSsQ_0ixKnYslO0yA-NHa3IJ1rx83oo2wJB21ZdVPisdLjex2YDdemPdXX_r41NM9jvk12SoQ
metrics_path: /minio/prometheus/metrics
scheme: http
static_configs:
- targets: ['192.168.1.156:9000']
在这里需要注意的是:
1.bearer_token:是通过minio客户端 mc 获取的,用于prothmeus去监听minio的权限问题。
2.metrics_path:采集metrics样本的路径
3. static_configs: - targets: 用于设置prothmeus监听的ip以及端口号,这里指minio服务的IP及PORT。
2.获取bearer_token方法:
http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
下载mc客户端二进制文件(上文下载过此处不用下载),执行命令赋予权限,即安装成功。
chmod +x mc
./mc --help
bearer_token获取方式:
mc --insecure alias set MINIO http://localhost:9000 你的账号 你的密码
mc admin prometheus generate MINIO
全都配置好后,我们采用docker-compose 的方式启动服务
docker-compose如下:
version: '3'
services:
minio:
image: 10.142.0.203:8082/minio/minio:latest
hostname: "minio"
ports:
- 9000:9000 # api 端口
- 9001:9001 # 控制台端口
environment:
- MINIO_ACCESS_KEY=admin
- MINIO_SECRET_KEY=12345678
- MINIO_PROMETHEUS_AUTH_TYPE=public
- MINIO_PROMETHEUS_URL=192.168.1.156:9090
volumes:
- /root/minio-data/minio-disk-1:/data1
- /root/minio-data/minio-disk-2:/data2
command: server --console-address ':9001' /data #指定容器中的目录 /data
privileged: true
restart: always
prometheus:
image: 10.142.0.203:8082/prom/prometheus:latest
restart: always
ports:
- 9090:9090
volumes:
- ./prometheus:/etc/minio/prometheus
command: --web.enable-lifecycle --config.file=/etc/minio/prometheus/prometheus.yml
depends_on:
- minio
grafana:
image: 10.142.0.203:8082/grafana/grafana:latest
restart: always
ports:
- 3000:3000
volumes:
- ./grafana-storage:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=12345678
depends_on:
- prometheus
nodeexport:
image: 10.142.0.203:8082/prom/node-exporter:latest
restart: always
ports:
- 9100:9100
启动容器并查看容器状态 :
#-d 让容器在后台启动
docker-compose up -d
docker ps -a
确保容器起来后,服务部署完成!下一步进行服务验证:
登录http://master_ip:9000 验证MINIO
系统操作很简单,MINIO也是支持S3协议的一个文件系统,在新创建一个桶后,可以实现在桶中对文件进行存储增删改查等操作。
首先创建一个桶:
创建桶之后,就可以实现文件上传、下载、删除等操作。
三、Prometheus监控minio服务
1.Prometheus工作原理
Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并符合Prometheus定义的数据格式,就可以介入Prometheus监控。
现在回过头来再看Prometheus中有一个node-exporter服务,广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据。
通俗来讲,Prometheus会通过node-exporter去获取你的主机数据,从而监控的服务器各项数据。我们可以看下,访问node-exporter端口:
2.Prometheus验证Targets
登录 http://master_ip:9090 查看
如果看到我们minio的端口,state为“up”就监听成功了,Prometheus配置完成。
四、grafana实现系统监控
通过grafana对Prometheus监控数据进行显示做成仪表盘,这是我们最后一步也是最简单一部,
登录http://master_ip:3000 账号: admin 密码 12345678 步骤如下:
通过不同的json实现仪表盘的布局是不一样的,grafana会通过json生成不同的仪表盘。
五、最终效果与总结
1.最终效果
2.总结
对于整体的部署流程来说,是比较简单的,但是过程中有一些需要注意的地方,是非常容易踩坑的。对于这种运维部署来说,不像代码而言有明确的错误提示,部署的过程中有一点小失误就会导致服务挂掉,而且很难找到源头,需要顺藤摸瓜,过程算是非常慢的。本文希望可以帮助需要的人,哪怕是一个点也好。
对于MINIO呢,和其他支持S3协议的文件系统大同小异,可以通过.Net,Java,Python对接口进行重写,一般可以自己重新设计个中文前端页面,覆写文件系统使其看起来更加简洁。该系统适合于企业级应用的文件存储,或者用于大学毕业生做毕业设计也是个不错的选择!欢迎有问题的小伙伴在评论区,前来讨论。
六、附录:grafana-panel.json(有点长)
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
},
"type": "dashboard"
}
]
},
"description": "MinIO dashboard - https://min.io/",
"editable": true,
"fiscalYearStartMonth": 0,
"gnetId": 12563,
"graphTooltip": 0,
"id": 20,
"iteration": 1709271530311,
"links": [
{
"icon": "external link",
"includeVars": true,
"keepTime": true,
"tags": [
"minio"
],
"type": "dashboards"
}
],
"liveNow": false,
"panels": [
{
"datasource": "${DS_PROMETHEUS}",
"description": "Minio is a high performance distributed object storage server, designed for large-scale private cloud infrastructure. For more information, check out the docs.",
"gridPos": {
"h": 3,
"w": 5,
"x": 0,
"y": 0
},
"id": 8,
"links": [],
"options": {
"content": "<img src=\"https://min.io/resources/img/logo/MINIO_wordmark.png\" style=\"height: 55px;\"></img>",
"mode": "html"
},
"pluginVersion": "8.5.0",
"transparent": true,
"type": "text"
},
{
"datasource": {
"type": "prometheus",
"uid": "L9YN4_oIz"
},
"description": "Total number of disks for current MinIO server instances",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "rgb(31, 120, 193)",
"mode": "fixed"
},
"mappings": [
{
"options": {
"match": "null",
"result": {
&