起因
阿里云ESA的流量非常吓人,超量之后要将近两毛钱1GB,因此我用目前手上的几台机器做了负载分流图床,分离网站中的大文件,刷新网站再也不心疼了。这篇文章讲解一下我捣鼓下来的心得
用户先请求负载均衡节点,节点重定向到空闲的机器返回用户,看下来OpenList非常符合我的需求
食用提示:本文偏教程向!
介绍
OpenList 中有多种负载均衡架构,可以根据需求参考文档选择。本文就以 多源读取负载均衡 为例
文档原文:
“多源读取负载均衡可以将文件的副本分散在若干不同的存储服务上,当用户访问文件时,系统会随机选择其中一个文件返回,从而降低单个存储服务的上行带宽压力(类似于 RAID 1)”
用户上传时,文件副本会上传到每个节点;拉取时302重定向到随机资源节点,提供用户下载
简单来说就是下面的架构
存储子节点只需要部署 OpenList 支持的存储服务即可。WebDAV 、 FTP/SFTP 、S3 以及各种网盘都可以,这里就用 MinIO 简单部署一个S3服务作为演示
正文
部署MinIO S3子节点
需要考虑一下数据放在哪个路径,建议单独挂载数据分区,最好不要和系统在一个分区,不然可能和系统殉爆。这里就不多说了
1lsblk #列出所有可用块返回例
1sda 8:0 0 119.2G 0 disk2├─sda1 8:1 0 1G 0 part /boot/efi3└─sda2 8:2 0 118.2G 0 part /4sdb 8:0 0 465.8G 0 disk5├─sdb1 8:1 0 300M 0 part6├─sdb2 8:2 0 16M 0 part7└─sdb3 8:3 0 465.5G 0 part /mnt/hdd上面的案例就是一块 sda 系统盘,一块 sdb 数据盘: 挂载在 /mnt/hdd
接下来用Docker部署minio
- 准备数据路径
1sudo mkdir -p /mnt/hdd/minioData #这里换成你的路径- 运行容器
1sudo docker run -d \2 --name minio \3 --restart unless-stopped \4 -p 9000:9000 \5 -p 9001:9001 \6 -e MINIO_ROOT_USER='账号' \7 -e MINIO_ROOT_PASSWORD='密码' \8 -v /mnt/hdd/minioData:/minioData \9 minio/minio server /minioData --console-address ":9001"没docker自己下一个,拉取minio镜像需要魔法,或者用代理站
-p 端口推荐换别的,默认的 9001 是管理面板, 9000 是S3 API
- 进入
服务器IP:9001,输入刚刚的账户密码,进去后点击Create Bucket创建一个桶,然后记下存储桶名称
一个子节点就部署好了,方便吧 =)。
后续中心节点可以使用 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 连接S3 API,也可以自己用MinIO CLI创建访问子用户秘钥ID和安全访问秘钥,可控制权限
也可以用MinIO CLI纯命令行创建桶,点我空投,这里不再赘述
部署Openlist分流节点
连接到待部署机,安装Openlist使用从文档获取的一键脚本,直接丢进去即可
1curl -fsSL https://res.oplist.org.cn/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh按照指引安装,国内机最好加上代理 如 https://gh-proxy.com/
安装好之后打开Openlist后台,默认是 服务器ip:5244
配置负载均衡
Openlist管理面板打开之后,点左侧栏 存储 -> 添加 -> 对象存储驱动 -> 添加
-
根文件夹路径: 给挂载文件夹取一个名字,推荐地区命名,如/HangZhou#1 -
存储桶: MiniIO的存储桶名称 -
端点: 默认是http://服务器ip:9000 -
访问密钥 ID: MiniIO的用户名 -
访问密钥: MiniIO的密码
然后打开强制路径样式,最下方添加即可,然后去测试一下文件上传下载
以上是单个存储节点的添加方式,添加完所有节点进行下一步
一样是刚刚添加驱动的地方,这次点击并添加 别名
-
挂载路径: 选一个喜欢的,如/SharkcatFileHub -
路径:"merge:"加上每个节点的路径,如merge:/HangZhou#1 -
读取冲突策略和上传冲突策略就是负载均衡策略,可参考openlist文档,正常按照下图填写即可

点击确认,然后就大功告成了!
往别名文件夹里上传测试文件,可正常打开,且随机返回地址

平时使用上传到别名文件夹,右键复制直链使用即可
接下来是收尾工作

往节点文件夹单独上传文件不会同步,平时用不上子节点的话隐藏子节点文件夹即可
去管理界面,设置 -> 全局 -> 隐藏文件(在第一项)
添加 /\/节点路径名/i
1`/\/HangZhou#1/i`2`/\/节点路径名B/i`3`/\/节点路径名C/i`然后保存即可,隐藏后只是前端不显示,不会影响功能
MiniO命令行配置
MiniO CLI可以方便的配置所有S3服务远程节点,本机节点等,先下载并添加权限
1wget https://dl.min.io/client/mc/release/linux-amd64/mc2chmod +x mc最好配置一个别名,要不然会很麻烦
1mc alias set <别名> http://服务器ip:9000 <管理员用户名> <管理员密码>本机填127就可以,类似如下
1mc alias set my-tong http://127.0.0.1:9000 admin admin123创建一个桶
1mc mb <别名>/my-bucket #my-bucket桶名创建用户,<ACCESS_ID> 和 <SECRET_KEY> 就是这个用户用于访问 S3 API 的凭据
1mc admin user add <别名> <ACCESS_ID> <SECRET_KEY>给予该用户权限,例如读写权限
1mc admin policy attach <别名> readwrite --user <ACCESS_ID>readwrite 读写权限
readonly 只读权限
MiniO配置SSL证书
差点忘了还要配置https,创建一个目录把证书放进去,然后docker加挂载启动即可
例如把 private.key 和 public.crt 放在 /mnt/hdd/minioCerts
1chmod 600 /mnt/hdd/minioCerts/private.key2chmod 644 /mnt/hdd/minioCerts/public.crt3
4docker run -d \5 --name minio \6 --restart unless-stopped \7 -p 9000:9000 \8 -p 9001:9001 \9 -e MINIO_ROOT_USER='账号' \10 -e MINIO_ROOT_PASSWORD='密码' \11 -v /mnt/hdd/minioData:/minioData \12 -v /mnt/hdd/minioCerts:/root/.minio/certs:ro \13 minio/minio server /minioData \14 --console-address ":9001"加 :ro 只读
关于文件同步
多源读取负载均衡 只有经过别名文件夹的上传、读写、修改才会同步至所有节点,对单节点的操作不会同步
假如 节点A 有某个文件 ,节点B 没有,此时openlist只会选择 节点A 的URL返回。前提是该文件是通过别名文件夹上传的
如果需要增加节点,只需要将别名文件夹中的所有资源复制到目标存储(在Openlist Web UI中),然后添加进别名文件夹就可以
终于byd写完了
部分信息可能已经过时


