Minio 官方文档
概述
Docker方式可以直接部署成功,源码方式可以部署成功, 可执行文件目前没有测试成功,而且Minio官网本身推荐使用docker + k8s方式进行部署
描述:Minio集群至少需要四个节点才可以,至于分盘可以是4块,8块,这里我们生产环境没有这么多服务器,分别在两台服务器每台服务器一个节点,每个节点一块磁盘,默认使用的是纠删码模式,可以实现一个服务器的数据丢失,是没问题的,如果其中一台服务器宕机,则整体不可用,集群情况下是支持一半服务器宕机数据可读,不能上传,n/2+1服务在线可以实现读写功能
搭建方式
Docker构建
-
这里需要注意我使用的这个版本只需要提供一个端口即可,不需要特殊提供ui的访问页面
-
这里用的是Minio官网提供的以往版本
docker pull minio/minio:RELEASE.2021-01-16T02-19-44Z
-
docker 中所有镜像地址,总有一个你想要的
https://hub.docker.com/r/minio/minio -
通过下面命令可以让我们启动一个节点的服务,如果是开发环境可以这么玩,但是这不是我们想要的
docker run -p 9000:9000 --name minio -d minio/minio:RELEASE.2021-01-16T02-19-44Z server /data
-
单节点方式指定登录密码
docker run -d -p 9000:9000 --name minio -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio:RELEASE.2021-01-16T02-19-44Z server /data
-
挂载磁盘的方式
docker run -p 9000:9000 -d --name minio -v ~/minio/data:/data -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio:RELEASE.2021-01-16T02-19-44Z server /data
-
这里可以通过docker+minio的命令搭建集群,具体命令可以通过docker + minio的命令进行组合
基于docker-compose构建分布式集群环境
- 这里我们集群搭建使用docker-compose进行,官方不建议使用docker-compose作为生产环境,推荐k8s
安装docker-compose
- 根据Githu下载命令,此命令下载最新的文件,这是国内镜像:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
- 查看版本
docker-compose --version
- 输出一下完成安装:
安装Minio相关服务
- minio-docker-compose文件
version: '3.7'
# Settings and configurations that are common for all containers
x-minio-common: &minio-common
image: quay.io/minio/minio:RELEASE.2022-07-30T05-21-40Z
command: server --console-address ":9001" http://minio{1...4}/data{1...2}
expose:
- "9000"
- "9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
# starts 4 docker containers running minio server instances.
# using nginx reverse proxy, load balancing, you can access
# it through port 9000.
services:
minio1:
<<: *minio-common
hostname: minio1
volumes:
- data1-1:/data1
- data1-2:/data2
minio2:
<<: *minio-common
hostname: minio2
volumes:
- data2-1:/data1
- data2-2:/data2
minio3:
<<: *minio-common
hostname: minio3
volumes:
- data3-1:/data1
- data3-2:/data2
minio4:
<<: *minio-common
hostname: minio4
volumes:
- data4-1:/data1
- data4-2:/data2
nginx:
image: nginx:1.19.2-alpine
hostname: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "9000:9000"
- "9001:9001"
depends_on:
- minio1
- minio2
- minio3
- minio4
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
data1-1:
data1-2:
data2-1:
data2-2:
data3-1:
data3-2:
data4-1:
data4-2:
- nginx 负载配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# include /etc/nginx/conf.d/*.conf;
upstream minio {
server minio1:9000;
server minio2:9000;
server minio3:9000;
server minio4:9000;
}
upstream console {
ip_hash;
server minio1:9001;
server minio2:9001;
server minio3:9001;
server minio4:9001;
}
server {
listen 9000;
listen [::]:9000;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
}
server {
listen 9001;
listen [::]:9001;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
# To support websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://console;
}
}
}
使用Centos7 裸机源码方式构建Minio服务
-
源码构建需要依赖go语言相关环境,这个go语言的环境具体需要根据minio提供的版本进行安装,否则安装低版本不能执行,高版本打出来的包可能会执行出错,重新打包执行即可,我这个版本需要依赖的go环境是1.15以上版本,根据他这个安装即可,我所看的文档地址: https://github.com/minio/minio/tree/RELEASE.2021-01-16T02-19-44Z
-
注意点:
- 如果系统中有低于1.18的环境执行如下删除命令:
# 删除目录 sudo rm -rf /usr/local/go # 删除软连接 sudo rm -rf /usr/bin/go
- 安装go命令如下,具体版本可以自行调整:https://blog.csdn.net/qq_46497658/article/details/125098604
- 如果系统中有低于1.18的环境执行如下删除命令:
-
源码构建命令,我们这里用的是以往的版本进行构建,新版本的功能差别还是蛮大的,具体的版本可以通过minio的GitHub查看,这个打包命令是go1.18的,其他版本可能会报错:
GO111MODULE=on go install github.com/minio/minio@RELEASE.2021-01-16T02-19-44Z
-
Minio Github地址:
github.com/minio -
这里远程构建可能会执行失败的解决方案
-
安装git
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
-
下载源码,这个镜像放到了我的git里面国内拉取更快:
git clone https://gitee.com/li_chun_shengcc/minio.git
-
切换git你想要的版本
-
执行相关命令就行打包,这里可以联系博主:
QQ :1697383273
-
-
这里构建完之后会把可执行文件输出到你的go环境中,我机器中的地址如下:
/opt/go/bin/minio
-
单台启动命令:
./minio server /data
-
这里默认的访问端口也账号密码会输出到面板中
-
如果是本地环境可以关闭防火墙,相关命令如下:
# 设置开机禁用防火墙: systemctl disable firewalld.service #关闭防火墙: systemctl stop firewalld #检查防火墙状态: systemctl status firewalld
集群搭建
-
设置环境变量
vi /etc/profile
-
将Minio密码设置到环境变量中,每个节点都需要设置
export MINIO_ROOT_USER=lixiansheng export MINIO_ROOT_PASSWORD=lixiansheng
-
刷新环境变量配置
source /etc/profile
-
分别在每台机器上执行相同命令,我这里两个节点,分了五块磁盘,机器1两块,机器2三块
# 前台启动方式 minio server http://192.168.159.104/export1 http://192.168.159.104/export http://192.168.159.100/export1 http://192.168.159.100/export2 http://192.168.159.100/export3 #后台启动方式 nohup ./minio server http://ip1/export1 http://ip2/export1 > ./minio.log 2>&1 &
-
访问其中一台服务的端口9000就可以看到ui端,最简单的方式在从外层搭建一层负载,Nginx OpenRestry都可以