MinIO是一种简单易用的对象存储,可以用于应用存放文件,也可用于数据湖的构建。
其协议兼容S3,使得其可以有良好的易用性。
本次分享主要以搭建一个2台机器每台机器4块数据盘,构建一个8快盘的集群为例,用Nginx负载均衡提供外部调用的方式来进行搭建。
那么,我们直接开始吧。
如果不想细看,只想进行集群搭建,按顺序复制脚本直接执行便可。
磁盘处理
MinIO需要多块磁盘,为了比较好的构建集群以及体现其特性,我们在例子中采用了2台机器,每台机器4块磁盘。
1. 处理磁盘格式并挂载
# 修改hostname
hostnamectl set-hostname minio1
# 查看与修改最大连接数
ulimit -n #查看最大连接数
ulimit -a
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 查看磁盘并进行挂载
lsblk
df -h
# 挂载磁盘
vim /etc/fstab
上面命令运行情况如下
[root@iZ2zea1rb8eavx1toxecz7Z ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 40G 0 disk
└─vda1 253:1 0 40G 0 part /
vdb 253:16 0 500G 0 disk
vdc 253:32 0 500G 0 disk
vdd 253:48 0 500G 0 disk
vde 253:64 0 500G 0 disk
[root@iZ2zea1rb8eavx1toxecz7Z ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 528K 7.7G 1% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/vda1 40G 2.5G 35G 7% /
tmpfs 1.6G 0 1.6G 0% /run/user/0
如果是minio,不建议用ext4,它不需要磁盘做校验,其自身已具备该机制。 使用 XFS 格式化驱动器。 MinIO 强烈建议为存储提供 XFS 格式化的驱动器。 MinIO 在内部测试和验证套件中使用 XFS,以提供对性能和行为在所有规模上的额外信心。 MinIO 并 不 测试也不推荐其他文件系统,如 EXT4、BTRFS 或 ZFS。
接下来我们将修改/etc/fstab文件来实现磁盘挂载
UUID=037e5afb-cc1b-4887-8dad-2e6bfa8cdcd1 / xfs defaults 0 0
UUID=ca4ff08a-e7e5-45d4-8de7-77e74c0ff8a4 /boot xfs defaults 0 0
UUID=8a767f76-2b38-4057-aeb8-1274c1b18c57 swap swap defaults 0 0
/dev/vdb /www/data-trino-1 xfs defaults,nofail 0 0
/dev/vdc /www/data-trino-2 xfs defaults,nofail 0 0
/dev/vdd /www/data-trino-3 xfs defaults,nofail 0 0
/dev/vde /www/data-trino-4 xfs defaults,nofail 0 0
创建对应挂载目录
cd /
mkdir -p www
cd www/
mkdir -p data-trino-1
mkdir -p data-trino-2
mkdir -p data-trino-3
mkdir -p data-trino-4
mkfs.xfs /dev/vdb
mkfs.xfs /dev/vdc
mkfs.xfs /dev/vdd
mkfs.xfs /dev/vde
mount /dev/vdb /www/data-trino-1
mount /dev/vdc /www/data-trino-2
mount /dev/vdd /www/data-trino-3
mount /dev/vde /www/data-trino-4
配置hosts
vim /etc/hosts
修改hosts文件是便于未来更换服务器的调整,在配置minio的时候会使用到。
172.10.1.1 datalake1
172.10.1.9 datalake2
下载minio并配置启动脚本
# 创建目录
cd /opt
mkdir -p minio
chmod +x minio
cd minio
wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
# 创建启动脚本, 名字不是很要紧,run或start或别的都可以
vi start.sh
start.sh 的内容,注意其中的http地址及文件目录,与我们前面的hosts文件及挂载的磁盘对应上了。
#!/bin/bash
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=minioPwd!@#
/opt/minio/minio server http://datalake{1...2}/www/data-trino-{1...4}/minio_data --console-address ":9001"
chmod +x start.sh
创建minio服务
vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
ExecStart=/opt/minio/start.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
安装Nginx
安装nginx是为了便于应用负载均衡, 只需要在一台服务器安装即可,或者安装在别的服务器也可以。
# 一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
# 二、安装 PCRE让 Nginx 支持 Rewrite 功能
cd /usr/local/src/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
# 解压安装包
tar -zxvf pcre-8.35.tar.gz
# 进入安装包目录
cd pcre-8.35
# 编译安装
./configure
make && make install
# 查看pcre版本
pcre-config --version
# 三、安装 Nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.20.2.tar.gz
# 解压安装包
tar -zxvf nginx-1.20.2.tar.gz
# 进入安装包目录
cd nginx-1.20.2
# 编译安装
./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make
make install
配置nginx指向minio
vim /usr/local/webserver/nginx/conf/nginx.conf
# 添加以下配置
upstream minio {
server datalake1:9000;
server datalake2:9000;
}
upstream minio-console {
ip_hash;
server datalake1:9001;
server datalake2:9001;
}
server {
listen 19000;
listen [::]:19000;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 3000;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
}
server {
listen 19001;
listen [::]:19001;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
proxy_connect_timeout 3000;
# To support websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://minio-console;
}
}
配置nginx服务
cp /usr/lib/systemd/system/minio.service /usr/lib/systemd/system/nginx-minio.service
vim /usr/lib/systemd/system/nginx-minio.service
[Unit]
Description=Nginx
[Service]
ExecStart=/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Enable minio 与 nginx服务
# 刷新配置
systemctl daemon-reload
# 添加服务
systemctl enable minio && systemctl start minio
systemctl enable nginx-minio && systemctl start nginx-minio
systemctl status minio
systemctl status nginx-minio