【愚公系列】2022年06月 .NET架构班 073-分布式中间件 Minio的落地情况分析
一、单主机/多硬盘模式-情况1
分析:目前部署的单主机使用的是单主机多硬盘模式,只有一个客户,如果需要给多个客户使用多租户方式部署不同的单主机多硬盘模式。如何实现?
方案:多租户单主机/多硬盘
1.租户1单主机,多硬盘启动
1.1 进入到Minio目录中
1.2 然后输入以下命令
minio server --address :9001 --console-address ":9002" D:/work/net/MinIO/tenant1/data1 D:/work/net/MinIO/tenant1/data2 D:/work/net/MinIO/tenant1/data3 D:/work/net/MinIO/tenant1/data4
1.3 进入到Minio查看结果
1.3.1 进入到tenant1目录中
2.租户2单主机,多硬盘启动
2.1 进入到Minio目录中
2.2 然后输入以下命令
minio server --address :9003 --console-address ":9004" D:/work/net/MinIO/tenant2/data1 D:/work/net/MinIO/tenant2/data2 D:/work/net/MinIO/tenant2/data3 D:/work/net/MinIO/tenant2/data4
2.3 进入到Minio查看结果
2.3.1 进入到tenant2目录中
3.租户3单主机,多硬盘启动
3.1 进入到Minio目录中
3.2 然后输入以下命令
minio server --address :9005 --console-address ":9006" D:/work/net/MinIO/tenant3/data1 D:/work/net/MinIO/tenant3/data2 D:/work/net/MinIO/tenant3/data3 D:/work/net/MinIO/tenant3/data4
3.3 进入到Minio查看结果
3.3.1 进入到tenant3目录中
二、单主机/多硬盘模式-情况2
分析:目前Minio部署在windows上,直接根据Minio文件夹来做Minio硬盘的区分,能够直接运行。但是,当我们需要在Linux系统上运行Minio,如何在Linux上运行?
方案:Linux虚拟机
1.Linux系统运行Minio单主机/多硬盘
1、Linux虚拟机准备
1.1 安装Linux虚拟机
在虚拟机管理器VMware Workstation安装Linux Centos 7.6版本虚拟机
1.2 连接Linux虚拟机
使用xshell连接Linux虚拟机
2.磁盘准备
2.1 磁盘安装
Linux虚拟机中安装4块磁盘
2.2 磁盘加载
将虚拟机添加的磁盘加载到Linux系统中,输入命令:
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done
如图所示:
2.3 磁盘状态
查看磁盘状态,输入:lsblk
[root@tony02 minio]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─centos-root 253:0 0 35.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
sdc 8:32 0 1G 0 disk
sdd 8:48 0 1G 0 disk
sde 8:64 0 1G 0 disk
2.4 磁盘不分区操作
2.4.1 磁盘sdb不分区
输入命令:mkfs.ext4 /dev/sdb
2.4.2 磁盘sdc不分区
输入命令:mkfs.ext4 /dev/sdc
2.4.3 磁盘sdd不分区
输入命令:mkfs.ext4 /dev/sdd
2.4.4 磁盘sde不分区
输入命令:mkfs.ext4 /dev/sde
3.Minio准备
3.1 Minio下载
1、创建minio文件夹
输入命令:mkdir minio,如图所示:
2、进入minio文件夹,下载Minio
下载命令:wget https://dl.min.io/server/minio/release/linux-amd64/minio
如图所示:
执行命令:chmod +x minio
如图所示:
3.2 Minio磁盘挂载
3.2.1 在minio文件中,创建四个数据目录
3.2.2 将4个数据目录挂载到4个磁盘上
输入命令:
[root@tony2 ~]# mount /dev/sdb /root/minio/data1/
[root@tony2 ~]# mount /dev/sdc /root/minio/data2/
[root@tony2 ~]# mount /dev/sdd /root/minio/data3/
[root@tony2 ~]# mount /dev/sde /root/minio/data4/
挂载结果如图所示:
[root@tony2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─centos-root 253:0 0 35.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk /root/minio/data1
sdc 8:32 0 1G 0 disk /root/minio/data2
sdd 8:48 0 1G 0 disk /root/minio/data3
sde 8:64 0 1G 0 disk /root/minio/data4
3.3 Minio运行
2.3.1 minio默认用户名和密码,输入命令:
[root@tony2 ~]# export MINIO_ROOT_USER=adminminio
[root@tony2 ~]# export MINIO_ROOT_PASSWORD=adminminio
2.3.2 minio运行命令
[root@tony2 minio]# ./minio server /root/minio/data1 /root/minio/data2 /root/minio/data3 /root/minio/data4 --console-address ":9001"
运行结果如图所示:
三、多主机/单硬盘模式
分析:如果一个主机宕机了,就会导致所有的图片数据全部丢失,客户端无法进行访问,如何保证当主机宕机了,商品图片数据依然可以访问呢?
方案:多主机/单硬盘
1.Linux虚拟机准备
1.1 Linux虚拟主机192.168.44.8
1.1.1 虚拟机准备
1.1.2 虚拟机磁盘准备
1.1.3 虚拟机连接
1.2 Linux虚拟主机192.168.44.7
1.2.1 虚拟机准备
1.2.2 虚拟机磁盘准备
1.2.3 虚拟机连接
1.3 Linux虚拟主机192.168.44.7
1.3.1 虚拟机准备
1.3.2 虚拟机磁盘准备
1.3.3 虚拟机连接
1.4 Linux虚拟主机192.168.44.7
1.4.1 虚拟机准备
1.4.2 虚拟机磁盘准备
1.4.3 虚拟机连接
2.Minio准备
2.1 Linux虚拟主机192.168.44.8
2.1.1 Minio准备:
2.1.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/zz http://192.168.44.8/root/minio/data1/zz http://192.168.44.6/root/minio/data1/zz http://192.168.44.4/root/minio/data1/zz
如图所示:
运行结果:
2.2 Linux虚拟主机192.168.44.7
2.2.1 Minio准备:
2.2.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/zz http://192.168.44.8/root/minio/data1/zz http://192.168.44.6/root/minio/data1/zz http://192.168.44.4/root/minio/data1/zz
如图所示:
运行结果:
2.3 Linux虚拟主机192.168.44.6
2.3.1 Minio准备:
2.3.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/zz http://192.168.44.8/root/minio/data1/zz http://192.168.44.6/root/minio/data1/zz http://192.168.44.4/root/minio/data1/zz
如图所示:
运行结果:
2.4 Linux虚拟主机192.168.44.4
2.4.1 Minio准备:
2.4.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/zz http://192.168.44.8/root/minio/data1/zz http://192.168.44.6/root/minio/data1/zz http://192.168.44.4/root/minio/data1/zz
如图所示:
运行结果:
四、多主机/多硬盘模式
1.Linux虚拟主机准备
1.1 虚拟机192.168.44.8准备完成
1.2 虚拟机192.168.44.8准备完成
1.3 虚拟机192.168.44.8准备完成
1.4 虚拟机192.168.44.8准备完成
2.Minio准备
2.1 Linux虚拟主机192.168.44.8
2.1.1 Minio准备:
2.1.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/dd{1..2} http://192.168.44.8/root/minio/data1/dd{1..2} http://192.168.44.6/root/minio/data1/dd{1..2} http://192.168.44.4/root/minio/data1/dd{1..2}
如图所示:
运行结果:
2.2 Linux虚拟主机192.168.44.7
2.2.1 Minio准备:
2.2.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/dd{1..2} http://192.168.44.8/root/minio/data1/dd{1..2} http://192.168.44.6/root/minio/data1/dd{1..2} http://192.168.44.4/root/minio/data1/dd{1..2}
如图所示:
运行结果:
2.3 Linux虚拟主机192.168.44.6
2.3.1 Minio准备:
2.3.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/dd{1..2} http://192.168.44.8/root/minio/data1/dd{1..2} http://192.168.44.6/root/minio/data1/dd{1..2} http://192.168.44.4/root/minio/data1/dd{1..2}
如图所示:
运行结果:
2.4 Linux虚拟主机192.168.44.4
2.4.1 Minio准备:
2.4.2 Minio运行:
输入命令:
./minio server --address :9000 http://192.168.44.7/root/minio/data1/dd{1..2} http://192.168.44.8/root/minio/data1/dd{1..2} http://192.168.44.6/root/minio/data1/dd{1..2} http://192.168.44.4/root/minio/data1/dd{1..2}
如图所示:
运行结果:
五、微服务项目落地单主机/多硬盘
1.Nginx准备
1.1 Nginx下载
Nginx下载:http://nginx.org/download/nginx-1.20.2.zip
1.2 Nginx配置Minio
1.2.1 进入到Nginx conf目录中
1.2.2 在nginx.conf目录中配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8081;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://YDT.Minioservices;
}
}
#Minio负载均衡配置
upstream YDT.Minioservices{
server 192.168.44.4:9000;
server 192.168.44.6:9000;
server 192.168.44.7:9000;
server 192.168.44.8:9000;
}
}
1.2.3 nginx启动
使用cmd输入命令:nginx
2.微服务系统准备
2.1 先在ProductController类中添加代码(直接连接Nginx)
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Minio;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
namespace YDT.FileService.Controllers
{
/// <summary>
/// 商品图片控制器
/// </summary>
[ApiController]
[Route("[controller]")]
public class ProductFileController : ControllerBase
{
private readonly ILogger<ProductFileController> _logger;
public ProductFileController(ILogger<ProductFileController> logger)
{
_logger = logger;
}
/// <summary>
/// 批量商品上传
/// </summary>
/// <returns></returns>
[HttpPost("UploadList")]
public IActionResult UploadList(IFormFile[] files)
{
// 2.1 遍历所有文件
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
// 2.1 创建MinioClient客户端
MinioClient minioClient = new MinioClient("127.0.0.1:8081", "minioadmin", "minioadmin");
// 2.2 创建文件桶
if (!minioClient.BucketExistsAsync("product").Result)
{
minioClient.MakeBucketAsync("product").Wait();
}
// 2.3 上传文件
minioClient.PutObjectAsync("product", formFile.FileName, formFile.OpenReadStream(), formFile.Length).Wait();
_logger.LogInformation($"文件:{formFile.FileName}上传到MinIO成功");
}
}
return new JsonResult("上传成功");
}
}
}
- 点赞
- 收藏
- 关注作者
评论(0)