docker安装MinIO
docker pull minio/minio:RELEASE.2022-08-13T21-54-44Z
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name minio \
--restart=always \
-v ~/minio/data:/data \
-e "MINIO_ROOT_USER=Admin" \
-e "MINIO_ROOT_PASSWORD=Admin@2022" \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
minio/minio:RELEASE.2022-08-13T21-54-44Z \
server /data --console-address ":9090"
访问地址:http://xxx:9090
2、二进制
# 下载地址:https://dl.min.io/server/minio/release/linux-amd64/
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio && mv minio /usr/bin
nohup minio server ~/minio --console-address ":9090" > minio.log 2>&1 &
# 访问:ip+9090端口
# 启动日志里面的用户密码
RootUser: minioadmin
RootPass: minioadmin
netstat -tnlp |grep minio
3、yum
wget https://dl.min.io/server/minio/release/linux-amd64/minio-20220813215444.0.0.x86_64.rpm
nohup minio server ~/minio --console-address ":9090" > minio.log 2>&1 &
# 访问:ip+9090端口
# 启动日志里面的用户密码
RootUser: minioadmin
RootPass: minioadmin
netstat -tnlp |grep minio
2、分布式MinIO
4、k8s-StatefulSet
kubectl label node node1 node=minio
kubectl label node node2 node=minio
kubectl create ns minio
cat > minio.yml << 'EOF'
apiVersion: v1
kind: Service
metadata:
name: minio
labels:
app: minio
namespace: minio
spec:
clusterIP: None
ports:
- port: 9000
name: data
- port: 9001
name: console
selector:
app: minio
---
apiVersion: v1
kind: Service
metadata:
name: minio-service
namespace: minio
spec:
type: NodePort
ports:
- name: data
nodePort: 31900
port: 9000
targetPort: 9000
protocol: TCP
nodePort:
- name: console
nodePort: 31901
port: 9001
targetPort: 9001
protocol: TCP
nodePort:
selector:
app: minio
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: minio
namespace: minio
spec:
serviceName: "minio"
replicas: 4
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
nodeSelector:
node: minio
containers:
- name: minio
env:
- name: MINIO_ROOT_USER
value: "Admin"
- name: MINIO_ROOT_PASSWORD
value: "Admin@2022"
image: minio/minio:RELEASE.2022-08-13T21-54-44Z
imagePullPolicy: IfNotPresent
command:
- /bin/sh
- -c
- minio server --console-address ":9001" http://minio-{0...3}.minio.minio.svc.cluster.local:9000/data
ports:
- name: data
containerPort: 9000
protocol: "TCP"
- name: console
containerPort: 9001
protocol: "TCP"
volumeMounts:
- name: minio-data
mountPath: /data
- name: time-mount
mountPath: /etc/localtime
volumes:
- name: time-mount
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:
- metadata:
name: minio-data
spec:
storageClassName: "managed-nfs-storage"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Ti
EOF
MinIO客户端mc(备份、迁移)
docker pull minio/mc
docker run -itd \
--name minio-mc \
-w /data \
--restart=always \
-v /data/minio-backups:/data \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
--entrypoint=/bin/sh \
minio/mc
docker exec -it minio-mc sh
mc config host ls
mc config host add minio http://192.168.1.201:9000 Admin Admin@2022 --api S3v4
mc config host add minio http://192.168.1.201:31900 Admin Admin@2022 --api S3v4
mc alias set minio2 http://192.168.1.201:9000 Admin Admin@2022
===
计划任务
1、每天凌晨0点备份
cat > /data/minio-backups/000.sh << 'EOF'
DATE=`date +%F_%H-%M`
mc mirror minio/000 minio-000/$DATE/000
EOF
[root@master ~]# mkdir -p /data/minio-mc-log
[root@master ~]# crontab -e
[root@master ~]# crontab -l
0 0 * * * docker exec minio-mc sh /data/000.sh >> /data/minio-mc-log/mc.log 2>&1
[root@master ~]# crontab -l # 每分钟
* * * * * docker exec minio-mc sh /data/000.sh >> /data/minio-mc-log/mc.log 2>&1
2、每天凌晨2点备份
[root@master ~]# crontab -l
00 2 * * * docker exec minio-mc sh /data/000.sh >> /data/minio-mc-log/mc.log 2>&1
手动
docker exec -it minio-mc sh -c 'DATE=`date +%F_%H-%M` && mc mirror minio/000 minio-000/$DATE/000'
docker exec minio-mc sh -c 'DATE=`date +%F_%H-%M` && mc mirror minio/000 minio-000/$DATE/000'
备份到另外一个minio上
# minio服务端1
mc config host add minio http://192.168.1.201:9000 Admin Admin@2022 --api S3v4
# minio服务端2
mc config host add minio-bak http://192.168.1.202:9000 Admin Admin@2022 --api S3v4
# 1、要先创建一个桶
mc mb minio-bak/000
# 2、方式1、文件到桶
DATE=`date +%F_%H-%M` && mc mirror minio/000 minio-000/$DATE/000#备份文件
mc mirror /data/minio-000/2022-08-23_00-00/000/ minio-bak/000
# 3、方式2、桶到桶
mc mirror minio/000 minio-bak/000
保留7分钟前的备份(测试)
find /data/minio-backups/minio-000 -mmin +7 -name "2022*"
find /data/minio-backups/minio-000 -mmin +7 -name "2022*" -exec rm -rf {} \; 1>/dev/null 2>&1
cat > /data/minio-rm-rf/minio-000/000.sh << 'EOF'
find /data/minio-backups/minio-000 -mmin +7 -name "2022*" -exec rm -rf {} \; 1>/dev/null 2>&1
EOF
[root@master ~]# crontab -l
* * * * * sh /data/minio-rm-rf/minio-000/000.sh
/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
保留7天前的备份(生产)
find /data/minio-backups/minio-000 -mtime +7 -name "2022*"
find /data/minio-backups/minio-000 -mtime +7 -name "2022*" -exec rm -rf {} \; 1>/dev/null 2>&1
cat > /data/minio-rm-rf/minio-000/000.sh << 'EOF'
find /data/minio-backups/minio-000 -mtime +7 -name "2022*" -exec rm -rf {} \; 1>/dev/null 2>&1
EOF
[root@master ~]# crontab -l
* * * * * sh /data/minio-rm-rf/minio-000/000.sh
[root@master /data]# tree -d
.
├── minio-backups
│ └── minio-000
│ ├── 2022-08-22_17-21
│ │ └── 000
│ ├── 2022-08-22_17-22
│ │ └── 000
│ ├── 2022-08-22_17-23
│ │ └── 000
│ ├── 2022-08-22_17-24
│ │ └── 000
│ ├── 2022-08-22_17-25
│ │ └── 000
│ ├── 2022-08-22_17-26
│ │ └── 000
│ └── 2022-08-22_17-27
│ └── 000
├── minio-mc-log
└── minio-rm-rf
└── minio-000
19 directories
[root@master /data]#