当前位置:   article > 正文

minio 部署、迁移、使用_minio数据迁移

minio数据迁移

一、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 

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

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

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

  1. [root@master01 ~]# fdisk -l /dev/sdb
  2. [root@master01 ~]# fdisk /dev/sdb
  3. 命令(输入 m 获取帮助):n # n 创建分区
  4. Partition type:
  5.    p   primary (0 primary, 0 extended, 4 free)
  6.    e   extended
  7. Select (default p): p # n 创建主分区
  8. 分区号 (1-4,默认 1): # 直接回车,走默认1
  9. 起始 扇区 (2048-4194303,默认为 2048): # 直接回车,从默认2048开始
  10. 将使用默认值 2048
  11. Last 扇区, +扇区 or +size{K,M,G} (2048-4194303,默认为 4194303): # 直接回车,说明有多少做多少G硬盘
  12. 将使用默认值 4194303
  13. 分区 1 已设置为 Linux 类型,大小设为 2 GiB
  14. 命令(输入 m 获取帮助):p # 打印
  15. 磁盘 /dev/sdb:2147 MB, 2147483648 字节,4194304 个扇区
  16. Units = 扇区 of 1 * 512 = 512 bytes
  17. 扇区大小(逻辑/物理):512 字节 / 512 字节
  18. I/O 大小(最小/最佳):512 字节 / 512 字节
  19. 磁盘标签类型:dos
  20. 磁盘标识符:0x23a6127b
  21.    设备 Boot      Start         End      Blocks   Id  System
  22. /dev/sdb1            2048     4194303     2096128   83  Linux
  23. 命令(输入 m 获取帮助):w # 保存分区
  24. The partition table has been altered!
  25. Calling ioctl() to re-read partition table.
  26. 正在同步磁盘。
  27. [root@master01 ~]# ll /dev/sdb*
  28. brw-rw---- 1 root disk 8, 16 4月   7 04:43 /dev/sdb
  29. brw-rw---- 1 root disk 8, 17 4月   7 04:43 /dev/sdb1
  30. [root@master01 ~]# mkfs.xfs  /dev/sdb1 # 格式化分区
  31. meta-data=/dev/sdb1              isize=512    agcount=4, agsize=131008 blks
  32.          =                       sectsz=512   attr=2, projid32bit=1
  33.          =                       crc=1        finobt=0, sparse=0
  34. data     =                       bsize=4096   blocks=524032, imaxpct=25
  35.          =                       sunit=0      swidth=0 blks
  36. naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
  37. log      =internal log           bsize=4096   blocks=2560, version=2
  38.          =                       sectsz=512   sunit=0 blks, lazy-count=1
  39. realtime =none                   extsz=4096   blocks=0, rtextents=0
  40. [root@master01 ~]# blkid # 查看/dev/sdb1的uuid
  41. /dev/sda1: UUID="c219aeb3-fb5b-4009-9e9c-e3396a36ea3b" TYPE="xfs"
  42. /dev/sda2: UUID="B6PX7v-uSkg-08db-w9V3-TT31-x7x5-ehMsr4" TYPE="LVM2_member"
  43. /dev/sdb1: UUID="1f00db8b-dc34-4528-93ad-043192739a20" TYPE="xfs"
  44. /dev/mapper/centos-root: UUID="243723b9-2e4d-40a6-aed9-23e227d61572" TYPE="xfs"
  45. /dev/mapper/centos-swap: UUID="9ded6aff-9d46-4b84-abb9-1de8691c5bf7" TYPE="swap"
  46. [root@master01 ~]# echo "UUID=1f00db8b-dc34-4528-93ad-043192739a20 /data/minio xfs defaults 0 0 " >> /etc/fstab # 将/dev/sdb1 挂载到 /data/minio
  47. [root@master01 ~]# tail -n 2 /etc/fstab
  48. #UUID=e27dc238-c4d9-4921-81a0-53d7002f0e33 /opt/yyiuap/  xfs defaults 0 0
  49. UUID=1f00db8b-dc34-4528-93ad-043192739a20 /data/minio xfs defaults 0 0
  50. [root@master01 ~]# mount -a # 读取/etc/fstab 文件重新挂载
  51. [root@master01 ~]# df -h
  52. 文件系统                 容量  已用  可用 已用% 挂载点
  53. /dev/mapper/centos-root   48G   11G   38G   22% /
  54. devtmpfs                 899M     0  899M    0% /dev
  55. tmpfs                    911M     0  911M    0% /dev/shm
  56. tmpfs                    911M  9.6M  902M    2% /run
  57. tmpfs                    911M     0  911M    0% /sys/fs/cgroup
  58. /dev/sda1               1014M  142M  873M   14% /boot
  59. tmpfs                    183M     0  183M    0% /run/user/0
  60. /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
  1. [root@192 opt]# tree -f minio/
  2. minio
  3. ├── minio/bin # 二进制文件目录
  4. │ └── minio/bin/minio
  5. ├── minio/certs # 证书文件目录
  6. │ ├── minio/certs/private.key # 私钥文件
  7. │ ├── minio/certs/public.crt # 证书文件
  8. ├── minio/config # 配置文件目录
  9. ├── minio/data1 # minio数据目录1
  10. ├── minio/data2 # minio数据目录2
  11. ├── minio/log # 日志文件目录
  12. │ └── minio/log/minio.log # 日志文件
  13. └── minio/run # 自定义脚本
  14. ├── minio/run/create_cert.sh # 生成证书脚本
  15. ├── minio/run/minio.service # minio service文件
  16. ├── minio/run/stop.sh # minio服务停止脚本
  17. └── minio/run/start.sh # minio服务启动脚本

1.4、配置启动参数

  • 将下载的 minio 放入 /data/minio/bin/
  1. [root@master bin]# cd /data/minio/bin
  2. [root@master bin]# rz minio
  3. [root@master bin]# ll
  4. -rw-r--r-- 1 root root 96837632 47 11:51 minio
  • 定义minio.service(分https和http启动)
  1. [root@master minio]# vi /usr/lib/systemd/system/minio_http.service
  2. [Unit]
  3. Description=Minio service
  4. Documentation=This is a Minio Service.
  5. [Service]
  6. Type=forking
  7. # 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
  8. TimeoutStartSec=10
  9. # 工作目录
  10. WorkingDirectory=/data/minio
  11. # 服务运行用户
  12. User=root
  13. # 服务运行用户组
  14. Group=root
  15. Restart=on-failure
  16. RestartSec=15s
  17. ExecStart=/data/minio/run/start_http.sh
  18. ExecStop=/data/minio/run/stop.sh
  19. [Install]
  20. WantedBy=multi-user.target
  1. [root@master minio]# vi /usr/lib/systemd/system/minio_https.service
  2. [Unit]
  3. Description=Minio service
  4. Documentation=This is a Minio Service.
  5. [Service]
  6. Type=forking
  7. # 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
  8. TimeoutStartSec=10
  9. # 工作目录
  10. WorkingDirectory=/data/minio
  11. # 服务运行用户
  12. User=root
  13. # 服务运行用户组
  14. Group=root
  15. Restart=on-failure
  16. RestartSec=15s
  17. ExecStart=/data/minio/run/start_https.sh
  18. ExecStop=/data/minio/run/stop.sh
  19. [Install]
  20. WantedBy=multi-user.target
  • start.sh 启动脚本(https)
  1. [root@master01 run]# vi /data/minio/run/start_https.sh
  2. #!/bin/bash
  3. ## MinIO启动脚本
  4. # 设置环境变量
  5. # 设置HOME
  6. export MINIO_HOME=/data/minio
  7. # 默认配置文件目录${HOME}/.minio,默认会将配置信息生成到config.json文件
  8. export MINIO_COFNIG_DIR=/${MINIO_HOME}/config
  9. # TLS证书目录:
  10. # 私钥private.key
  11. # 证书public.crt
  12. export MINIO_CERTS_DIR=/${MINIO_HOME}/certs
  13. # 日志目录
  14. export MINIO_LOG_PATH=/${MINIO_HOME}/log
  15. # 访问凭证AK
  16. export MINIO_ROOT_USER=minio_admin
  17. # 访问凭证SK
  18. export MINIO_ROOT_PASSWORD=minio_admin!@#
  19. # 是否开启web访问,默认是开启
  20. export MINIO_BROWSER=on
  21. # 证书密码
  22. export MINIO_CERT_PASSWD=admin123!@#
  23. # 支持path-style访问,默认 http://mydomain.com/bucket/object
  24. export MINIO_DOMAIN=test_minio.com
  25. # MINIO的集群中各节点IP
  26. export MINIO_HOST=192.168.206.10
  27. # 39000 为API调用接口, 9000为web console接口
  28. # 启动minio
  29. nohup /${MINIO_HOME}/bin/minio server \
  30. --config-dir ${MINIO_COFNIG_DIR} \
  31. --certs-dir ${MINIO_CERTS_DIR} \
  32. --address ${MINIO_HOST}:39000 --console-address ":9000" \
  33. https://${MINIO_HOST}/${MINIO_HOME}/data1 https://${MINIO_HOST}/${MINIO_HOME}/data2 \
  34. >> ${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)
  1. [root@master01 run]# vi /data/minio/run/start_http.sh
  2. #!/bin/bash
  3. ## MinIO启动脚本
  4. # 设置环境变量
  5. # 设置HOME
  6. export MINIO_HOME=/data/minio
  7. # 日志目录
  8. export MINIO_LOG_PATH=/${MINIO_HOME}/log
  9. # 访问凭证AK
  10. export MINIO_ROOT_USER=minio_admin
  11. # 访问凭证SK
  12. export MINIO_ROOT_PASSWORD=minio_admin!@#
  13. # 是否开启web访问,默认是开启
  14. export MINIO_BROWSER=on
  15. # 支持path-style访问,默认 http://mydomain.com/bucket/object
  16. export MINIO_DOMAIN=test_minio.com
  17. # MINIO的集群中各节点IP
  18. export MINIO_HOST=192.168.206.10
  19. # 39000 为API调用接口, 9000为web console接口
  20. # 启动minio
  21. nohup /${MINIO_HOME}/bin/minio server \
  22. --address ${MINIO_HOST}:39000 --console-address ":9000" \
  23. http://${MINIO_HOST}/${MINIO_HOME}/data1 http://${MINIO_HOST}/${MINIO_HOME}/data2 \
  24. >> ${MINIO_LOG_PATH}/minio.log 2>&1 &
  • stop.sh 停止脚本
  1. [root@master01 run]# cat /data/minio/run/stop.sh
  2. #!/bin/bash
  3. ## MinIO停止脚本
  4. ps -ef | grep minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9
  5. if [ $? -ne 0 ];then
  6. echo "minio service stop failed."
  7. exit 1
  8. fi
  1. [root@master certs]# vi /data/minio/certs/create_cert.sh
  2. #!/bin/bash
  3. # 用来生成pem证书文件
  4. # sh create_cert.sh
  5. set -e
  6. # 从外界读取输入参数到指定变量
  7. function read_input() {
  8. read -p "please input $1 parms:" $2
  9. }
  10. # 初始化输入参数
  11. function init_input_param() {
  12. read_input "cert domain" "DOMAIN"
  13. read_input "cert path" "CERT_PATH"
  14. read_input "cert password" "PASSWORD"
  15. readonly IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}')
  16. readonly DNS=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $4}' | awk -F"/" '{print $1}')
  17. }
  18. # 生成openssl.conf文件
  19. function generate_openssl_config() {
  20. cat > ${CERT_PATH}/openssl.conf <<-EOF
  21. [req]
  22. distinguished_name = req_distinguished_name
  23. x509_extensions = v3_req
  24. prompt = no
  25. [req_distinguished_name]
  26. C = CN
  27. ST = VA
  28. L = Somewhere
  29. O = MyOrg
  30. OU = MyOU
  31. CN = ${DOMAIN}
  32. [v3_req]
  33. subjectAltName = @alt_names
  34. [alt_names]
  35. IP.1 = 127.0.0.1
  36. IP.2 = ${IP}
  37. DNS.1 = ${DNS}
  38. DNS.2 = ${DOMAIN}
  39. EOF
  40. }
  41. # openssl 生成私钥
  42. function generate_private_key() {
  43. # 生成长度为2048的私钥
  44. openssl genrsa -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private-pkcs8.key 2048
  45. # 转换为PCKS-1
  46. openssl rsa -passin pass:${PASSWORD} -in ${CERT_PATH}/private-pkcs8.key -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private.key
  47. }
  48. # 生成自签名文件
  49. function generate_self_sign_cert() {
  50. 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
  51. }
  52. # 清除
  53. function clean() {
  54. rm -rf ${CERT_PATH}/openssl.conf
  55. rm -rf ${CERT_PATH}/private-pkcs8.key
  56. }
  57. # 执行流程
  58. function main() {
  59. init_input_param
  60. generate_openssl_config
  61. generate_private_key
  62. generate_self_sign_cert
  63. clean
  64. }
  65. main
[root@master certs]# chmod +x create_cert.sh

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

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

启动minio(https)

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

如下日志代表成功

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

启动minio(http)

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

  1. [root@master run]# systemctl stop minio_https.service
  2. [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/
  1. [root@master bin]# cd /data/minio/bin
  2. [root@master bin]# rz minio
  3. [root@master bin]# ll
  4. -rw-r--r-- 1 root root 96837632 47 11:51 minio
  • 定义minio.service(https启动)
  1. [root@master minio]# vi /usr/lib/systemd/system/minio.service
  2. [Unit]
  3. Description=Minio service
  4. Documentation=This is a Minio Service.
  5. [Service]
  6. Type=forking
  7. # 启动服务时的等待的秒数,TimeoutStartSec 的值指定为 0,从而关闭超时检测。
  8. TimeoutStartSec=10
  9. # 工作目录
  10. WorkingDirectory=/data/minio
  11. # 服务运行用户
  12. User=root
  13. # 服务运行用户组
  14. Group=root
  15. Restart=on-failure
  16. RestartSec=15s
  17. ExecStart=/data/minio/run/start.sh
  18. ExecStop=/data/minio/run/stop.sh
  19. [Install]
  20. WantedBy=multi-user.target
  • start.sh 启动脚本(注意其中的CURRENT_IP,代表的是当前节点的IP )
  1. [root@master01 run]# vi /data/minio/run/start.sh
  2. #!/bin/bash
  3. ## MinIO启动脚本
  4. # 设置环境变量
  5. # 设置HOME
  6. export MINIO_HOME=data/minio
  7. # 默认配置文件目录${HOME}/.minio,默认会将配置信息生成到config.json文件
  8. export MINIO_COFNIG_DIR=/${MINIO_HOME}/config
  9. # TLS证书目录:
  10. # 私钥private.key
  11. # 证书public.crt
  12. export MINIO_CERTS_DIR=/${MINIO_HOME}/certs
  13. # 日志目录
  14. export MINIO_LOG_PATH=/${MINIO_HOME}/log
  15. # 访问凭证AK
  16. export MINIO_ROOT_USER=minio_admin
  17. # 访问凭证SK
  18. export MINIO_ROOT_PASSWORD=minio_admin!@#
  19. # 是否开启web访问,默认是开启
  20. export MINIO_BROWSER=on
  21. # 证书密码
  22. export MINIO_CERT_PASSWD=admin123!@#
  23. # 支持path-style访问,默认 http://mydomain.com/bucket/object
  24. export MINIO_DOMAIN=test_minio.com
  25. # MINIO的集群中各节点IP
  26. export MINIO_HOST_1=192.168.206.5
  27. export MINIO_HOST_2=192.168.206.6
  28. export MINIO_HOST_3=192.168.206.7
  29. export CURRENT_IP=$MINIO_HOST_1
  30. # 39000 为API调用接口, 9000为web console接口
  31. # 启动minio
  32. nohup /${MINIO_HOME}/bin/minio server \
  33. --config-dir ${MINIO_COFNIG_DIR} \
  34. --certs-dir ${MINIO_CERTS_DIR} \
  35. --address 0.0.0.0:39000 --console-address ":9000" \
  36. https://${MINIO_HOST_1}/${MINIO_HOME}/data1 https://${MINIO_HOST_1}/${MINIO_HOME}/data2 https://${MINIO_HOST_1}/${MINIO_HOME}/data3 \
  37. https://${MINIO_HOST_2}/${MINIO_HOME}/data1 https://${MINIO_HOST_2}/${MINIO_HOME}/data2 https://${MINIO_HOST_2}/${MINIO_HOME}/data3 \
  38. https://${MINIO_HOST_3}/${MINIO_HOME}/data1 https://${MINIO_HOST_3}/${MINIO_HOME}/data2 https://${MINIO_HOST_3}/${MINIO_HOME}/data3 \
  39. >> ${MINIO_LOG_PATH}/minio.log 2>&1 &
  40. [root@master01 run]#

  • stop.sh 停止脚本
  1. [root@master01 run]# vi /data/minio/run/stop.sh
  2. #!/bin/bash
  3. ## MinIO停止脚本
  4. ps -ef | grep minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9
  5. if [ $? -ne 0 ];then
  6. echo "minio service stop failed."
  7. exit 1
  8. fi
  1. [root@master01 certs]# cat /data/minio/certs/create_cert.sh
  2. #!/bin/bash
  3. # 用来生成pem证书文件
  4. # sh create_cert.sh
  5. set -e
  6. # 从外界读取输入参数到指定变量
  7. function read_input() {
  8. read -p "please input $1 parms:" $2
  9. }
  10. # 初始化输入参数
  11. function init_input_param() {
  12. read_input "cert domain" "DOMAIN"
  13. read_input "cert path" "CERT_PATH"
  14. read_input "cert password" "PASSWORD"
  15. read_input "peer ip 1" "PEER_IP_1"
  16. read_input "peer ip 2" "PEER_IP_2"
  17. readonly IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}')
  18. readonly DNS=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $4}' | awk -F"/" '{print $1}')
  19. }
  20. # 生成openssl.conf文件
  21. function generate_openssl_config() {
  22. cat > ${CERT_PATH}/openssl.conf <<-EOF
  23. [req]
  24. distinguished_name = req_distinguished_name
  25. x509_extensions = v3_req
  26. prompt = no
  27. [req_distinguished_name]
  28. C = CN
  29. ST = VA
  30. L = Somewhere
  31. O = MyOrg
  32. OU = MyOU
  33. CN = ${DOMAIN}
  34. [v3_req]
  35. subjectAltName = @alt_names
  36. [alt_names]
  37. IP.1 = 127.0.0.1
  38. IP.2 = ${IP}
  39. IP.3 = ${PEER_IP_1}
  40. IP.4 = ${PEER_IP_2}
  41. DNS.1 = ${DNS}
  42. DNS.2 = ${DOMAIN}
  43. EOF
  44. }
  45. # openssl 生成私钥
  46. function generate_private_key() {
  47. # 生成长度为2048的私钥
  48. openssl genrsa -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private-pkcs8.key 2048
  49. # 转换为PCKS-1
  50. openssl rsa -passin pass:${PASSWORD} -in ${CERT_PATH}/private-pkcs8.key -aes256 -passout pass:${PASSWORD} -out ${CERT_PATH}/private.key
  51. }
  52. # 生成自签名文件
  53. function generate_self_sign_cert() {
  54. 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
  55. }
  56. # 执行流程
  57. function main() {
  58. init_input_param
  59. generate_openssl_config
  60. generate_private_key
  61. generate_self_sign_cert
  62. }
  63. 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/下
  1. [root@master01 certs]# scp private.key public.crt 192.168.206.6:/data/minio/certs/
  2. [root@master01 certs]# scp private.key public.crt 192.168.206.7:/data/minio/certs/

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

启动minio

  1. [root@master minio]# chmod 755 /data/minio/run/*
  2. [root@master minio]# chmod +x /data/minio/bin/minio
  3. # 开机自启minio.service
  4. systemctl enable minio.service
  5. # 刷新服务
  6. systemctl daemon-reload
  7. # 启动服务
  8. 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

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

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

  1. [root@master rclone]# rclone config
  2. 2023/04/07 14:11:24 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults
  3. No remotes found, make a new one?
  4. n) New remote
  5. s) Set configuration password
  6. q) Quit config
  7. n/s/q> n # n 创建
  8. Enter name for new remote.
  9. name> minio-old # 不是配置文件名字,配置文件中定义的[name]
  10. Storage> s3 # 存储类型s3
  11. provider> Minio # 类型Minio
  12. env_auth> false # 从运行时获取AWS凭据,填写false
  13. access_key_id> minio_admin
  14. secret_access_key> minio_admin!@#
  15. region> # 要连接到的区域,如果您使用的是S3克隆,并且您没有区域,请留空
  16. endpoint> http://192.168.206.5:39000 # Endpoint for S3 API.
  17. location_constraint> # 选项位置约束,位置约束-必须设置为与区域匹配,如果不确定,请留空。仅在创建存储桶时使用。
  18. acl> # 创建存储桶和存储或复制对象时使用的屏蔽ACL,如果acl是一个空字符串,则不添加X-Amz-acl:标头,并且将使用默认(私有)
  19. server_side_encryption> # 在S3中存储此对象时使用的服务器端加密算法。按Enter键保留为空
  20. sse_kms_key_id> # 如果使用KMS ID,您必须提供密钥的ARN。按Enter键保留为空。
  21. # 高级配置(结束)
  22. Edit advanced config?
  23. y) Yes
  24. n) No (default)
  25. y/n> n # n 默认结束
  26. Configuration complete.
  27. Options:
  28. - type: s3
  29. - provider: Minio
  30. - access_key_id: minio_admin
  31. - secret_access_key: minio_admin!@#
  32. - region: cn-east-1
  33. - endpoint: http://192.168.206.10:39000
  34. Keep this "minio" remote?
  35. y) Yes this is OK (default)
  36. e) Edit this remote
  37. d) Delete this remote
  38. y/e/d> y # 写入一个新的文件
  39. e) Edit existing remote
  40. n) New remote
  41. d) Delete remote
  42. r) Rename remote
  43. c) Copy remote
  44. s) Set configuration password
  45. q) Quit config
  46. e/n/d/r/c/s/q> q
  1. [root@master rclone]# ll /root/.config/rclone/rclone.conf
  2. -rw------- 1 root root 157 47 14:16 /root/.config/rclone/rclone.conf
  3. [root@master rclone]# cat /root/.config/rclone/rclone.conf
  4. [minio-old]
  5. type = s3
  6. provider = Minio
  7. env_auth=false
  8. access_key_id = minio_admin
  9. secret_access_key = minio_admin!@#
  10. region =
  11. endpoint = http://192.168.206.5:39000
  12. location_constraint=
  13. 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
  1. [root@master run]# cat /root/.config/rclone/rclone.conf
  2. [minio-old]
  3. type = s3
  4. provider = Minio
  5. env_auth = false
  6. access_key_id = minio_admin
  7. secret_access_key = minio_admin!@#
  8. region =
  9. endpoint = http://192.168.206.5:39000 # 此处写源 minio 集群中的随机一台节点IP,端口是api端口
  10. location_constraint =
  11. server_side_encryption =

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

  1. [root@master01 ~]# ifconfig |grep 192
  2. inet 192.168.206.10 netmask 255.255.255.0 broadcast 192.168.206.255
  3. [root@master data]# mkdir -p /data/minio_backup/{test1 test2 test3}
  4. [root@master minio_backup]# rclone sync -P minio-old:test1 /data/minio_backup/test1
  5. Transferred: 21.825M / 21.825 MBytes, 100%, 59.059 MBytes/s, ETA 0s
  6. Transferred: 15 / 15, 100%
  7. Elapsed time: 0.4s
  8. [root@master minio_backup]# rclone sync -P minio-old:test2 /data/minio_backup/test2
  9. [root@master minio_backup]# rclone sync -P minio-old:test3 /data/minio_backup/test3
  10. 或者可以使用
  11. rclone copy minio-old:test1 /data/minio_backup/test1
  12. rclone copy minio-old:test2 /data/minio_backup/test2
  13. rclone copy minio-old:test3 /data/minio_backup/test3

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

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

  1. [root@master ~]# cat /root/.config/rclone/rclone.conf
  2. [minio-new]
  3. type = s3
  4. provider = Minio
  5. env_auth = false
  6. access_key_id = minio_admin
  7. secret_access_key = minio_admin!@#
  8. region =
  9. endpoint = http://192.168.206.10:39000
  10. location_constraint =
  11. server_side_encryption =
  1. # 导入节点不用事先创建test1 test2 test3 桶,会自动创建
  2. [root@master minio_backup]# rclone sync -P minio-old:test1 /data/minio_backup/test1
  3. Transferred: 21.825M / 21.825 MBytes, 100%, 59.059 MBytes/s, ETA 0s
  4. Transferred: 15 / 15, 100%
  5. Elapsed time: 0.4s
  6. [root@master minio_backup]# rclone sync -P minio-old:test2 /data/minio_backup/test2
  7. Transferred: 1.282M / 1.282 MBytes, 100%, 15.141 MBytes/s, ETA 0s
  8. Transferred: 8 / 8, 100%
  9. Elapsed time: 0.1s
  10. [root@master minio_backup]# rclone sync -P minio-old:test3 /data/minio_backup/test3
  11. Transferred: 296.772M / 296.772 MBytes, 100%, 73.345 MBytes/s, ETA 0s
  12. Transferred: 38 / 38, 100%
  13. Elapsed time: 4.1s

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

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

  1. [minio-old]
  2. type = s3
  3. provider = Minio
  4. env_auth = false
  5. access_key_id = minio_admin
  6. secret_access_key = minio_admin!@#
  7. region =
  8. endpoint = http://192.168.206.5:39000
  9. location_constraint =
  10. server_side_encryption =
  11. [minio-new]
  12. type = s3
  13. provider = Minio
  14. env_auth = false
  15. access_key_id = minio_admin
  16. secret_access_key = minio_admin!@#
  17. region =
  18. endpoint = http://192.168.206.10:39000
  19. location_constraint =
  20. server_side_encryption =

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

1.2、迁移注意事项

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

  1. 单节点 迁移到 集群 (rclone 目的IP写集群中随机一台节点即可)
  2. 集群  迁移到 单节点(rclone 源IP写集群中随机一台节点即可)
  3. 单节点 迁移到 单节点
  4. 集群 迁移到 集群 (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

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

闽ICP备14008679号