minio搭建单机/集群

MinIO说明
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

1 单机版搭建

操作系统 搭建方式
linux docker容器
linux 宿主机

1.1 安装

1.1.1基于docker安装

docker search minio
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data

docker 启服务时指定挂在目录和登陆的用户名和密码

docker run -p 9000:9000 --name minio1
-e "MINIO_ACCESS_KEY=admin"
-e "MINIO_SECRET_KEY=12345678"
-v /Users/xiyou/my_minio/data:/data
-v /Users/xiyou/my_minio/config:/root/.minio
minio/minio server /data
启服务之后可通过http://127.0.0.1:9000访问

输入账号密码之后页面.png
创建bucket.png

查看文件在本机的存储.png

1.1.2基于linux平台搭建

Platform Architecture URL
GNU/Linux 64-bit Intel https://dl.m in.io/server/minio/release/linux-amd64/minio

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /xiyou/my_minio/data

启动服务.png

打马处是我的名字,路径可以自己选择哈
后台运行:nohup ./minio server /xiyou/my_minio/data > /xiyou/my_minio/data/minio.log 2>&1 &
可以使用Accesskey和Secretkey作为账号和密码登陆页面使用

1.2单机版数据备份与恢复

将data数据目录拷贝至新服务器即可重启服务,恢复数据。
具体实施如下:
使用两个linux服务器作测试
node1: 10.211.55.5
node2: 10.211.55.8
步骤1: 在node2上采用linux单机版启动minio服务后,创建两个bucket,分别为bucket1和bucket2,在bucket中上传文件;
步骤2: 停止node2上的minio服务;
步骤3: 将node2上的my_minio文件夹整个拷贝至node1;
scp -r ./my_minio [email protected]:/xiyou/
步骤4: 在node1重新启服务

node1.png

2. 集群搭建(Distributed MinIO)

2.1 集群服务器配置及启动

既然单机的minio可以采用异结点备份的方式恢复数据,为什么还要使用Distributed MinIO?
数据保护/高可用/限制/一致性

启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。

注意

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

参考:https://docs.min.io/cn/distributed-minio-quickstart-guide.html

名称 IP
node1 10.211.55.5
node2 10.211.55.8
node3 10.211.55.9
node4 10.211.55.10
nginx 10.211.55.5

搭建的是4个结点的集群
示例: 启动分布式Minio实例,4个节点,每节点1块盘

minio集群架构.jpg

搭建命令:
mkdir -p /xiyou/software
cd /xiyou/software
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 ./minio server http://10.211.55.5/minio_data http://10.211.55.8/minio_data http://10.211.55.9/minio_data http://10.211.55.10/minio_data
注解:./minio为minio文件路径,minio_data是自定义的minio的文件的存放路径 可采取nohup 加& 进行后台启动
启动完成.png

可访问任一结点:
http://10.211.55.5:9000
http://10.211.55.8:9000
http://10.211.55.9:9000
http://10.211.55.10:9000

脚本方式启动
1.启动脚本

mkdir -p /opt/minio
vim /opt/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio123
/xiyou/software/minio server http://10.211.55.5/minio_data \
                       http://10.211.55.8/minio_data\
                       http://10.211.55.9/minio_data\
                       http://10.211.55.10/minio_data

2.服务脚本

vim /usr/lib/systemd/system/minio.service
# vim  /etc/systemd/system/minio.service #ubuntu下的启动脚本
---------------------------------------------------------------------------------------
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/xiyou/software/
ExecStart=/opt/minio/run.sh

Restart=on-failure
RestartSec=5

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
--------------------------------------------------------------------------------------
chmod +x /usr/lib/systemd/system/minio.service #centos的启动脚本
# chmod +x /etc/systemd/system/minio.service #ubuntu的启动脚本

#参考minio.service配置: https://github.com/minio/minio-service/blob/master/linux-systemd/minio.service

3.服务启动

chmod +x /opt/minio/run.sh
systemctl daemon-reload #刷新配置
systemctl enable minio
systemctl start minio
systemctl status minio

启动脚本后,浏览器打开网址进行测试:


浏览器测试

2.2 集群高可用测试

单机Minio服务存在单点故障,相反,如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你需要至少有N/2+1个节点 Quorum 来创建新的对象。
例如,一个8节点的Minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据。

2.2.1 测试结点down机对集群读写的影响

  1. 只down一个结点node1,集群可以正常使用,可读可写


    down掉一个node的集群可正常访问

    2. down两个结点node1、node2,集群可读但不可写


    down两个结点集群可读不可写

    3.down三个结点node1、node2、node3,集群不能访问
    down三个结点集群不能访问

2.2.2 模拟磁盘损坏影响

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
开始模拟------上传一个文件之后,会有两个文件part.1 xl.json
part.1四个node结点的查看会不同,有乱码

四个node结点的xl.json

1、删掉node1中文件testMinio2.txt的part1,集群文件仍然可读;
2、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1,集群文件仍然可读;
3、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part,集群仍然可读;
4、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part、node1中文件testMinio2.txt的xl.part,集群仍然可读,但是浏览器中显示多了一个空文件夹testMinio2.txt;
集群中多出一个空文件夹

5、删掉node1中文件testMinio2.txt的part1、node2中文件testMinio2.txt的part1、node2中文件testMinio2.txt的xl.part、node1中文件testMinio2.txt的xl.part、node3中文件testMinio2.txt的part1,下载文件出现异常,无法读文件;
文件下载异常

2.3 备份恢复

通过将数据目录下的数据文件拷贝到异节点对应的数据目录下,再起minio集群,可以实现数据恢复。

3. nginx配置

3.1 nginx安装

根据自己的操作系统选择合适的安装方式
http://nginx.org/en/linux_packages.html

##我的os是centos7
#Install the prerequisites:
sudo yum install yum-utils

vim /etc/yum.repos.d/nginx.repo
#with the following contents:
-----------------------------------------------------------------------------------------
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
---------------------------------------------------------------------------------------
sudo yum install nginx

3.2 nginx配置

#安装好nginx之后就可以启动nginx
systemctl start nginx
#查看下端口监听
netstat -lntup|grep 80
#查看下nginx.conf文件的配置
cat /etc/nginx/nginx.conf
----------------------------------------------------------------------------------
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;

    #include /etc/nginx/conf.d/*.conf;
    upstream minio_servers {
    ip_hash;
    server 10.211.55.5:9000;
    server 10.211.55.8:9000;
    server 10.211.55.9:9000;
    server 10.211.55.10:9000;
    }
    server {
    listen 80;
        server_name minio.dev.com;

    location / {
        proxy_set_header Host $host;
        proxy_pass       http://minio_servers;
        proxy_redirect  off;
    #proxy_set_header X-Real-IP $remote_addr;
    #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #client_body_buffer_size 10M;           #缓冲区代理缓冲请求的最大字节数
    #client_max_body_size 10G;         #客户端最大文件上传大小为10G
    #proxy_buffers 1024 4k;
    #proxy_read_timeout 300;
    #proxy_next_upstream error timeout http_404;
    }
}
}
--------------------------------------------------------------------------------
#location 内的注释的字段,建议可以在查看后根据需求修改
#可参考 https://docs.min.io/cn/setup-nginx-proxy-with-minio.html
#https://www.nginx.com/blog/enterprise-grade-cloud-storage-nginx-plus-minio/

3.3 配置hosts查看访问

配置hosts
vim /etc/hosts
10.211.55.5 minio.dev.com
哇塞!可以正常访问啦!


域名访问

4. MinIO Client

4.1 安装mc

cd /xiyou/software/
wget https://dl.minio.io/client/mc/release/linux-amd64/mc

4.2 使用mc

chmod +x mc
./mc config host add mcminio http://10.211.55.8:9000 minio minio123
mc ls mcminio
./mc mb mcminio/third

通过mc创建bucket

参考:https://docs.min.io/docs/minio-client-quickstart-guide
其他的mc使用自己去参考官网

5. 那些年我们一起踩过的坑

5.1 node结点的ntp时间设置

node结点的ntp时间设置,别怪我没提醒你
设置系统时间为中国时区并启用NTP同步
yum install ntp //安装ntp服务
systemctl enable ntpd //开机启动服务
systemctl start ntpd //启动服务
timedatectl set-timezone Asia/Shanghai //更改时区
timedatectl set-ntp yes //启用ntp同步
ntpq -p //同步时间
参考https://www.cnblogs.com/tangxiaosheng/p/4986375.html

5.2 Allow port access for Firewalls

iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
service iptables restart
参考:https://github.com/minio/minio

5.3 解决网页“打转转”问题

ifconfig ens4 mtu 1450
这跟系统的MTU设置有关,默认一般会设置为1500,有的系统也会设置为1450。集群中的MTU值一定要保持一致,如果是有多张网卡的,也可以把多张网卡的MTU值设置一致。

参考文档:
https://github.com/minio/minio/blob/master/README_zh_CN.md
https://github.com/minio/minio

你可能感兴趣的:(minio搭建单机/集群)