windows环境下搭建minio分布式存储系统并通过nginx实现负载均衡
一、环境准备
windows环境下的minio可执行文件(官网下载地址)以及nginx(官网下载地址)
二、本地搭建minio集群
2.1、创建minio存储目录
如下图所示,在minioData目录下创建八个空文件夹
2.2、批处理文件启动minio集群
这里将minio.exe可执行文件单独放到minio目录下,并编写两个批处理脚分别启动两台分布式存储系统的节点,目录结构如下:
其中 startCluster1.bat
cd %~dp0 set data_home=D:/minioData .\minio.exe server --address ":19011" ^ http://127.0.0.1:19011/%data_home%/data{1...4} ^ http://127.0.0.1:19012/%data_home%/data{5...8}
startCluster2.bat
cd %~dp0 set data_home=D:/minioData .\minio.exe server --address ":19012" ^ http://127.0.0.1:19011/%data_home%/data{1...4} ^ http://127.0.0.1:19012/%data_home%/data{5...8}
第一行cd %~dp0表示更改当前目录为批处理本身的目录
startCluster1.bat启动端口号19011的服务器节点,并且通过http://127.0.0.1:19011/%data_home%/data{1...4}指定该服务器节点下有四个存储磁盘(driver),分别对应了data1,2,3,4,并通过http://127.0.0.1:19012/%data_home%/data{5...8}将19011和19012这两个节点关联起来, startCluster2.bat内容含义也是一样。如果模拟三个或者四个服务器节点,需要创建对应个数的bat文件,每个文件依次往后添加,如下:
cd %~dp0 set data_home=D:/minioData .\minio.exe server --address ":19011" ^ http://127.0.0.1:19011/%data_home%/data{1...4} ^ http://127.0.0.1:19012/%data_home%/data{5...8} ^ http://127.0.0.1:19013/%data_home%/data{9...12} ^
编辑好两个批处理脚本后依次双击startCluster1.bat和startCluster2.bat启动两台节点服务器
其中节点一对应的服务器端口为19011,控制台端口为50720;节点二对应的服务器端口为19012,控制台端口为控制台端口是随机分配的。浏览器输入localhost:19011访问节点一的客户端页面
地址会自动转到50720端口,用户名密码均为minioadmin
这里会显示两台存储节点(19011和19012)和8个存储盘(data1到data8)
三、minio的简单使用
3.1、创建桶bucket
注意桶的名称不能包含大写字母,这里创建名为java-bucket的桶,结果发现我们在节点一下创建的桶,所有节点的存储盘(data1~data8)下均有java-bucket空目录,同时其他节点也可以访问到该桶。
3.2 上传文件到桶中
进入java-bucket中,点击upload上传按钮
上传文件之后可以在任意一个节点进行下载,同时我发现该文件存储到了其中一个节点的所有盘中,比如这次19011挂载了data1到data4,无论从19011节点还是19012节点上传,文件都存储到了19012节点所在的盘data5到data8中,目前对分布式节点的存储机制尚未清楚。
四、通过nginx搭建负载均衡
我们搭建多个服务器存储节点就会有多个访问入口,没有一个统一的入口,并且无论访问哪个入口能实现的操作都是一样的,这样我们就需要一个合理的机制来访问和管理我们现有的服务器存储节点的入口,这就需要搭配nginx来使用。
下载好windows下的nginx并解压
进入conf目录修改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; upstream minio_servers { server 127.0.0.1:19011; server 127.0.0.1:19012; } server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location /minio { proxy_pass http://minio_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 0; chunked_transfer_encoding on; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
其中
upstream minio_servers { server 127.0.0.1:19011; server 127.0.0.1:19012; }
和下面的部分是对源文件所进行修改的部分。
location /minio { proxy_pass http://minio_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 0; chunked_transfer_encoding on; }
修改保存后,命令行进入nginx.exe所在目录,输入start nginx启动nginx
启动后浏览器输入localhost/minio通过nginx轮询策略依次访问19011和19012两台服务节点。
至此,windows环境下搭建minio分布式存储系统并通过nginx实现负载均衡已实现,下一篇详细讲解springboot项目整合minio分布式存储。