minio 部署、迁移、使用

news2024/11/24 16:24:32

一、minio 部署

1、单节点部署

部署IP:192.168.206.10

1.1、下载minio的二进制文件

wget https://dl.min.io/server/minio/release/linux-amd64/minio

1.2、规划磁盘

minio 数据目录一定不能和 跟/ 在一个磁盘上,要单独挂载,比如规划将minio的数据目录置于/data/minio,如果按照以下的磁盘,/mkdir /data/minio后,目录是在 / 下创建。

故你需要将/data目录单独挂一块盘或者将/data/minio目录单独挂一块盘,否则后续启动会提示Error: Drive `/data/minio/data1` is part of root drive, will not be used 

API: SYSTEM()
Time: 10:12:55 UTC 08/12/2022
Error: Drive `/data/minio/data1` is part of root drive, will not be used (*errors.errorString)
       8: internal/logger/logger.go:259:logger.LogIf()
       7: cmd/erasure-sets.go:1243:cmd.markRootDisksAsDown()
       6: cmd/format-erasure.go:800:cmd.initFormatErasure()
       5: cmd/prepare-storage.go:198:cmd.connectLoadInitFormats()
       4: cmd/prepare-storage.go:282:cmd.waitForFormatErasure()
       3: cmd/erasure-server-pool.go:109:cmd.newErasureServerPools()
       2: cmd/server-main.go:694:cmd.newObjectLayer()
       1: cmd/server-main.go:531:cmd.serverMain()

添加磁盘(演示环境资源有限,只是添加一块2G盘符),由于已经有一块硬件(sda),故第二块磁盘名称为sdb (Linux 硬盘知识)

添加磁盘后开机,进行磁盘格式化分区,并挂载到/data/minio上,操作如下

[root@master01 ~]# fdisk -l /dev/sdb

[root@master01 ~]# fdisk /dev/sdb

命令(输入 m 获取帮助):n                      # n 创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p                        # n 创建主分区
分区号 (1-4,默认 1):                        #  直接回车,走默认1
起始 扇区 (2048-4194303,默认为 2048):       # 直接回车,从默认2048开始
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303):   # 直接回车,说明有多少做多少G硬盘
将使用默认值 4194303
分区 1 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):p     # 打印

磁盘 /dev/sdb:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x23a6127b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4194303     2096128   83  Linux

命令(输入 m 获取帮助):w      # 保存分区
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

[root@master01 ~]# ll /dev/sdb*
brw-rw---- 1 root disk 8, 16 4月   7 04:43 /dev/sdb
brw-rw---- 1 root disk 8, 17 4月   7 04:43 /dev/sdb1

[root@master01 ~]# mkfs.xfs  /dev/sdb1   # 格式化分区
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131008 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=524032, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@master01 ~]# blkid           # 查看/dev/sdb1的uuid
/dev/sda1: UUID="c219aeb3-fb5b-4009-9e9c-e3396a36ea3b" TYPE="xfs"
/dev/sda2: UUID="B6PX7v-uSkg-08db-w9V3-TT31-x7x5-ehMsr4" TYPE="LVM2_member"
/dev/sdb1: UUID="1f00db8b-dc34-4528-93ad-043192739a20" TYPE="xfs"
/dev/mapper/centos-root: UUID="243723b9-2e4d-40a6-aed9-23e227d61572" TYPE="xfs"
/dev/mapper/centos-swap: UUID="9ded6aff-9d46-4b84-abb9-1de8691c5bf7" TYPE="swap"

[root@master01 ~]# echo "UUID=1f00db8b-dc34-4528-93ad-043192739a20 /data/minio xfs defaults 0 0 " >> /etc/fstab  # 将/dev/sdb1 挂载到 /data/minio


[root@master01 ~]# tail -n 2 /etc/fstab
#UUID=e27dc238-c4d9-4921-81a0-53d7002f0e33 /opt/yyiuap/  xfs defaults 0 0
UUID=1f00db8b-dc34-4528-93ad-043192739a20 /data/minio xfs defaults 0 0

[root@master01 ~]# mount -a    # 读取/etc/fstab 文件重新挂载

[root@master01 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   48G   11G   38G   22% /
devtmpfs                 899M     0  899M    0% /dev
tmpfs                    911M     0  911M    0% /dev/shm
tmpfs                    911M  9.6M  902M    2% /run
tmpfs                    911M     0  911M    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
tmpfs                    183M     0  183M    0% /run/user/0
/dev/sdb1                2.0G   33M  2.0G    2% /data/minio     # 发现已经挂载

1.3、规划目录结构和时间服务器

[root@master minio]# ntpdate -u cn.pool.ntp.org
[root@master minio]# mkdir bin data1 data2 config certs log run
[root@192 opt]# tree -f minio/
minio
├── minio/bin                              # 二进制文件目录
│   └── minio/bin/minio
├── minio/certs                            # 证书文件目录
│   ├── minio/certs/private.key            # 私钥文件
│   ├── minio/certs/public.crt             # 证书文件
├── minio/config                           # 配置文件目录
├── minio/data1                            # minio数据目录1
├── minio/data2                            # minio数据目录2 
├── minio/log                              # 日志文件目录
│   └── minio/log/minio.log                # 日志文件
└── minio/run                              # 自定义脚本
    ├── minio/run/create_cert.sh           # 生成证书脚本
    ├── minio/run/minio.service            # minio service文件
    ├── minio/run/stop.sh                  # minio服务停止脚本
    └── minio/run/start.sh                 # minio服务启动脚本

1.4、配置启动参数

  • 将下载的 minio 放入 /data/minio/bin/
[root@master bin]# cd /data/minio/bin
[root@master bin]# rz minio
[root@master bin]# ll   
-rw-r--r-- 1 root root 96837632 4月   7 11:51 minio
  • 定义minio.service(分https和http启动)
[root@master minio]#  vi /usr/lib/systemd/system/minio_http.service
[Unit]
Description=Minio service
Documentation=This is a Minio Service.

[Service]
Type=forking
# 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
TimeoutStartSec=10
# 工作目录
WorkingDirectory=/data/minio
# 服务运行用户
User=root
# 服务运行用户组
Group=root
Restart=on-failure
RestartSec=15s
ExecStart=/data/minio/run/start_http.sh
ExecStop=/data/minio/run/stop.sh

[Install]
WantedBy=multi-user.target
[root@master minio]#  vi /usr/lib/systemd/system/minio_https.service
[Unit]
Description=Minio service
Documentation=This is a Minio Service.

[Service]
Type=forking
# 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
TimeoutStartSec=10
# 工作目录
WorkingDirectory=/data/minio
# 服务运行用户
User=root
# 服务运行用户组
Group=root
Restart=on-failure
RestartSec=15s
ExecStart=/data/minio/run/start_https.sh
ExecStop=/data/minio/run/stop.sh

[Install]
WantedBy=multi-user.target
  • start.sh 启动脚本(https)
[root@master01 run]# vi /data/minio/run/start_https.sh
#!/bin/bash
## MinIO启动脚本

# 设置环境变量
# 设置HOME
export MINIO_HOME=/data/minio
# 默认配置文件目录${HOME}/.minio,默认会将配置信息生成到config.json文件
export MINIO_COFNIG_DIR=/${MINIO_HOME}/config
# TLS证书目录:
#    私钥private.key
#    证书public.crt
export MINIO_CERTS_DIR=/${MINIO_HOME}/certs
# 日志目录
export MINIO_LOG_PATH=/${MINIO_HOME}/log
# 访问凭证AK
export MINIO_ROOT_USER=minio_admin
# 访问凭证SK
export MINIO_ROOT_PASSWORD=minio_admin!@#
# 是否开启web访问,默认是开启
export MINIO_BROWSER=on
# 证书密码
export MINIO_CERT_PASSWD=admin123!@#
# 支持path-style访问,默认 http://mydomain.com/bucket/object
export MINIO_DOMAIN=test_minio.com
# MINIO的集群中各节点IP
export MINIO_HOST=192.168.206.10
# 39000 为API调用接口, 9000为web console接口
# 启动minio
nohup  /${MINIO_HOME}/bin/minio server \
      --config-dir ${MINIO_COFNIG_DIR} \
      --certs-dir ${MINIO_CERTS_DIR} \
      --address ${MINIO_HOST}:39000 --console-address ":9000" \
      https://${MINIO_HOST}/${MINIO_HOME}/data1 https://${MINIO_HOST}/${MINIO_HOME}/data2 \
      >> ${MINIO_LOG_PATH}/minio.log 2>&1 &

其中 MINIO_CERTS_DIR=/${MINIO_HOME}/certs   和   MINIO_CERT_PASSWD=admin123!@#  定义的https证书

minio 是支持副本的,也就是说传入minio中的数据,会一摸一样复制两份分别在规划/data//minio/data1 和  /data//minio/data2中,数据会存在两份,在没有设置纠删码的前提下。故需要在启动脚本中配置神声明

如果规划中,如果项设置3个存储目录,则就要有/data//minio/data1 和  /data//minio/data2 和  /data//minio/data3,然后在修改启动参数如下()

minio 在新版本后,控制台页面的端口和api端口区分出来,如何配置如下

  • start.sh 启动脚本(http)
[root@master01 run]# vi /data/minio/run/start_http.sh
#!/bin/bash
## MinIO启动脚本

# 设置环境变量
# 设置HOME
export MINIO_HOME=/data/minio
# 日志目录
export MINIO_LOG_PATH=/${MINIO_HOME}/log
# 访问凭证AK
export MINIO_ROOT_USER=minio_admin
# 访问凭证SK
export MINIO_ROOT_PASSWORD=minio_admin!@#
# 是否开启web访问,默认是开启
export MINIO_BROWSER=on
# 支持path-style访问,默认 http://mydomain.com/bucket/object
export MINIO_DOMAIN=test_minio.com
# MINIO的集群中各节点IP
export MINIO_HOST=192.168.206.10
# 39000 为API调用接口, 9000为web console接口
# 启动minio
nohup  /${MINIO_HOME}/bin/minio server \
      --address ${MINIO_HOST}:39000 --console-address ":9000" \
      http://${MINIO_HOST}/${MINIO_HOME}/data1 http://${MINIO_HOST}/${MINIO_HOME}/data2 \
      >> ${MINIO_LOG_PATH}/minio.log 2>&1 &
  • stop.sh 停止脚本
[root@master01 run]# cat /data/minio/run/stop.sh
#!/bin/bash
## MinIO停止脚本
ps -ef | grep  minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9

if [ $? -ne 0 ];then
  echo "minio service stop failed."
  exit 1
fi
  • 生成https证书文件,参考英文官网 3.2.2 Generate a private key with RSA
[root@master certs]# vi /data/minio/certs/create_cert.sh
#!/bin/bash
# 用来生成pem证书文件
# sh create_cert.sh
set -e

# 从外界读取输入参数到指定变量
function read_input() {
    read -p "please input $1 parms:" $2
}
# 初始化输入参数
function init_input_param() {
  read_input "cert domain" "DOMAIN"
  read_input "cert path" "CERT_PATH"
  read_input "cert password" "PASSWORD"
  readonly IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}')
  readonly DNS=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $4}' | awk -F"/" '{print $1}')
}

# 生成openssl.conf文件
function generate_openssl_config() {
cat > ${CERT_PATH}/openssl.conf <<-EOF
  [req]
  distinguished_name = req_distinguished_name
  x509_extensions = v3_req
  prompt = no

  [req_distinguished_name]
  C = CN
  ST = VA
  L = Somewhere
  O = MyOrg
  OU = MyOU
  CN = ${DOMAIN}

  [v3_req]
  subjectAltName = @alt_names

  [alt_names]
  IP.1 = 127.0.0.1
  IP.2 = ${IP}
  DNS.1 = ${DNS}
  DNS.2 = ${DOMAIN}
EOF
}

# openssl 生成私钥
function generate_private_key() {
  # 生成长度为2048的私钥
  openssl genrsa -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private-pkcs8.key 2048
  # 转换为PCKS-1
  openssl rsa -passin pass:${PASSWORD} -in ${CERT_PATH}/private-pkcs8.key -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private.key
}

# 生成自签名文件
function generate_self_sign_cert() {
  openssl req -new -x509 -nodes -days 730 -keyout ${CERT_PATH}/private.key -passout pass:${PASSWORD} -out ${CERT_PATH}/public.crt -config ${CERT_PATH}/openssl.conf
}

# 清除
function clean() {
  rm -rf ${CERT_PATH}/openssl.conf
  rm -rf ${CERT_PATH}/private-pkcs8.key
}

# 执行流程
function main() {
  init_input_param
  generate_openssl_config
  generate_private_key
  generate_self_sign_cert
  clean
}

main

[root@master certs]# chmod +x create_cert.sh

执行命令: sh create_cert.sh,输入以下参数,如图所示

1.5、注册系统服务,并启动服务

启动minio(https)

[root@master minio]# chmod 755 /data/minio/run/* 
[root@master minio]# chmod +x /data/minio/bin/minio
# 开机自启minio.service
systemctl enable minio.service
# 刷新服务
systemctl daemon-reload
# 启动服务
systemctl start minio_https.service

如下日志代表成功

访问页面 https://192.168.206.10:9000/browser,如果登录后,页面为空白,则换成其他浏览器

启动minio(http)

http协议,有时候浏览器登录后显示空白页,需要换浏览器、清理缓存测试

[root@master run]# systemctl stop minio_https.service
[root@master log]# systemctl start minio_https.service

命令行启动服务(另一种方案,直接在shell界面)

[root@master bin]# MINIO_ROOT_USER=minio_admin MINIO_ROOT_PASSWORD=minio_admin\!\@\# ./minio server /data/minio/data1 /data/minio/data2 --console-address ":9000" --address :39000

2、集群部署

规划机器192.169.206.5  192.169.206.6  192.169.206.7  ,每个机器3个存储目录 data1 data2 data3

2.1、环境准备

下载minio、挂载磁盘,同步时间服务器具体看上述(单节点部署(下载minio的二进制文件) 和 (规划磁盘) )

2.2、规划目录结构

[root@master minio]# mkdir bin data1 data2 data3 config certs log run

2.3、配置启动参数

  • 将下载的 minio 放入 /data/minio/bin/
[root@master bin]# cd /data/minio/bin
[root@master bin]# rz minio
[root@master bin]# ll   
-rw-r--r-- 1 root root 96837632 4月   7 11:51 minio
  • 定义minio.service(https启动)
[root@master minio]#  vi /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=This is a Minio Service.
 
[Service]
Type=forking
# 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
TimeoutStartSec=10
# 工作目录
WorkingDirectory=/data/minio
# 服务运行用户
User=root
# 服务运行用户组
Group=root
Restart=on-failure
RestartSec=15s
ExecStart=/data/minio/run/start.sh
ExecStop=/data/minio/run/stop.sh
 
[Install]
WantedBy=multi-user.target
  • start.sh 启动脚本(注意其中的CURRENT_IP,代表的是当前节点的IP )
[root@master01 run]# vi /data/minio/run/start.sh
#!/bin/bash
## MinIO启动脚本

# 设置环境变量
# 设置HOME
export MINIO_HOME=data/minio
# 默认配置文件目录${HOME}/.minio,默认会将配置信息生成到config.json文件
export MINIO_COFNIG_DIR=/${MINIO_HOME}/config
# TLS证书目录:
#    私钥private.key
#    证书public.crt
export MINIO_CERTS_DIR=/${MINIO_HOME}/certs
# 日志目录
export MINIO_LOG_PATH=/${MINIO_HOME}/log
# 访问凭证AK
export MINIO_ROOT_USER=minio_admin
# 访问凭证SK
export MINIO_ROOT_PASSWORD=minio_admin!@#
# 是否开启web访问,默认是开启
export MINIO_BROWSER=on
# 证书密码
export MINIO_CERT_PASSWD=admin123!@#
# 支持path-style访问,默认 http://mydomain.com/bucket/object
export MINIO_DOMAIN=test_minio.com
# MINIO的集群中各节点IP
export MINIO_HOST_1=192.168.206.5
export MINIO_HOST_2=192.168.206.6
export MINIO_HOST_3=192.168.206.7
export CURRENT_IP=$MINIO_HOST_1
# 39000 为API调用接口, 9000为web console接口
# 启动minio
nohup  /${MINIO_HOME}/bin/minio server \
      --config-dir ${MINIO_COFNIG_DIR} \
      --certs-dir ${MINIO_CERTS_DIR} \
      --address 0.0.0.0:39000 --console-address ":9000" \
      https://${MINIO_HOST_1}/${MINIO_HOME}/data1 https://${MINIO_HOST_1}/${MINIO_HOME}/data2 https://${MINIO_HOST_1}/${MINIO_HOME}/data3 \
      https://${MINIO_HOST_2}/${MINIO_HOME}/data1 https://${MINIO_HOST_2}/${MINIO_HOME}/data2 https://${MINIO_HOST_2}/${MINIO_HOME}/data3 \
      https://${MINIO_HOST_3}/${MINIO_HOME}/data1 https://${MINIO_HOST_3}/${MINIO_HOME}/data2 https://${MINIO_HOST_3}/${MINIO_HOME}/data3 \
      >> ${MINIO_LOG_PATH}/minio.log 2>&1 &


[root@master01 run]#

  • stop.sh 停止脚本
[root@master01 run]# vi /data/minio/run/stop.sh
#!/bin/bash
## MinIO停止脚本
ps -ef | grep  minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9

if [ $? -ne 0 ];then
  echo "minio service stop failed."
  exit 1
fi
  • 生成https证书文件(随机一台机器操作,比如在192.168.206.5),参考英文官网 3.2.2 Generate a private key with RSA
[root@master01 certs]# cat /data/minio/certs/create_cert.sh
#!/bin/bash
# 用来生成pem证书文件
# sh create_cert.sh
set -e

# 从外界读取输入参数到指定变量
function read_input() {
    read -p "please input $1 parms:" $2
}
# 初始化输入参数
function init_input_param() {
  read_input "cert domain" "DOMAIN"
  read_input "cert path" "CERT_PATH"
  read_input "cert password" "PASSWORD"
  read_input "peer ip 1" "PEER_IP_1"
  read_input "peer ip 2" "PEER_IP_2"
  readonly IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}')
  readonly DNS=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $4}' | awk -F"/" '{print $1}')
}

# 生成openssl.conf文件
function generate_openssl_config() {
cat > ${CERT_PATH}/openssl.conf <<-EOF
  [req]
  distinguished_name = req_distinguished_name
  x509_extensions = v3_req
  prompt = no

  [req_distinguished_name]
  C = CN
  ST = VA
  L = Somewhere
  O = MyOrg
  OU = MyOU
  CN = ${DOMAIN}

  [v3_req]
  subjectAltName = @alt_names

  [alt_names]
  IP.1 = 127.0.0.1
  IP.2 = ${IP}
  IP.3 = ${PEER_IP_1}
  IP.4 = ${PEER_IP_2}
  DNS.1 = ${DNS}
  DNS.2 = ${DOMAIN}
EOF
}

# openssl 生成私钥
function generate_private_key() {
  # 生成长度为2048的私钥
  openssl genrsa -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private-pkcs8.key 2048
  # 转换为PCKS-1
  openssl rsa -passin pass:${PASSWORD} -in ${CERT_PATH}/private-pkcs8.key -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private.key
}

# 生成自签名文件
function generate_self_sign_cert() {
  openssl req -new -x509 -nodes -days 730 -keyout ${CERT_PATH}/private.key -passout pass:${PASSWORD} -out ${CERT_PATH}/public.crt -config ${CERT_PATH}/openssl.conf
}


# 执行流程
function main() {
  init_input_param
  generate_openssl_config
  generate_private_key
  generate_self_sign_cert
}

main

这里注意,因为我是3个节点,所以证书中需要有三个节点,此脚本中,默认会将自己的IP加入证书中,所以需要在添加2个IP,故需要定义如下

所以如果是4节点,那就是增加对应的 read_input "peer ip 2" "PEER_IP_2"  和 IP.4 = ${PEER_IP_2}

[root@master certs]# chmod +x create_cert.sh

执行命令: sh create_cert.sh,输入以下参数,如图所示

制作完成后,查看正式申请文件

 

  • 将公钥私钥,发送给其他两台节点的/data/minio/certs/下
[root@master01 certs]# scp private.key public.crt 192.168.206.6:/data/minio/certs/
[root@master01 certs]# scp private.key public.crt 192.168.206.7:/data/minio/certs/

2.4、注册系统服务,并启动服务

启动minio

[root@master minio]# chmod 755 /data/minio/run/* 
[root@master minio]# chmod +x /data/minio/bin/minio
# 开机自启minio.service
systemctl enable minio.service
# 刷新服务
systemctl daemon-reload
# 启动服务
systemctl start minio_https.service

查看如下代表无问题

二、minio 数据迁移

1、使用rclone进行数据的迁移

1.1、准备工作

将集群(192.168.206.5/6/7)数据迁移到单节点(192.168.206.10)。

由于 minio 开启纠删码、和设置 set ,每一个节点,每一个data 可能都不一样,故不能直接scp,否则会存在有些文件下载损坏

由于 rclone 要与 minio 的api接口通信才能获取数据,但https的minio rclone在没有证书的前提下,无法获取,网上也没有搜索到如何向rclone添加证书,故此次实验只能通过(minio的http协议)集群, 迁移到(minio的http协议)单节点

1.2、下载安装rclone

[root@master src]# wget https://downloads.rclone.org/rclone-current-linux-amd64.zip
[root@master src]# unzip rclone-current-linux-amd64.zip
[root@master src]# chmod 0755 ./rclone-v1.62.2-linux-amd64/rclone
[root@master src]# cp -r ./rclone-v1.62.2-linux-amd64/rclone /usr/bin/

生成配置文件,运行配置命令,生成的文件位置:/root/.config/rclone/rclone.conf

[root@master rclone]# rclone config
2023/04/07 14:11:24 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n                                   # n 创建

Enter name for new remote.
name> minio-old                            # 不是配置文件名字,配置文件中定义的[name]
Storage> s3                                # 存储类型s3
provider> Minio                            # 类型Minio
env_auth> false                            # 从运行时获取AWS凭据,填写false
access_key_id> minio_admin
secret_access_key> minio_admin!@# 
region>                                   # 要连接到的区域,如果您使用的是S3克隆,并且您没有区域,请留空
endpoint> http://192.168.206.5:39000      # Endpoint for S3 API.
location_constraint>                      # 选项位置约束,位置约束-必须设置为与区域匹配,如果不确定,请留空。仅在创建存储桶时使用。
acl>                                      # 创建存储桶和存储或复制对象时使用的屏蔽ACL,如果acl是一个空字符串,则不添加X-Amz-acl:标头,并且将使用默认(私有)
server_side_encryption>                   # 在S3中存储此对象时使用的服务器端加密算法。按Enter键保留为空
sse_kms_key_id>                           # 如果使用KMS ID,您必须提供密钥的ARN。按Enter键保留为空。

# 高级配置(结束)
Edit advanced config?
y) Yes
n) No (default)
y/n> n                                    # n 默认结束

Configuration complete.
Options:
- type: s3
- provider: Minio
- access_key_id: minio_admin
- secret_access_key: minio_admin!@#
- region: cn-east-1
- endpoint: http://192.168.206.10:39000
Keep this "minio" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y                                  # 写入一个新的文件

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q 

[root@master rclone]# ll /root/.config/rclone/rclone.conf
-rw------- 1 root root 157 4月   7 14:16 /root/.config/rclone/rclone.conf
[root@master rclone]# cat /root/.config/rclone/rclone.conf
[minio-old]
type = s3
provider = Minio
env_auth=false
access_key_id = minio_admin
secret_access_key = minio_admin!@#
region = 
endpoint = http://192.168.206.5:39000
location_constraint=
server_side_encryption=

1.3、rclone迁移数据方式一(rclone集群备份到本地,本地到单minio)

将源数据minio集群通过rclone拷贝到目标机器(注意,此处由于 minio 开启纠删码不能使用 scp,只能用rclone拷贝) ,随后在目标机器使用 rclone 迁移到单minio

  • 查看源数据集群数据结构,查看有多少个桶

  • 在192.168.168.5 或者 192.168.168.6 或者 192.168.168.7 或者 192.168.168.10 或者任意一台机器,安装rclone,并编写rclone.conf
[root@master run]# cat /root/.config/rclone/rclone.conf
[minio-old]
type = s3
provider = Minio
env_auth = false
access_key_id = minio_admin
secret_access_key = minio_admin!@#
region =
endpoint = http://192.168.206.5:39000    # 此处写源 minio 集群中的随机一台节点IP,端口是api端口
location_constraint =
server_side_encryption =

        使用 rclone ,将源 minio 集群数据的 test1 test2 test3 桶,导入到本地 

[root@master01 ~]# ifconfig |grep 192
        inet 192.168.206.10  netmask 255.255.255.0  broadcast 192.168.206.255

[root@master data]# mkdir -p /data/minio_backup/{test1 test2 test3}

[root@master minio_backup]# rclone sync -P minio-old:test1 /data/minio_backup/test1
Transferred:       21.825M / 21.825 MBytes, 100%, 59.059 MBytes/s, ETA 0s
Transferred:           15 / 15, 100%
Elapsed time:         0.4s

[root@master minio_backup]# rclone sync -P minio-old:test2 /data/minio_backup/test2

[root@master minio_backup]# rclone sync -P minio-old:test3 /data/minio_backup/test3

或者可以使用
rclone copy minio-old:test1 /data/minio_backup/test1
rclone copy minio-old:test2 /data/minio_backup/test2
rclone copy minio-old:test3 /data/minio_backup/test3

  • 使用 rclone 命令将本地的/data/minio_backup/test1导入到单节点minio

        修改rclone.conf,写的是单节点minio的信息

[root@master ~]# cat /root/.config/rclone/rclone.conf
[minio-new]
type = s3
provider = Minio
env_auth = false
access_key_id = minio_admin
secret_access_key = minio_admin!@#
region =
endpoint = http://192.168.206.10:39000
location_constraint =
server_side_encryption =
# 导入节点不用事先创建test1 test2 test3 桶,会自动创建
[root@master minio_backup]# rclone sync -P minio-old:test1 /data/minio_backup/test1
Transferred:       21.825M / 21.825 MBytes, 100%, 59.059 MBytes/s, ETA 0s
Transferred:           15 / 15, 100%
Elapsed time:         0.4s

[root@master minio_backup]# rclone sync -P minio-old:test2 /data/minio_backup/test2
Transferred:        1.282M / 1.282 MBytes, 100%, 15.141 MBytes/s, ETA 0s
Transferred:            8 / 8, 100%
Elapsed time:         0.1s

[root@master minio_backup]# rclone sync -P minio-old:test3 /data/minio_backup/test3
Transferred:      296.772M / 296.772 MBytes, 100%, 73.345 MBytes/s, ETA 0s
Transferred:           38 / 38, 100%
Elapsed time:         4.1s

1.4、rclone迁移数据方式二(rclone集群直接迁移到单minio,不用导入本地) 

在目标机器或者源数据机器,安装rclone, 在 rclone 中定义,源跟目录,执行后自动迁移。注意不管是源还是目的,https都会提示没有证书,所以只能同步http

[minio-old]
type = s3
provider = Minio
env_auth = false
access_key_id = minio_admin
secret_access_key = minio_admin!@#
region =
endpoint = http://192.168.206.5:39000
location_constraint =
server_side_encryption =

[minio-new]
type = s3
provider = Minio
env_auth = false
access_key_id = minio_admin
secret_access_key = minio_admin!@#
region =
endpoint = http://192.168.206.10:39000
location_constraint =
server_side_encryption =

rclone sync minio-old:test7 minio-new:test7   # 将 minio-old 的 test7 桶 导入到 minio-new 的 test7桶

1.2、迁移注意事项

1、可以使用rclone迁移项目,迁移对象可以是

单节点 迁移到 集群  (rclone 目的IP写集群中随机一台节点即可)
集群   迁移到 单节点(rclone 源IP写集群中随机一台节点即可)
单节点 迁移到 单节点
集群   迁移到 集群  (rclone 源、目的IP写集群中随机一台节点即可)

2、可以使用rclone导出到本地,在scp到目的地址机器后,进行本地导入新 minio

3、rclone 迁移两端不能是https协议,因为没有证书导致不能获取数据,在网上查找并没有找到关于rclone 添加证书的内容,故只能将 https 的 minio 使用 http 启动,但https 启动的 minio 改用 http 后,可能存在登录 minio 后,页面变成空白,f12 提示 session 是 access denied,故猜测是有session的缓存,但具体怎么清楚minio的session,也没有找到,一定不是在 /data/minio中存放的,只能多一天左右时间,session自动过期。

4、可以使用minio管理工具mc进行迁移

5、可以使用 cp 或者 scp 直接拷贝到新的 minio(仅限于两端数据节点都是对等的,例如源minio为单节点,并有data1 data2 data2 ,目的 minio 也必须一模一样,scp 也要一摸一样的拷贝数据到对端相对应的目录 ),只要触碰不对等,则一定不能使用 cp 或者 scp 直接拷贝,因为 minio 是由纠删码,也就是意味者每条数据 data1 data2 data3 下存放的东西不一样,可能是数据,可能是纠删码对应申城的校验码(默认数据和校验码1:1,比如data1 data2 data3 data4,则2个数据2个校验)

6、minio在<0.7M时,才不会生成校验码(part1), 只有数据 xl.meta

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文看懂SpringBoot操纵数据库

1.前言 很多同学进入公司就开始参与项目开发&#xff0c;大多数情况是对某个项目进行维护或者需求迭代&#xff0c;能够从0到1参与到项目中的机会很少&#xff0c;因此并没有多少机会了解某些技术的运行机制。换句话说&#xff0c;有的面试官在面试的时候就会探讨深层的技术问题…

【产品设计】那些被迫妥协的产品设计背后的技术原因

刚入门的产品经理经常会听到前辈们说应该懂点技术&#xff0c;却不明白为什么。本文作者分享了几个被迫妥协的产品设计的例子&#xff0c;希望能让不是技术出身的产品经理了解到“产品经理应该懂点技术”在产品设计中有什么指导意义&#xff0c;一起来看一下吧。 刚入门的产品经…

学习C++:C++进阶(六)如何在C++代码中调用python类,实例化python中类的对象,如何将conda中的深度学习环境导入C++项目中

目录 1.应用场景 2.场景&#xff1a;利用maskrcnn深度学习网络实现语义分割 3.CMake配置python解释器 4.C中实现实例化python中的类的对象并调用类内方法 4.1 初始化python环境 4.2 实例化python类的对象 1.应用场景 我们在视觉SLAM以及目标检测和识别中&#xff0c;经常…

AMD GPU安装运行stable diffusion

本文操作环境为Windows10/11AMD AI绘画是一种利用人工智能技术进行绘画的方法。它可以通过机器学习算法来学习艺术家的风格&#xff0c;并生成类似于艺术家的作品。最近&#xff0c;AI绘画技术得到了很大的发展&#xff0c;许多公司和研究机构都在进行相关的研究和开发。例如&…

华为电脑录屏功能在哪?这样做,您可以快速找到

案例&#xff1a;如何在华为电脑上找到电脑录屏功能&#xff1f; “听说电脑有录屏功能&#xff0c;但我在我的华为电脑上找了很久&#xff0c;都没有找到。难道华为电脑没有录屏功能吗&#xff1f;有没有小伙伴可以告诉我华为电脑录屏功能在哪&#xff1f;孩子已经快绝望了&a…

第六章 法律体系

目录 第一节 法律体系与法律部门的概念 一、法律体系的概念 &#xff08;一&#xff09;法律体系的含义和特征 &#xff08;二&#xff09;法律体系与相关概念的区别&#xff08;法律体系与国家&#xff0c;现行有关&#xff09; &#xff08;三&#xff09;法律体系的形成和…

本地存储、自定义事件、全局事件总线、消息订阅与发布【Vue】

Vue 1.1 浏览器的本地存储 存储内容大小一般支持5MB左右&#xff08;不同浏览器可能还不一样&#xff09;浏览器通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制相关API: &#xff08;1&#xff09;xxxxStorage.setItem(key, value); 该方法接受一…

CT前瞻(三):Adobe系列XD软件绘制简单的原型图与交互设计

文章目录&#x1f4cb;前言&#x1f3af;关于原型图绘制&#x1f3af;XD绘制原型图与交互设计&#x1f3af;关于XD软件其他功能&#x1f4dd;最后&#x1f4cb;前言 Adobe XD是一个协作式易用平台&#xff0c;可帮助团队为网站、移动应用程序、语音界面、游戏等创建设计。还可…

每个 Android 开发者都应该知道的有用资源

每个 Android 开发者都应该知道的有用资源 在本文中&#xff0c;我将提到 7 个资源&#xff0c;这些资源对于 Android 开发人员来说非常有益。我亲自使用过其中的每一个几次。他们无数次派上用场。确保您不要忘记为这些资源添加书签/收藏&#xff0c;以便您可以在需要使用它们时…

医院体检PEIS系统源码

一、医院体检系统概述 1. 医院体检系统概述 目前&#xff0c;大多数的体检还停留在手工操作上&#xff0c;如单位体检时手工书写体检人员信息、医生手工书写体检结果、检验报告打印后进行手工粘贴等&#xff0c;这样造成极大的工作量&#xff0c;效率低下&#xff0c;而且极易…

【三十天精通Vue 3】第九天 Vue 3 路由详解

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: 三十天精通 Vue 3 文章目录引言一、Vue 3 路由概述1.1 路由的简介1.2 路由的分类1.3 路由的语…

暗讽友商 昆仑万维大模型预告刺激股价

搭上AI风口&#xff0c;上市公司昆仑万维年内股价大涨217.56%&#xff0c;一时名声大噪。火了以后&#xff0c;昆仑万维的野心越来越大&#xff0c;喊出“All in AGI&#xff08;通用人工智能&#xff09;与AIGC”的豪言壮语。 在近期预告旗下大模型“天工”邀测的公告中&…

STL :双端队列容器 Deque

Deque #include<deque> using namesace std; 双端队列容器 &#xff1a;双向开口的连续线性空间&#xff1b; 擅长尾部和头部添加或删除元素&#xff1a;常数阶&#xff1b; 存储元素并不能保证所有元素都存储到连续的内存空间中&#xff1b; deque 是动态的以分段…

TiDB实战篇-TiDB配置

简介 熟系TiDB的配置相关。 TiDB的大体参数 系统配置对应的是TiDB-Server,PD和TiKV和TiDB-Server基本在集群配置里面配置。 系统配置 系统变量 | PingCAP 文档中心 集群配置 PD 配置文件描述 | PingCAP 文档中心 配置的存储位置 系统配置存储在TiKV中的&#xff0c;集…

如何免费恢复电脑上误删除的视频

虽然我们现在可以在单个硬盘驱动器上存储无数大型视频文件是件好事&#xff0c;但这也意味着单个用户错误或硬件/软件故障可能会立即抹去数小时的记忆&#xff0c;而没有任何明显的方法可以恢复它们。在本文中&#xff0c;我们提供了一个快速的分步视频恢复指南&#xff0c;以帮…

【音视频】利用ffmpeg实现:音视频的提取,rtmp推流等

目录 可列出电脑的设备 音频桌面视频&#xff0c;存mp4 录声音 推流到服务器 音频桌面视频&#xff0c;推流到服务器 音频笔记本摄像头&#xff0c;推流到服务器 参考资料 可列出电脑的设备 输入下面的语句即可列出电脑的设备 ffmpeg -list_devices true -f dshow -i dum…

(链表)相交链表(双指针法)

文章目录前言&#xff1a;问题描述&#xff1a;问题解析&#xff1a;代码实现&#xff1a;总结&#xff1a;前言&#xff1a; 此篇是关于链表的经典练习题。 问题描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节…

【测试开发篇9】Junit框架

目录 一、认识Junit框架 Junit和Selenium的关系是什么 导入Junit框架common-io包 二、Junit框架的使用 2.1Junit有哪些常用注解 2.1.1Test注解 2.1.2BeforeEach 2.1.3BeforeAll 2.1.4AfterAll 2.1.5AfterEach 2.2Junit的断言 Assertions.assertEquals(期待值&#…

小白推荐|使用git建立自己的代码仓库

1 git 1.1 什么是git 版本控制工具&#xff0c;用于团队协作与项目管理 1.2 git 安装教程 step1&#xff1a;进入git下载官网Git for Windows step2&#xff1a;点击Download step3&#xff1a;打开下载好的文件&#xff0c;按照下面图片一步一步安装 剩下的一直点Next就完…

ansible-playbook task 指定位置执行

文章目录执行顺序指定执行--tags–start-at--skip-tags--step混合执行顺序 1.检查play中是否存在pre_tasks定义&#xff0c;存在的话则顺序执行pre_tasks中定义的所有tasks 2.如果存在pre_tasks定义&#xff0c;则检查是否存在触发handler&#xff0c;如存在则顺序执行相关触发…