基于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会自动开启就删吗