当前位置:   article > 正文

Minio教程_minio集群搭建

minio集群搭建

MinIO 英文官网地址
MinIO 中文官网地址

一、 minio单机部署

1.1创建目录,指定安装的目录

mkdir  -p   /opt/apps
mkdir -p /opt/apps/logs
cd /opt/apps
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod +x minio
  • 1
  • 2
  • 3
  • 4
  • 5

1.2通过环境变量,设置账户密码

export MINIO_ACCESS_KEY=minio                                     
export MINIO_SECRET_KEY=12345678
  • 1
  • 2

执行之后,账户名是 minio,密码是 12345678

1.3后台指定控制台的端口9001运行

cd /opt/apps
nohup ./minio  server --console-address  ":9001"   /data/minio_oss_srv  > /opt/apps/logs/minio.log 2>&1 &
  • 1
  • 2

启动之后,控制台地址为 IP地址:9001
API地址为 IP地址:9000

1.4打开网页控制台

在这里插入图片描述

1.5 其它命令

启动后会打印出AccessKey和SecretKey等信息

./minio server /data/minio_oss_srv
  • 1

自定义控制台端口号

cd /opt/apps
./minio server --console-address ":9001" /data/minio_oss_srv
  • 1
  • 2

修改默认账户密码,服务器bash环境窗口执行

export MINIO_ACCESS_KEY=minio                                     
export MINIO_SECRET_KEY=12345678
  • 1
  • 2

杀掉原有的进程,重新启动

netstat -antulp |  grep 9000
kill -9 进程PID
  • 1
  • 2

重启

cd /opt/apps
nohup ./minio  server --console-address  ":9001"   /data/minio_oss_srv  > /opt/apps/logs/minio.log 2>&1 &
  • 1
  • 2

二、minio集群部署

1、部署前说明

安装前需要再添加一个磁盘后将磁盘挂载到/opt/minio目录,minio集群部署需要独占磁盘分区,不能使用文件夹代替。
最开始直接在/opt/minio目录下面创建data启动时报错,后面挂载一个磁盘后就可以了,报错如图:
在这里插入图片描述
运行分布式 MinIO 实例的服务器时间差不应超过15分钟。
所有运行分布式 MinIO 设置的节点都是同构的,即相同的操作系统、相同数量的磁盘和相同的网络互连 。
MinIO 的节点需要具有相同的访问密钥和秘密密钥才能连接,即access key 和 MINIO secret key 都要一样。

2、创建目录

mkdir -p /opt/minio/{run,data} && mkdir -p /etc/minio
  • 1

3、挂载新的硬盘

挂载/opt/minio目录,具体挂载参考 linux 挂载新的硬盘
在这里插入图片描述
挂载完后,记得配置文件 /etc/fstab 也需要增加,不然服务器重启之后,就掉盘了
/dev/sdb1 /opt/minio ext4 defaults 0 0
在这里插入图片描述

4、下载Minio到/opt/minio/run

cd /opt/minio/run
wget https://dl.min.io/server/minio/release/linux-amd64/minio
  • 1
  • 2

5、创建启动脚本文件

vim /opt/minio/run/run.sh
  • 1

#Minio默认9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口
#注意 :
#MINIO_ROOT_USER:用户名,长度最小是5个字符
#MINIO_ROOT_PASSWORD:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
#–config-dir:指定集群配置文件目录

#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=adminbfd123
/opt/minio/run/minio server --config-dir /etc/minio \
        --address "0.0.0.0:9029" --console-address ":9000" \
        http://172.16.11.1:9029/opt/minio/data \
        http://172.16.11.2:9029/opt/minio/data  > minio_server.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6、创建停止脚本文件

cat <<EOF > /opt/minio/run/stop.sh
#!/bin/bash
#MinIO停止脚本
ps -ef | grep  minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9
 
if $? != 0;then
          echo "minio service stop failed."
            exit 1
fi
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

7、创建Minio.server

cat <<EOF > /etc/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
 
[Service]
WorkingDirectory=/opt/minio/run/
ExecStart=/opt/minio/run/run.sh
ExecStop=/opt/minio/run/stop.sh
 
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

8、权限修改

chmod +x /etc/systemd/system/minio.service && chmod +x /opt/minio/run/minio && chmod +x /opt/minio/run/run.sh && chmod +x /opt/minio/run/stop.sh
  • 1

9、启动集群

systemctl daemon-reload
systemctl start minio
systemctl enable minio
systemctl status minio.service
  • 1
  • 2
  • 3
  • 4

以上命令需要在所有机器创建完毕之后,依次执行启动命令

10、配置Nginx代理

生产环境一般都需要使用域名做访问,所以选择nginx。
可以在其中一台部署好nginx,也可以单独一台做nginx。
我这里选择在172.16.11.1配置nginx。

vim   minio-cluster.conf 
  • 1
 # websocket
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
upstream minio_console {
    server 172.16.11.1:9000 max_fails=3 fail_timeout=5s;
    server 172.16.11.2:9000 max_fails=3 fail_timeout=5s;

}
upstream minio_api {
    server 172.16.11.1:9029 max_fails=3 fail_timeout=5s;
    server 172.16.11.2:9029 max_fails=3 fail_timeout=5s;

}

server {
    listen          80;
    listen         443 ssl;
    server_name     cons.minio.com;
    
    ssl_certificate keys/abcty6/server.crt;
    ssl_certificate_key keys/abcty6/server.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    client_max_body_size     1G;   #如果上传文件大于1G,就需要更改这个参数
    client_header_timeout    1m;
    client_body_timeout      1m;
    proxy_connect_timeout    60s;
    proxy_read_timeout       1m;
    proxy_send_timeout       1m;
    
    location / {
        proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
        proxy_set_header        Host  $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_http_version 1.1;
        proxy_pass              http://minio_console;
        expires                 0;
 
}
}

server {
    listen          80;
    listen         443 ssl;
    server_name     apapi.minio.com;

    ssl_certificate keys/abcty6/server.crt;
    ssl_certificate_key keys/abcty6/server.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    client_max_body_size     1G;
    client_header_timeout    1m;
    client_body_timeout      1m;
    proxy_connect_timeout    60s;
    proxy_read_timeout       1m;
    proxy_send_timeout       1m;

    location / {
        proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
        proxy_set_header        Host  $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass              http://minio_api;
        expires                 0;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

重载nginx配置,由于这里是使用了测试域名,所以需要本机host文件做一下指向,把两个测试域名指向到172.16.11.1.
在这里插入图片描述

11、访问测试

在这里插入图片描述
输入账号密码,账号密码在刚才配置的启动文件里面 run.sh。

登录之后,查看集群是否成功。
在这里插入图片描述
这里查看到现在是两台服务器,说明集群已经部署完成。

MinIO客户端快速入门指南

MinIO - 构建高性能的云原生数据的多云对象存储

三、Minio数据迁移

1、前提说明

本次实验,从172.16.11.3 172.16.11.4集群中,把数据迁移到172.16.11.1,172.16.11.2。
在需要迁移的服务器上其中一台操作操作,我的在172.16.11.3操作。

2、下载二进制文件安装MC

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
  • 1
  • 2
  • 3

3、管理mc配置文件

./mc    config  host  add   hk   http://172.16.11.1:9029
  • 1

说明: ./mc 使用绝对路径
(hk) 名字可以随意命名,就是给你的云存储服务起了一个短点的外号,本次设定的存储服务指的是172.16.11.1这台上的minio服务。
http://172.16.11.1:9029 这个是代表往这台服务迁移数据的IP,端口根据那边的那台服务器minio的API端口决定。
在这里插入图片描述
mc config host list 列出主机信息
mc ls hk/ 列出远程那台的所有桶

4、给远程主机批量创建桶名

4.1 列出当前的所有桶名

172.16.11.3操作
本机想要列出所有桶名,命令如下

./mc config host add local http://172.16.11.3:9029     #本机创建主机别名
./mc  ls  local 或者 ./mc ls local | awk '{print substr($NF, 1, length($NF)-1)}'   #提取当前的桶名
  • 1
  • 2

4.2 所有的桶名写入到一个txt文件

172.16.11.3操作

/opt/src/mc ls local | awk '{print substr($NF, 1, length($NF)-1)}'  >>   /opt/src/bucket.txt
  • 1

4.3 使用for循环给远程主机创建桶

172.16.11.3操作

for bucket in $(cat /opt/src/bucket.txt)
do
    /opt/src/mc mb "hk/$bucket"
done
  • 1
  • 2
  • 3
  • 4

这里的远程主机"hk"就是172.16.11.1这台,执行完毕之后,就在172.16.11.1新的minio平台上创建了跟172.16.11.3一样的桶名字

5、拷贝文件和对象到新的服务器

5.1首次复制

#!/bin/bash
bucket_file="/opt/src/bucket.txt"
while IFS= read -r bucket
do
    find "/opt/minio/data/$bucket" -type f -exec /opt/src/mc cp -r {} "hk/$bucket" \;
done < "$bucket_file"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

5.2增量复制,跳过已经有的文件

#!/bin/bash
bucket_file="/opt/src/bucket.txt"
while IFS= read -r bucket
do
    source_dir="/opt/minio/data/$bucket"
    target_dir="hk/$bucket"

    # 检查本地目录和目标目录的文件是否一致
    if cmp -s <(find "$source_dir" -type f -printf '%P\n' | sort) <(find "$target_dir" -type f -printf '%P\n' | sort); then
        echo "目录 $target_dir 中的文件与本地目录 $source_dir 中的文件一致,跳过复制操作."
        continue
    fi

    /opt/src/mc cp -r "$source_dir"/* "$target_dir"
done < "$bucket_file"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

6、MinIO Client (mc)命令说明

ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监视文件和对象的事件。
policy 管理访问策略。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

更多命令可参考官网
更多教程参考他人博客

四、Python接入Minio

MinIO Python SDK 是简单存储服务(又名 S3)客户端,用于对任何与 Amazon S3 兼容的对象存储服务执行存储桶和对象操作。
最低要求,Python 3.7 或更高版本。

1.使用 pip 下载

yum  -y  install  install python3-pip
pip3 install minio
  • 1
  • 2

2.下载源

yum -y install git
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
tar zxvf setuptools-0.6c11.tar.gz
cd setuptools-0.6c11
python setup.py install
git clone https://github.com/minio/minio-py
cd minio-py
python setup.py install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以上是部署环境

3.配置上传代码

from minio import Minio
from minio.error import S3Error

def main():
   client = Minio(
        "minio-api.hao123.com",   ##这条是Minio的api接口域名,反代的是9000端口。
        access_key="K3weatwaSpaF", #这个是在Minio控制台页面新建的
        secret_key="WHHWWOPj8sargyarkIZhKnznNOTAN",  #这个是在Minio控制台页面新建的
    )

    
    found = client.bucket_exists("asiatrip")     #asiatrip  是在控制台创建的桶名
    if not found:
        client.make_bucket("asiatrip")    #asiatrip  是在控制台创建的桶名
    else:
        print("Bucket 'asiatrip' already exists")

    
    client.fput_object(
        "asiatrip", "1.txt", "/opt/test/1.txt",   #asiatrip  是在控制台创建的桶名  1.txt,是这个文件在服务器上的绝对路径。
    )
    print(
        "'/opt/test/1.txt' is successfully uploaded as "
        "object '1.txt' to bucket 'asiatrip'."
    )

if __name__ == "__main__":
    try:
        main()
    except S3Error as exc:
        print("error occurred.", exc)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

4.运行文件上传

python3   test.py
  • 1

在这里插入图片描述
源代码可参考: 官网

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/523814
推荐阅读
相关标签
  

闽ICP备14008679号