[转帖]高性能分布式对象存储——MinIO实战操作(MinIO扩容)

高性能,分布式,对象,存储,minio,实战,操作,扩容 · 浏览次数 : 0

小编点评

归纳总结以上内容,生成内容时需要带简单的排版,以下内容为归纳总结内容的排版: *集群1 *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.110,192.168.182.111./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-110:8001/ *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-112:8001/ *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{4...5}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-110:8001/ *集群2 *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.110,192.168.182.111./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-110:8001/ *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-112:8001/ *集群3 *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.110,192.168.182.111./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-110:8001/ *bash复制代码cd /opt/bigdata/minioexport MINIO_ETCD_ENDPOINTS=\"http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380,http://192.168.182.113:2380\"mkdir -p /etc/minioexport MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=admin123456export MINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001 --config-dir /etc/minio http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{3...4}web访问:http://local-168-182-112:8001/

正文

https://juejin.cn/post/7132852449244610574

 

一、前言

MinIO的基础概念和环境部署可以参考我之前的文章:高性能分布式对象存储——MinIO(环境部署)

二、客户端操作MinIO Client(mc)

官方文档:docs.min.io/docs/minio-…

MinIO Client (mc) 为 UNIX 命令(如 ls、cat、cp、mirror、diff、find 等)提供了现代替代方案。它支持文件系统和兼容 Amazon S3 的云存储服务(AWS Signature v2 和 v4)。

 
bash
复制代码
alias       set, remove and list aliases in configuration file
ls          list buckets and objects
mb          make a bucket
rb          remove a bucket
cp          copy objects
mirror      synchronize object(s) to a remote site
cat         display object contents
head        display first 'n' lines of an object
pipe        stream STDIN to an object
share       generate URL for temporary access to an object
find        search for objects
sql         run sql queries on objects
stat        show object metadata
mv          move objects
tree        list buckets and objects in a tree format
du          summarize disk usage recursively
retention   set retention for object(s)
legalhold   set legal hold for object(s)
diff        list differences in object name, size, and date between two buckets
rm          remove objects
encrypt    manage bucket encryption config
event       manage object notifications
watch       listen for object notification events
undo        undo PUT/DELETE operations
policy      manage anonymous access to buckets and objects
tag         manage tags for bucket(s) and object(s)
ilm         manage bucket lifecycle
version     manage bucket versioning
replicate   configure server side bucket replication
admin       manage MinIO servers
update      update mc to latest release

1)mc Shell 自动补全

如果您使用的是 bash、zsh 或 fish。Shell 补全默认嵌入在mc,安装自动补全使用mc --autocompletion。重新启动 shell,mc 将自动完成命令,如下所示。

 
bash
复制代码
# 安装
mc --autocompletion
# 重启shell,即退出shell,重新连接即可

在这里插入图片描述

2)查看mc版本

 
bash
复制代码
mc --version

在这里插入图片描述

3)列出来自play.min.io的所有存储桶

 
bash
复制代码
mc ls play
# json格式
mc --json ls play

在这里插入图片描述

4)创建桶

mb命令在对象存储上创建一个新存储桶。在文件系统上,它的行为类似于mkdir -p命令。Bucket 相当于文件系统中的驱动器或挂载点,不应被视为文件夹。MinIO 对每个用户创建的存储桶数量没有任何限制。

 
bash
复制代码
# 添加MinIO存储服务
cd /opt/bigdata/minio
./mc config host add minio http://local-168-182-110:19000 admin admin123456

# 在自己部署的minio创建新存储桶
mc mb minio/mybucket
# 查看所有桶
mc ls minio

在这里插入图片描述 web访问:http://local-168-182-110:19001 在这里插入图片描述

5)复制文件到MinIO

cp命令将数据从一个或多个源复制到目标。

 
bash
复制代码
mc cp wget-log minio/mybucket
# 查看
mc ls wget-log minio/mybucket

在这里插入图片描述

6)日常使用

您可以添加 shell 别名来覆盖您常用的 Unix 工具。

 
bash
复制代码
alias ls='mc ls'
alias cp='mc cp'
alias cat='mc cat'
alias mkdir='mc mb'
alias pipe='mc pipe'
alias find='mc find'
alias tree='mc tree'

7)MinIO 管理员操作

MinIO Client (mc) 提供admin子命令来对 MinIO 部署执行管理任务。

 
bash
复制代码
service              restart and stop all MinIO servers
update               update all MinIO servers
info                 display MinIO server information
user                 manage users
group                manage groups
policy               manage policies defined in the MinIO server
replicate            manage MinIO site replication
config               manage MinIO server configuration
decommission, decom  manage MinIO server pool decommissioning
heal                 heal disks, buckets and objects on MinIO server
prometheus           manages prometheus config
kms                  perform KMS management operations
bucket               manage buckets defined in the MinIO server
tier                 manage remote tier targets for ILM transition
top                  provide top like statistics for MinIO
trace                show http trace for MinIO server
console              show console logs for MinIO server

1)查看集群信息

 
bash
复制代码
mc admin info minio
# 为了方便使用,可以设置别名
alias minfo='mc admin info'
minfo minio

在这里插入图片描述 在这里插入图片描述

2)全局选项

1、选项 [--debug]

【示例】显示info命令的详细调试输出

 
bash
复制代码
mc admin info --debug minio

在这里插入图片描述

2、选项 [--json]

JSON 选项启用JSON 行格式的可解析输出。 【示例】MinIO 服务器信息

 
bash
复制代码
mc admin --json info minio

在这里插入图片描述

3)命令service- 重启和停止所有 MinIO 服务器

service命令提供了一种重新启动和停止所有 MinIO 服务器的方法。 【示例】

 
bash
复制代码
mc admin service restart minio

4)命令policy- 管理预设策略

policy添加、删除、列出策略、获取策略信息以及为 MinIO 服务器上的用户设置策略的命令。

 
bash
复制代码
NAME:
  mc admin policy - manage policies

FLAGS:
  --help, -h                       show help

COMMANDS:
  add      add new policy
  remove   remove policy
  list     list all policies
  info     show info on a policy
  set      set IAM policy on a user or group

1、【示例】列出 MinIO 上的所有预设策略

 
bash
复制代码
mc admin policy list minio

在这里插入图片描述

2、【示例】在 MinIO 上添加新策略“listbucketsonly”

策略来自 /tmp/listbucketsonly.json。当此策略应用于用户时,该用户只能列出顶层存储桶,但不能列出其他任何内容,没有前缀,没有对象。

首先使用以下信息创建 json 文件 /tmp/listbucketsonly.json。

 
bash
复制代码
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}

将策略作为“listbucketsonly”添加到策略数据库

 
bash
复制代码
mc admin policy add minio listbucketsonly /tmp/listbucketsonly.json

# 删除 MinIO 上的策略“listbucketsonly”
mc admin policy remove minio listbucketsonly

3、【示例】在用户或组上设置标准策略。'writeonly'

 
bash
复制代码
# 添加一个新用户“newuser”,密码"newuser123"
mc admin user add minio newuser newuser123
# 给用户添加策略
mc admin policy set minio writeonly user=newuser
# 添加组“somegroup ”,把用户“newuser ”添加到组
mc admin group add minio somegroup newuser
# 给组添加策略
mc admin policy set minio writeonly group=somegroup

5)命令user- 管理用户

1、【示例】在 MinIO 上添加一个新用户“newuser”

 
bash
复制代码
# 添加一个新用户“newuser”,密码"newuser123"
mc admin user add minio newuser newuser123

2、【示例】在 MinIO 上禁用用户“newuser”

 
bash
复制代码
mc admin user disable minio newuser

3、【示例】在 MinIO 上启用用户“newuser”

 
bash
复制代码
mc admin user enable minio newuser

4、【示例】在 MinIO 上删除用户“newuser”

 
bash
复制代码
mc admin user remove minio newuser

5、【示例】列出 MinIO 上的所有用户

 
bash
复制代码
mc admin user list --json minio

6、【示例】显示用户信息

 
bash
复制代码
mc admin user info minio newuser

6)命令group- 管理组

group在 MinIO 服务器上添加、删除、信息、列出、启用、禁用组的命令。

1、【示例】将用户添加到 MinIO 上的组“somegroup”

 
bash
复制代码
# 如果组不存在,则创建组。
mc admin group add minio somegroup newuser

2、【示例】从 MinIO 上的组“somegroup”中删除用户

 
bash
复制代码
mc admin group remove minio somegroup newuser

3、【示例】在 MinIO 上删除一个组“somegroup”

仅在给定组为空时有效,非空组无法删除

 
bash
复制代码
mc admin group remove minio somegroup

在这里插入图片描述

4、【示例】在 MinIO 上获取组“somegroup”的信息

 
bash
复制代码
# 添加组
mc admin group add minio somegroup newuser
# 删除
mc admin group info minio somegroup

5、【示例】列出 MinIO 上的所有组

 
bash
复制代码
mc admin group list minio

6、【示例】在 MinIO 上启用组“somegroup”

 
bash
复制代码
mc admin group enable minio somegroup

7、【示例】在 MinIO 上禁用组“somegroup”

 
bash
复制代码
mc admin group disable minio somegroup

7)命令config- 管理服务器配置

config命令来管理 MinIO 服务器配置。

1、【示例】获取“etcd”子系统配置

 
bash
复制代码
# 通过引入第三方组件etcd,在不动原有集群的基础上实现动态扩展方案
mc admin config get minio etcd

2、【示例】在“etcd”子系统上设置特定设置

 
bash
复制代码
mc admin config set minio etcd endpoints=http://[hostname|ip]:2379

3、【示例】获取 MinIO 服务器/集群的整个服务器配置

 
bash
复制代码
mc admin config export minio > /tmp/my-serverconfig

4、【示例】设置 MinIO 服务器/集群的整个服务器配置

 
bash
复制代码
mc admin config import minio < /tmp/my-serverconfig

这里列出了常用的命令,想了解更多,可以查看官方文档:docs.min.io/docs/minio-…

MinIO Client(mc)操作还是非常简单的,但是更多的使用还是通过程序去调用api接口的,后续会讲解~

三、MinIO 分布式集群扩容

参考:docs.min.io/docs/distri… 在这里插入图片描述

MinIO集群扩容方法:

常见的集群扩容方法可分为两类:水平扩容和垂直扩容。

  • 水平扩容,一般指通过增加节点数扩展系统性能;
  • 而垂直扩容则指提升各节点自身的性能,例如增加节点的磁盘存储空间。直接采用垂直扩容方式扩容MinIO集群的节点磁盘空间,会为集群运行带来若干问题,官方也并不推荐。因此本文主要介绍MinIO的两种水平扩容方式:对等扩容和联邦扩容。

1)对等扩容

首先,MinIO的极简设计理念使得MinIO分布式集群并不支持向集群中添加单个节点并进行自动调节的扩容方式,这是因为加入单个节点后所引发的数据均衡以及纠删组划分等问题会为整个集群带来复杂的调度和处理过程,并不利于维护。因此,MinIO提供了一种对等扩容的方式,即要求增加的节点数和磁盘数均需与原集群保持对等。

  • 例如原集群包含2个节点2块磁盘,则在扩容时必须同样增加2个节点2块磁盘(或为其倍数),以便系统维持相同的数据冗余SLA,从而极大地降低扩容的复杂性;
  • 如上例,在扩容后,MinIO集群并不会对全部的4个节点进行完全的数据均衡,而是将原本的2个节点视作一个区域,新加入的2节点视作另一区域;
  • 当有新对象上传时,集群将依据各区域的可用空间比例确定存放区域,在各区域内仍旧通过哈希算法确定对应的纠删组进行最终的存放。此外,集群进行一次对等扩容后,还可依据扩容规则继续进行对等扩容,但出于安全性考虑,集群的最大节点数一般不得超过32个。

对等扩容的优点在于配置操作简单易行

通过一条命令即可完成扩容(注意:推荐使用连续的节点IP,并参照MinIO官网在扩容命令中使用{})。而对等扩容的局限性在于:

  • 扩容需重启;
  • 扩容存在限制,集群节点数一般不超过32个,这是由于MinIO集群通过分布式锁保证强一致性,若集群节点数过大,维护强一致性将带来性能问题。

【温馨提示】这里不沿用之前的集群进行扩容,这里重新部署2个节点的集群。具体部署,可以参考我之前的文章:高性能分布式对象存储——MinIO(环境部署)

1、环境准备

主机名IPdata备注
local-168-182-110 192.168.182.110 /opt/bigdata/minio/data/export{1,2} 原始节点
local-168-182-111 192.168.182.111 /opt/bigdata/minio/data/export{1,2} 原始节点
local-168-182-112 192.168.182.112 /opt/bigdata/minio/data/export{1,2} 扩容节点
local-168-182-113 192.168.182.113 /opt/bigdata/minio/data/export{1,2} 扩容节点

启动脚本

 
bash
复制代码
#!/bin/bash
# 创建日志存储目录
mkdir -p /opt/bigdata/minio/logs
# 分别在三个节点上创建存储目录
mkdir -p /opt/bigdata/minio/data/export{1,2,3,4}
# 创建配置目录
mkdir -p /etc/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123456

# 所有节点都得修改重启服务
# --address "0.0.0.0:9000" 挂载9001端口为api端口(如Java客户端)访问的端口
# --console-address ":9000" 挂载9000端口为web端口;
/opt/bigdata/minio/minio server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 --config-dir /etc/minio \
http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{1...2} > /opt/bigdata/minio/logs/minio_server.log

minio初始集群信息 web访问:http://local-168-182-110:19001 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

1、将配置copy一份到要扩容的节点

 
bash
复制代码
# 在local-168-182-110执行
cd /opt/bigdata/minio
scp -r /opt/bigdata/minio local-168-182-113:/opt/bigdata/
scp -r /usr/lib/systemd/system/minio.service local-168-182-113:/usr/lib/systemd/system/minio.service

2、添加磁盘

这里也添加2块2G的磁盘

 
bash
复制代码
# 不重启,直接刷新磁盘数据总线,获取新加的磁盘
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done

lsblk

# 格式化
mkfs.ext4 /dev/sdb
mkfs.ext4 /dev/sdc
mkfs.ext4 /dev/sdd
mkfs.ext4 /dev/sde

# 先删再创建挂载目录,因为这里面有其它节点的数据
rm -fr /opt/bigdata/minio/data/export{1..4}
mkdir -p /opt/bigdata/minio/data/export{1..4}

# 挂载
mount /dev/sdb /opt/bigdata/minio/data/export1
mount /dev/sdc /opt/bigdata/minio/data/export2
mount /dev/sdd /opt/bigdata/minio/data/export3
mount /dev/sde /opt/bigdata/minio/data/export4

3、修改启动脚本(run.sh)

 
bash
复制代码
#!/bin/bash
# 创建日志存储目录
mkdir -p /opt/bigdata/minio/logs
# 分别在三个节点上创建存储目录
mkdir -p /opt/bigdata/minio/data/export{1,2}
# 创建配置目录
mkdir -p /etc/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123456

# 所有节点都得修改重启服务
# --address "0.0.0.0:9000" 挂载9001端口为api端口(如Java客户端)访问的端口
# --console-address ":9000" 挂载9000端口为web端口;
# 扩容地址:http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{1...2}
/opt/bigdata/minio/minio server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 --config-dir /etc/minio \
http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{1...2} \
http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{1...2} > /opt/bigdata/minio/logs/minio_server.log

可扩容的方式,使用MINIO纠删码,如果想要扩容,必须使用这种方式。注意上面是三个点。

下面的写法多硬盘多节点部署是不可扩容的方式,下面是官方示例:

 
bash
复制代码
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \
               http://192.168.1.11/export3 http://192.168.1.11/export4 \
               http://192.168.1.12/export1 http://192.168.1.12/export2 \
               http://192.168.1.12/export3 http://192.168.1.12/export4 \
               http://192.168.1.13/export1 http://192.168.1.13/export2 \
               http://192.168.1.13/export3 http://192.168.1.13/export4 \
               http://192.168.1.14/export1 http://192.168.1.14/export2 \
               http://192.168.1.14/export3 http://192.168.1.14/export4

4、重启服务

 
bash
复制代码
systemctl restart minio

web访问:http://local-168-182-110:19001 在这里插入图片描述 到这里就完成了对等扩容了。

2)联邦扩容

MinIO官方提供了另一种扩容机制——联邦扩容,即通过引入etcd,将多个MinIO分布式集群在逻辑上组成一个联邦,对外以一个整体提供服务,并提供统一的命名空间。MinIO联邦集群的架构如下图所示:

在这里插入图片描述

  • 其中,etcd是一个开源的分布式键值存储数据库,在联邦中用于记录存储桶IP地址。
  • 联邦内的各个集群其数据存储以及一致性维护仍由各集群自行管理,联邦只是对外提供一个整体逻辑视图。
  • 通过连接到联邦中任一集群的任一节点,可以查询并访问联邦内所有集群的全部数据,由此获得了逻辑上的空间扩大感。
  • 但实际上,对于一个外部应用访问,联邦需依赖etcd定位到存储桶的实际存储节点,再进行数据访问,联邦则对外屏蔽了桶IP查找和定位过程,从而在逻辑上对外形成了一个统一整体。因此,etcd实际上起到了类似路由寻址的效果。

MinIO联邦集群的数据访问机制具体如下:

  • 客户端应用向联邦集群发送创建存储桶请求,桶名为bucket1;
  • 联邦会将bucket1实际所在的集群节点IP地址写入etcd中,例如bucket1实际将存储于联邦中的集群1上,而集群1包含2个节点,其节点IP地址分别为192.168.182.112和192.168.182.113,则etcd中将写入如下两条记录:

1、部署etcd

下载地址:github.com/etcd-io/etc…

 
bash
复制代码
mkdir -p /opt/bigdata/etcd ; cd /opt/bigdata/etcd
wget https://github.com/etcd-io/etcd/releases/download/v3.4.20/etcd-v3.4.20-linux-amd64.tar.gz
tar -xf etcd-v3.4.20-linux-amd64.tar.gz
# 创建存储目录
mkdir /opt/bigdata/etcd/data

创建配置文件 /usr/local/etcd/conf.yml,三个节点配置文件内容分别如下: etcd01:local-168-182-110

 
bash
复制代码
name: etcd01
data-dir: /opt/bigdata/etcd/data
initial-advertise-peer-urls: http://192.168.182.110:2380
listen-peer-urls: http://192.168.182.110:2380
listen-client-urls: http://192.168.182.110:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.182.110:2379
initial-cluster-token: etcd-cluster
initial-cluster: etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380
initial-cluster-state: new

etcd02:local-168-182-111

 
bash
复制代码
name: etcd02
data-dir: /opt/bigdata/etcd/data
initial-advertise-peer-urls: http://192.168.182.111:2380
listen-peer-urls: http://192.168.182.111:2380
listen-client-urls: http://192.168.182.111:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.182.111:2379
initial-cluster-token: etcd-cluster
initial-cluster: etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380
initial-cluster-state: new

etcd03:local-168-182-112

 
bash
复制代码
name: etcd03
data-dir: /opt/bigdata/etcd/data
initial-advertise-peer-urls: http://192.168.182.112:2380
listen-peer-urls: http://192.168.182.112:2380
listen-client-urls: http://192.168.182.112:2379,http://127.0.0.1:2379
advertise-client-urls: http://192.168.182.112:2379
initial-cluster-token: etcd-cluster
initial-cluster: etcd01=http://192.168.182.110:2380,etcd02=http://192.168.182.111:2380,etcd03=http://192.168.182.112:2380
initial-cluster-state: new

【温馨提示】只能写IP,写主机名会启动失败

配置参数解析:

  • name:当前etcd节点名称。
  • data-dir:数据存储目录。
  • initial-advertise-peer-urls:集群的其他节点通过该地址与当前节点通信。
  • listen-peer-urls:当前节点通过该地址监听集群其他节点发送的信息。
  • listen-client-urls:当前节点通过该地址监听客户端发送的信息。
  • advertise-client-urls:客户端通过该地址与当前节点通信
  • initial-cluster-token:用于区分不同的集群,同一集群的所有节点配置相同的值。
  • initial-cluster:当前集群的所有节点信息,当前节点根据此信息与其他节点取得联系。
  • initial-cluster-state: 本次是否为新建集群,有两个取值:new和existing。

配置服务

 
bash
复制代码
cat >/usr/lib/systemd/system/etcd.service<<EOF
[Unit]
Description=etcd
After=network.target
 
[Service]
Type=notify
ExecStart=/opt/bigdata/etcd/etcd-v3.4.20-linux-amd64/etcd --config-file=/usr/local/etcd/conf.yml
 
[Install]
WantedBy=multi-user.target
EOF

启动服务

 
bash
复制代码
systemctl daemon-reload
systemctl start etcd.service

验证

 
bash
复制代码
# 加软连接
ln -s /opt/bigdata/etcd/etcd-v3.4.20-linux-amd64/etcdctl /usr/local/bin/etcdctl
# 查看集群成员列表
etcdctl member list
# 查看集群成员健康情况
etcdctl endpoint health --endpoints=http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380

在这里插入图片描述 查看etcd版本

 
bash
复制代码
ln -s /opt/bigdata/etcd/etcd-v3.4.20-linux-amd64/etcd /usr/local/bin/etcd
etcd --version

在这里插入图片描述

2、运行多个MinIO集群

集群1

 
bash
复制代码
cd /opt/bigdata/minio
export MINIO_ETCD_ENDPOINTS="http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380"
mkdir -p /etc/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123456
export MINIO_PUBLIC_IPS=192.168.182.110,192.168.182.111
./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001  --config-dir /etc/minio http://192.168.182.11{0...1}/opt/bigdata/minio/data/export{3...4}

web访问:http://local-168-182-110:8001/ 在这里插入图片描述

集群2

 
bash
复制代码
cd /opt/bigdata/minio
export MINIO_ETCD_ENDPOINTS="http://192.168.182.110:2380,http://192.168.182.111:2380,http://192.168.182.112:2380"
mkdir -p /etc/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123456
export MINIO_PUBLIC_IPS=192.168.182.112,192.168.182.113
./minio server --address 0.0.0.0:8000 --console-address 0.0.0.0:8001  --config-dir /etc/minio http://192.168.182.11{2...3}/opt/bigdata/minio/data/export{3...4}

web访问:http://local-168-182-112:8001/ 在这里插入图片描述 配置nginx

 
bash
复制代码
# /etc/nginx/conf.d/minio2.conf
upstream minio_api2 {
    ip_hash;
    server 192.168.182.110:8000;
    server 192.168.182.111:8000;
    server 192.168.182.112:8000;
    server 192.168.182.113:8000;
}

upstream minio_console2 {
    ip_hash;
    server 192.168.182.110:8001;
    server 192.168.182.111:8001;
    server 192.168.182.112:8001;
    server 192.168.182.113:8001;
}

server{
    listen       18000;
    server_name  192.168.182.110;

    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;

    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_ignore_client_abort on;

        proxy_pass http://minio_api2;
    }
}

server{
    listen       18001;
    server_name  192.168.182.110;

    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;

    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_ignore_client_abort on;

        proxy_pass http://minio_console2;
    }
}

重新加载nginx 生效

 
bash
复制代码
systemctl reload nginx

web访问:http://local-168-182-110:18001/ 在这里插入图片描述 不同的客户端访问会显示不同的节点信息


MinIO的基本操作和MinIO扩容实战就到这里了,有疑问的小伙伴欢迎给我留言哦,后续会持续分享更多关于大数据的教程,请小伙伴耐心等待哦~

与[转帖]高性能分布式对象存储——MinIO实战操作(MinIO扩容)相似的内容:

[转帖]高性能分布式对象存储——MinIO实战操作(MinIO扩容)

https://juejin.cn/post/7132852449244610574 一、前言 MinIO的基础概念和环境部署可以参考我之前的文章:高性能分布式对象存储——MinIO(环境部署) 二、客户端操作MinIO Client(mc) 官方文档:docs.min.io/docs/minio-

[转帖]对比测试:Apache Pulsar 与 Kafka 在金融场景下的性能分析

https://baijiahao.baidu.com/s?id=1680081990582501220&wfr=spider&for=pc Apache Pulsar 是下一代分布式消息流平台,采用计算存储分层架构,具备多租户、高一致、高性能、百万 topic、数据平滑迁移等诸多优势。越来越多的企

[转帖]Redis入门(数据结构基础,分布式锁,性能调优)

目录 1、Redis基础 1.1 Redis是啥?能干啥? 1.2 安装Redis 1.3 Redis集成Spring 入门Demo 1.4 Redis支持数据类型 2、分布式锁解决方案-Redis(略) 3、Redis性能调优军规 3.1 缩短键值对的存储长度 3.2 使用 lazy free(延

[转帖]数据库系列之TiDB存储引擎TiKV实现机制

TiDB存储引擎TiKV是基于RocksDB存储引擎,通过Raft分布式算法保证数据一致性。本文详细介绍了TiKV存储引擎的实现机制和原理,加深对TiDB底层存储架构的理解。 1、TiDB存储引擎TiKV TiDB存储引擎TiKV是分布式的key-value存储引擎,它是一种高度分层的架构,通过Ra

[转帖]perf学习-linux自带性能分析工具

存储技术为满足层出不穷应用的海量数据存储需求,从物理介质到技术架构也同样发生了天翻地覆的变革。无论技术如何更新换代,其目的都是为了更好的提供高性能,高容量,高可用的数据服务。本系列文章会对存储系统的测试和调试工具做一个介绍。 dd - Linux世界中的搬运工 FIO – IO压力测试工具 vdbe

[转帖]磁盘的排队论的理论和实践

https://zhuanlan.zhihu.com/p/138887556 队列广泛应用在性能分析领域, 通过观察队列可以知道当时系统的繁忙程度和请求的延时, 甚至可以用排队论去做容量规划等. 对存储有一定了解的同学都或多或少听说过, 当iostat的util大于70%以后, 响应时间会如下图所示

[转帖]FIO 存储性能压测

测试环境 3台服务器:ceph配置内外网分离,外网使用万兆线,内网使用千兆线,osd共21个。 1台客户端:安装fio工具、内核客户端,使用万兆线。 测试目的 针对fio工具中的iodepth(队列深度)和numjobs(线程数)参数,分析使用fio工具时,哪个参数对带宽值测试结果影响比较大。 测试

[转帖]队列深度对IO性能的影响

https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了。正好用户手头有个华为S5600T正好从核心系统中换下来放着没用,就把这个存储换上去了。换了新存储后,系统总体确实有所改善。数据库不

[转帖]队列深度对IO性能的影响

https://www.modb.pro/db/43710 几年前一个客户的Oracle数据库经常HANG,老白帮他分析了一下,结论是存储老化,性能不足以支撑现有业务了。正好用户手头有个华为S5600T正好从核心系统中换下来放着没用,就把这个存储换上去了。换了新存储后,系统总体确实有所改善。数据库不

[转帖]一致性哈希 和 Redis 集群分槽

前言 伴随着系统流量的增大,出现了应用集群。在 Redis 中为了保证 Redis 的高可用也为 Redis 搭建了集群对数据进行分槽存放。在 Mysql数据库要存储的量达到一个很高的地步的时候,我们会对数据库进行分库分表操作。OK,到这儿先假设我们不知道什么是集群、什么是分库分表,我们先来看一个数