基于centos7系统搭建minio本地分布式集群(4节点4驱动器,共16驱动器)

基于centos7系统搭建minio本地分布式集群(4节点4驱动器,共16驱动器)

1.环境准备(每台机器都做相同环境准备,虚拟机可直接复制3份即可,大部分配置都相同,只需改下ip,hostname即可)

1.1.安装centos7

1.2.准备4块空磁盘,如下sdb,sdc,sdd,sde

[root@localhost nss]# lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
sda                                                                      
├─sda1          xfs               091990a7-76aa-4453-a974-bfc17b04eb6f   /boot
└─sda2          LVM2_member       X7WlLf-gVb2-97ji-f5s7-2gXd-ixhA-SXAD9G 
  ├─centos-root xfs               7dd2088c-f1dd-42bd-8a18-406b29fc288c   /
  ├─centos-swap swap              f3866f04-f779-48ee-a23b-4d95f5f6cc55   [SWAP]
  └─centos-home xfs               fe9ceeb2-c533-47e4-9176-8f8f1953e912   /home
sdb
sdc
sdd
sde

1.3.磁盘格式化xfs文件系统(官方建议xfs格式,性能最佳)

mkfs.xfs /dev/sdb -L DISK1
mkfs.xfs /dev/sdc -L DISK2
mkfs.xfs /dev/sdd -L DISK3
mkfs.xfs /dev/sde -L DISK4

1.4.创建指定挂载目录(如/boot/minio/data1,路径可自定义,官方建议使用相同路径,便于启动命令更简洁)

mkdir -p /boot/minio/data1
mkdir -p /boot/minio/data2
mkdir -p /boot/minio/data3
mkdir -p /boot/minio/data4

mkfs.xfs /dev/sdb -L DISK1
mkfs.xfs /dev/sdc -L DISK2
mkfs.xfs /dev/sdd -L DISK3
mkfs.xfs /dev/sde -L DISK4

1.5.修改/etc/fstab,添加如下规则(保证重启自动挂载)

$ vim /etc/fstab

#   # <file system>  <mount point>  <type>  <options>         <dump>  <pass>
LABEL=DISK1      /boot/minio/data1     xfs     defaults,noatime  0       2
LABEL=DISK2      /boot/minio/data2     xfs     defaults,noatime  0       2
LABEL=DISK3      /boot/minio/data3     xfs     defaults,noatime  0       2
LABEL=DISK4      /boot/minio/data4     xfs     defaults,noatime  0       2

# 挂载文件生效
mount -a

1.6.修改主机名称,保证4台节点网络互通

# 官方建议使用相同路径,便于启动命令更简洁
[root@localhost nss]# hostnamectl set-hostname minio1.example.com
[root@localhost nss]# hostname
minio1.example.com

# 修改/etc/hosts,保证各个主机名可解析
10.95.33.183  minio1.example.com
10.95.33.201  minio2.example.com
10.95.33.180  minio3.example.com
10.95.33.190  minio4.example.com

# 如设置iptables,请添清除规则或加9000,9001放行规则,保证互相可以访问minio服务,以及控制台
iptables -F

1.7.安装minio包

# 官网下载
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230217175243.0.0.x86_64.rpm

# 安装
yum install minio-20230217175243.0.0.x86_64.rpm

# 默认安装在/usr/local/bin/minio,查看minio版本
[root@minio1 develop]# /usr/local/bin/minio -v
minio version RELEASE.2023-02-17T17-52-43Z (commit-id=84bb7d05a998a096b96acd68ea94053d28a87eb3)
Runtime: go1.19.6 linux/amd64
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Copyright: 2015-2023 MinIO, Inc.

1.8.创建环境变量

# minio会从环境变量获取MINIO_ROOT_USER和MINIO_ROOT_PASSWORD作为访问的用户名密码
[root@minio3 /boot/nss]export MINIO_ROOT_USER=admin
[root@minio3 /boot/nss]echo $MINIO_ROOT_USER
admin
[root@minio3 /boot/nss]export MINIO_ROOT_PASSWORD=nss123456
[root@minio3 /boot/nss]echo $MINIO_ROOT_PASSWORD
nss123456
[root@minio3 /boot/nss]

1.9.同步时间(每台机器都执行以下命令,也可以用其他方式)

ntpdate ntp.ubuntu.com

2.启动minio服务及页面控制台(每台服务器都执行如下命令)

# 9000是minio文件服务服务端口,9001是minio控制台界面服务端口(客户端)

/usr/local/bin/minio server  http://minio{1...4}.example.com/boot/minio/data{1...4} --console-address :9001  --address :9000

# 输出以下表示启动成功,
# 第一行WARNING是官方建议系统是用内核>=4.0的linux系统,低于4.0的官方提示存在性能问题,官方建议使用Linux 8.5+或Ubuntu 18.04+的系统,生产环境建议按照官方提示,使用Linux 8.5+或Ubuntu 18.04+的系统
[root@localhost nss]# /usr/local/bin/minio server  http://minio{1...3}.example.com/boot/minio/data{1...4} --console-address :9001  --address :9000

WARNING: Detected Linux kernel version older than 4.0.0 release, there are some known potential performance problems with this kernel version. MinIO recommends a minimum of 4.x.x linux kernel version for best performance
Waiting for all MinIO sub-systems to be initialized.. lock acquired
Automatically configured API requests per node based on available memory on the system: 529
All MinIO sub-systems initialized successfully in 38.959645ms
MinIO Object Storage Server
Copyright: 2015-2023 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2023-02-17T17-52-43Z (go1.19.6 linux/amd64)

Status:         16 Online, 0 Offline. 
API: http://10.95.33.183:9000 http://127.0.0.1:9000 
RootUser: admin 
RootPass: nss123456 
Console: http://10.95.33.183:9001 http://127.0.0.1:9001 
RootUser: admin 
RootPass: nss123456 

Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
   $ mc alias set myminio http://10.95.33.183:9000 admin nss790016602

Documentation: https://min.io/docs/minio/linux/index.html


3.添加Nginx负载均衡代理配置

upstream minio{
        server minio1.example.com:9000;
        server minio2.example.com:9000;
        server minio3.example.com:9000;
        server minio4.example.com:9000;
}
server {
        listen 9003;
        server_name minio;
        location / {
                proxy_set_header Host $http_host;
                proxy_pass http://minio;
        }
}

4.验证控制台

  • http://10.95.33.183:9001

5.验证s3上传文件,下载文件

5.1.安装s3cmd

yum install s3cmd

5.2.添加配置

s3cmd --configure
# [root@minio1 data3]# s3cmd --configure

# Enter new values or accept defaults in brackets with Enter.
# Refer to user manual for detailed description of all options.

# Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
# Access Key: admin
# Secret Key: nss123456
# Default Region [US]: 

# Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
# S3 Endpoint [s3.amazonaws.com]: 10.95.33.183:9003

# Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
# if the target S3 system supports dns based buckets.
# DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket)10.95.33.183:9003      

# Encryption password is used to protect your files from reading
# by unauthorized persons while in transfer to S3
# Encryption password: 
# Path to GPG program [/bin/gpg]: 

# When using secure HTTPS protocol all communication with Amazon S3
# servers is protected from 3rd party eavesdropping. This method is
# slower than plain HTTP, and can only be proxied with Python 2.7 or newer
# Use HTTPS protocol [Yes]: No

# On some networks all internet access must go through a HTTP proxy.
# Try setting it here if you can't connect to S3 directly
# HTTP Proxy server name: 

# New settings:
#   Access Key: admin
#   Secret Key: nss123456
#   Default Region: US
#   S3 Endpoint: 10.95.33.183:9003
#   DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)10.95.33.183:9003
#   Encryption password: 
#   Path to GPG program: /bin/gpg
#   Use HTTPS protocol: False
#   HTTP Proxy server name: 
#   HTTP Proxy server port: 0

# Test access with supplied credentials? [Y/n] n

# Save settings? [y/N] y
# Configuration saved to '/root/.s3cfg'
# (base) [root@minio1 data3]# 

5.3.上传/下载文件

# 上传命令
s3cmd put run.sh s3://test

# 下载命令
s3cmd get s3://test/run.sh ./new_run.sh

5.4.控制台查看

  • http://10.95.33.183:9001

6.集群扩容

集群扩容需要以节点池为单位(非节点)进行扩容,比如上述集群采用4节点4驱动器,共16驱动器部署,那么扩容1组节点池则增加4节点4驱动器,共16驱动器,扩容后,则为8节点4驱动器,共32驱动器
基于能力的规划
MinIO 通常建议规划容量,以便 仅在部署正常运行 2 年以上后才需要扩展服务器池。

例如,考虑估计每年产生 10TB 数据的应用程序套件。MinIO 部署应至少提供:

10TB + 10TB + 10TB = 30TB

MinIO 建议添加缓冲存储以应对存储数据的潜在增长(例如 40TB 的总可用存储)。作为经验法则,最初更多的容量比频繁的即时扩展更能满足容量需求。

由于 MinIO擦除编码需要一些存储用于奇偶校验,因此总原始存储必须超过计划的可用 容量。考虑使用 MinIO纠删码计算器作为围绕特定纠删码设置规划容量的指导。

6.1.扩容和部署集群步骤一样,除了修改ip,hostname外,还需要修改启动命令

# 原启动命令
/usr/local/bin/minio server  http://minio{1...4}.example.com/boot/minio/data{1...4} --console-address :9001  --address :9000

# 扩容后启动命令, 其实就是再增加一组节点池
/usr/local/bin/minio server  http://minio{1...4}.example.com/boot/minio/data{1...4} http://minio{5...8}.example.com/boot/minio/data{1...4} --console-address :9001  --address :9000

6.2.添加nginx配置

# 在原有基础上增加ip
upstream minio{
        server minio1.example.com:9000;
        server minio2.example.com:9000;
        server minio3.example.com:9000;
        server minio4.example.com:9000;
        # 新增以下集群ip
        server minio5.example.com:9000;
        server minio6.example.com:9000;
        server minio7.example.com:9000;
        server minio8.example.com:9000;
}
server {
        listen 9003;
        server_name minio;
        location / {
                proxy_set_header Host $http_host;
                proxy_pass http://minio;
        }
}

  • 扩展集群后,minio的存储机制会优先选择空间大的节点池来存储

7.其他功能

7.1.硬件清单

  • https://min.io/docs/minio/linux/operations/checklists/hardware.html#minio-hardware-checklist

7.2.事件通知

  • https://min.io/docs/minio/linux/administration/monitoring.html

8.问题排查

8.1.Marking 10.95.33.201:9000 offline temporarily

  • 表示服务没起来,可能原因网络不通,检查域名是否可访问,ip是否可访问,iptables是否放行,或者对端启动故障导致

9.注意

  • 分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)
  • 数据冗余(纠删码)会在下一次cli触发时生效
  • minio不支持在已有minio数据下重新搭建,必须清空已有数据,否则无法启动
  • minio扩容,需要按服务器池来扩容,不能单个节点扩容
  • minio节点建议至少4台(官方建议),否则没有高可用效果。另外节点挂掉不能超过总节点的一半,否则没有高可用效果。(实测3台也可以实现高可用,但仅允许挂调1台)
  • minio每个节点至少4块驱动器(磁盘)(官方建议),否则没有高可靠效果。例如单节点部署2块磁盘,一块磁盘数据丢失,则该磁盘丢失数据无法恢复,而4块磁盘minio会自动开启就删吗
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值