赞
踩
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
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=12345678
执行之后,账户名是 minio,密码是 12345678
cd /opt/apps
nohup ./minio server --console-address ":9001" /data/minio_oss_srv > /opt/apps/logs/minio.log 2>&1 &
启动之后,控制台地址为 IP地址:9001
API地址为 IP地址:9000
启动后会打印出AccessKey和SecretKey等信息
./minio server /data/minio_oss_srv
自定义控制台端口号
cd /opt/apps
./minio server --console-address ":9001" /data/minio_oss_srv
修改默认账户密码,服务器bash环境窗口执行
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=12345678
杀掉原有的进程,重新启动
netstat -antulp | grep 9000
kill -9 进程PID
重启
cd /opt/apps
nohup ./minio server --console-address ":9001" /data/minio_oss_srv > /opt/apps/logs/minio.log 2>&1 &
安装前需要再添加一个磁盘后将磁盘挂载到/opt/minio目录,minio集群部署需要独占磁盘分区,不能使用文件夹代替。
最开始直接在/opt/minio目录下面创建data启动时报错,后面挂载一个磁盘后就可以了,报错如图:
运行分布式 MinIO 实例的服务器时间差不应超过15分钟。
所有运行分布式 MinIO 设置的节点都是同构的,即相同的操作系统、相同数量的磁盘和相同的网络互连 。
MinIO 的节点需要具有相同的访问密钥和秘密密钥才能连接,即access key 和 MINIO secret key 都要一样。
mkdir -p /opt/minio/{run,data} && mkdir -p /etc/minio
挂载/opt/minio目录,具体挂载参考 linux 挂载新的硬盘
挂载完后,记得配置文件 /etc/fstab 也需要增加,不然服务器重启之后,就掉盘了
/dev/sdb1 /opt/minio ext4 defaults 0 0
cd /opt/minio/run
wget https://dl.min.io/server/minio/release/linux-amd64/minio
vim /opt/minio/run/run.sh
#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
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
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
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
systemctl daemon-reload
systemctl start minio
systemctl enable minio
systemctl status minio.service
以上命令需要在所有机器创建完毕之后,依次执行启动命令
生产环境一般都需要使用域名做访问,所以选择nginx。
可以在其中一台部署好nginx,也可以单独一台做nginx。
我这里选择在172.16.11.1配置nginx。
vim minio-cluster.conf
# 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; } }
重载nginx配置,由于这里是使用了测试域名,所以需要本机host文件做一下指向,把两个测试域名指向到172.16.11.1.
输入账号密码,账号密码在刚才配置的启动文件里面 run.sh。
登录之后,查看集群是否成功。
这里查看到现在是两台服务器,说明集群已经部署完成。
本次实验,从172.16.11.3 172.16.11.4集群中,把数据迁移到172.16.11.1,172.16.11.2。
在需要迁移的服务器上其中一台操作操作,我的在172.16.11.3操作。
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
./mc config host add hk http://172.16.11.1:9029
说明: ./mc 使用绝对路径
(hk) 名字可以随意命名,就是给你的云存储服务起了一个短点的外号,本次设定的存储服务指的是172.16.11.1这台上的minio服务。
http://172.16.11.1:9029 这个是代表往这台服务迁移数据的IP,端口根据那边的那台服务器minio的API端口决定。
mc config host list 列出主机信息
mc ls hk/ 列出远程那台的所有桶
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)}' #提取当前的桶名
172.16.11.3操作
/opt/src/mc ls local | awk '{print substr($NF, 1, length($NF)-1)}' >> /opt/src/bucket.txt
172.16.11.3操作
for bucket in $(cat /opt/src/bucket.txt)
do
/opt/src/mc mb "hk/$bucket"
done
这里的远程主机"hk"就是172.16.11.1这台,执行完毕之后,就在172.16.11.1新的minio平台上创建了跟172.16.11.3一样的桶名字
#!/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"
#!/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"
ls 列出文件和文件夹。 mb 创建一个存储桶或一个文件夹。 cat 显示文件和对象内容。 pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。 share 生成用于共享的URL。 cp 拷贝文件和对象。 mirror 给存储桶和文件夹做镜像。 find 基于参数查找文件。 diff 对两个文件夹或者存储桶比较差异。 rm 删除文件和对象。 events 管理对象通知。 watch 监视文件和对象的事件。 policy 管理访问策略。 config 管理mc配置文件。 update 检查软件更新。 version 输出版本信息。
MinIO Python SDK 是简单存储服务(又名 S3)客户端,用于对任何与 Amazon S3 兼容的对象存储服务执行存储桶和对象操作。
最低要求,Python 3.7 或更高版本。
1.使用 pip 下载
yum -y install install python3-pip
pip3 install minio
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
以上是部署环境
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)
4.运行文件上传
python3 test.py
源代码可参考: 官网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。