概述
由于先前的判断失误,随着 7ren.net 电影片源越来越多,云上资源消耗过大,再加上合规限制等诉求,混合部署迫在眉睫。
如下是本次混合部署的整体架构图,包括了物理集群,云上集群以及相关应用架构。
开疆拓土
这个方案里面,最复杂的部分就是物理机部分。其实早在三年前就玩过物理机,但是系统使用物理机器部署业务确实也是第一次。一方面是因为出租房的原因需要经常搬迁,其次网络不是标准的入户网络极其不稳定。由于去年总算把临深圳的房子装修完了,所以硬件条件总算是具备了,整个机房就直接架设在小区房内,民电是真的省。
其次是采购机器,考虑两方面原因
- 机箱可扩展,目前 ffmpeg 主要采用 CPU 做转码和切流,这里后续可能会考虑使用 GPU 方案
- 空间省,不需要机架,由于不是专业机箱所以这里空间一定要省,不能占用太多生活空间
结合这两点,塔式机箱其实可以完全满足。所以果断入手 DELL T630 两台机器做互备集群。
具体规格如下:
Physical Machine A(计算型) :CPU – Intel Xeon E5-2697R v4 *2 ,Memory – DDR4 256GB,Disk – 1T SSD *2 RAID 1
Physical Machine B(存储型) :CPU – Intel Xeon E5-2670 v3 *2 ,Memory – DDR4 128GB,Disk – 1T SSD *4 RAID 4
计算型主要负责运行虚拟化系统,运行环境,采集资源等中计算操作。
存储型主要负责数据存储,数据备份,数据分发等数据相关操作。对存储量及IO和高可用要求较高。这里也是唯一重度依赖云上资源的一部分内容。
物理机 – 网络部分
这里组网相对来讲非常麻烦,因为是家庭网络,这里只能采用两个方案 网络穿透或者网络直通。
网络穿透:是指将内网固定端口穿透通过网络穿透工具暴露在公网上
网络直通:将家庭网络直接通过固定 IP 的方式暴露在公网
两种网络方案其实我都试过,网络直通可以直接给电信人工说要组装家庭监控,第二天基本就会批下来。网络穿透相对来讲比较麻烦需要在云上部署一个 proxy 网络代理服务,才能实现穿透。
但是这里网络直通可能风险会非常大,由于家庭有监控摄像头,扫地机器人等智能设备,如果贸然将全部网络全都放到公网,可能会招致黑客攻击。其次,网站固定 IP 且不可更换,在任何场景下都不是什么好事,还要考虑到就近路由等高级能,所以这里选择使用更麻烦的公网网络穿透方案。
这里网络穿透方案具体落地,依然使用 FRP
具体详情可参考 https://canmeng.net/c/745
物理机 – 系统部分
考虑到计算和存储的不同特性,所以这里在系统层对存储和计算做了分别设计
Physical Machine A(计算型) :需要做虚拟化,使用 Esix 系统做独立虚拟
Physical Machine B(存储型) :Centos 7.x
这里主要考虑到性能和隔离两个问题,计算类场景天然需要做资源隔离,不然有其他业务资源被抢占也不太好。存储类一般是打平的,数据存储不适合做太多虚拟化。
所以这里针对场景不同,选用了不同的底层系统。
Esix 介绍
Esxi 是专为运行虚拟机、最大限度降低配置要求和简化部署而设计的物理机底层系统。只需几分钟时间,便可完成从安装到运行虚拟机,特别是在下载并安装预配置虚拟设备的时候。Esxi OS 已经实现了与 Virtual Appliance Marketplace 的直接整合。
这个虚拟化方案是目前业内物理机做虚拟化最常用的手段。
这里具体安装过程就不说了,给大家铺几张图,大家可以感受下。理论就是一个跑在物理层的 VM 虚拟化系统。
CentOS 介绍
这里就再赘述了,就是一个裸的 Centos 7.x , 没有任何区别。
物理机 – 安全部分
安全部分也是物理机遇到的非常严重的问题,虽然上文在网络层已经桥了一个代理层,但是涉及到远程管理必然也是需要对终端进行打通。为了解决安全问题,所以在 ssh 加了一层跳板机,同时对出网机器安全组做严格校验,仅开通必要的安全组权限。
为更好的防护物理机,同时对物理机密码进行强限制。同时关掉 DELL iDRAC 远程管理卡端口,并且对相关端口进行强限制。
云上集群 – 物理机 OSS 双向定时备份
这里采用 OSSFS 工具,优先将 OSS Bucket 挂载到系统层,然后定期执行 Cron 任务即可。
OSSFS 安装
https://help.aliyun.com/document_detail/153892.html
下载安装包
以下载CentOS 7.0 (x64)版本为例:
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
以CentOS 7.0(x64)版本为例,安装命令如下:
sudo yum install ossfs_1.80.6_centos7.0_x86_64.rpm
配置账号访问信息。
将Bucket名称以及具有该 Bucket 访问权限的 AccessKey ID和AccessKey Secret 信息存放在 /etc/passwd-ossfs 文件中。文件的权限建议设置为640。
echo BucketName:yourAccessKeyId:yourAccessKeySecret > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
将Bucket挂载到指定目录。
ossfs BucketName mountfolder -o url=Endpoint
将杭州地域名称为 bucket-test 的B ucket 挂载到/tmp/ossfs目录下。
echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > /etc/passwd-ossfs
chmod 640 /etc/passwd-ossfs
mkdir /tmp/ossfs
ossfs bucket-test /tmp/ossfs -o url=http://oss-cn-hangzhou.aliyuncs.com
如果不希望继续挂载此Bucket,可以将其卸载。
fusermount -u /tmp/ossfs
应用层 – 化繁为简
应用这里有三层
第一层是最简单的 nginx + PHP 基础运行层
第二层是存储层,包括数据存储和文件存储
第三层是采集层,负责数据,媒体采集
所以这里业务可以根据之前的底层设计,将第一第三层放到 计算集群,将第二层放到存储集群。
整体架构如下所示
采集层为了设计更好抽象和复用,所以这里采用定时接口调用的方式触发采集器执行。同时使用了 EventBridge 和 FC 两个资源。
总结
第一次做这么复杂的混合架构部署方案,还是很多地方略有不足。比如资源监控和告警,故障排查等都没有考虑再内。后续会逐渐补上。
希望对大家有一丢丢启发。
另外宣传下这个站点 https://7ren.net/ 大家多多捧场呀~