社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

自建28核树莓派集群,顺便学学docker,这里有一个500美元的搭建方案

运维 • 4 年前 • 437 次点击  

本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载

机器之心整理

撸代码、写博客、动手做点好玩的东西是一个码农常见的进阶方式。很多大牛都有写博客的习惯,动手能力更是不在话下。今天介绍的这位机器学习爱好者 WILL HO 也喜欢写博客,他不仅自己注册了一个博客网站,还搭了一个 28 核的树莓派集群来实现自托管。在此过程中,他学到了 Linux、Docker、Docker Swarm、Kubernetes、DNS、TLS 和网络拓扑等很多方面的技能。


在最新的一篇博客中,WILL HO 介绍了自己搭建的 28 核树莓派集群。这个集群名叫 Kraken,用到了 7 个树莓派 3B。

前面已经说过,WILL HO 搭建树莓派集群是为了实现自托管,也就是托管自己用 Wordpress 搭建起来的博客网站。WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站,也可以把 WordPress 当作一个内容管理系统来使用。

在此之前,他也曾搭建过一个名为 Octopi 的树莓派集群(一个树莓派 1B + 和 4 个树莓派 1B),但很快他就发现,在这个集群上运行 Wordpress 有很大的性能瓶颈,打开一个新的 Wordpress 博客的单页加载大约需要 10 秒!


为了解决这一瓶颈,WILL HO 下决心对 Octopi 进行升级,于是就有了我们今天文章的主角——Kraken。在以下的篇幅中,WILL HO 介绍了自己搭建 Kraken 的过程。如果你也有建树莓派集群的需求或者想学学 Docker 等工具,可以参考作者的方式搭一个自己的集群。

Kraken 概况

Kraken 由 7 个树莓派 3B 组成,由一个 USB 充电器供电。WILL HO 本打算构建一个由 8 个节点组成的树莓派集群,但消费级的网络交换机上的最大端口数为 8 个,能容纳 7 个节点和一条到路由器的电缆。


另一种选择是使用具有 16 个端口的商业级网络交换机,但这显然是不可能的,看看价格,劝退。

用树莓派 3B 搭建的 Kraken 集群规格如下表:


所需的零件清单如下表:


值得注意的是,作者选择了 32GB MicroSD 卡作为第一个节点的存储,并希望它成为 Docker swarm 设置的主节点。作者预计,还需要额外的存储空间来构建和部署 Docker 映像。

Kraken (上) 和 Octopi (下) 

Kraken 千兆升级

作者发现自己经常在 Raspberry Pi 3B 的内置以太网端口上达到 100Mbps 的带宽限制。在大型文件的传输过程中,传输速度甚至徘徊在令人沮丧的 8MB / 秒。

受到 Jeff Geerling 的博客的启发,作者发现,使用 USB 千兆以太网适配器可以将带宽提高到 200Mbps 以上。于是,他买了一堆便宜的 USB 千兆以太网适配器和一个千兆交换机,开始升级。

便宜的 USB 千兆以太网适配器。

附加零件清单:


升级后,Kraken 看起来是这样的:

Gigabit Kraken, Octopi and my cable management nightmare

如果所有成本都算下来,打造这个 Kraken 集群总共花了 508.84 美元。

基准判别

在升级之前运行 iperf,可以看到最大带宽是 93.1 Mbps。

~ ❯ iperf -c 192.168.3.11------------------------------------------------------------Client connecting to 192.168.3.11, TCP port 5001TCP window size:  129 KByte (default)------------------------------------------------------------[  4] local 192.168.3.71 port 57041 connected with 192.168.3.11 port 5001[ ID] Interval       Transfer     Bandwidth[  4]  0.0-10.0 sec   111 MBytes  93.1 Mbits/sec

在安装千兆适配器之后运行 iperf,可以看到最大带宽为 224 Mbps!

~ ❯ iperf -c 192.168.3.11------------------------------------------------------------Client connecting to 192.168.3.11, TCP port 5001TCP window size:  145 KByte (default)------------------------------------------------------------[  4] local 192.168.3.71 port 57298 connected with 192.168.3.11 port 5001[ ID] Interval       Transfer     Bandwidth[  4]  0.0-10.0 sec   268 MBytes   224 Mbits/sec

有了这个简单的模块,每个节点就获得了 131Mbps 的带宽。然而,这些仍然只是理论上的速度,因为典型的使用场景包括将从网络接收到的数据写入磁盘,但是 iperf 只从网络接收数据,而不将数据写入磁盘。

一些注意事项

即使在 Web 服务中,也不大可能持续地充分利用此新带宽。它主要有助于在首次加载时更快地传输大型资源(如图像数据),之后,用户的浏览器会缓存图像。

此外,Raspberry Pi 1 至 3 型号中臭名昭著的共享 USB 2.0 总线也限制了实际带宽。

对于未初始化的用户,单个 USB2.0 总线的 480Mbps 理论单向宽带在以太网端口、SD 卡插槽和所有 USB 端口之间共享。

带宽分布如下所示:


尽管表格中的数字给人的印象是:这次升级没有带来性能上的提升。但它们代表的是最坏的情况。通常情况下,人们期望在 web 服务器上进行的主要是读操作,而很少进行写操作。

在现实世界中,带宽分配通常应如下所示:


以上是作者对第二个树莓派集群的升级操作,但是如果你已经熟悉 Docker 系统,或者正在寻找高性能的家庭设置,在此不建议使用此教程。

为何选择此集群?

如果你对 Docker 和 Kubernetes 感兴趣,作者强烈建议你上手搭个这样的集群。对此,他给出了两个理由:

首先,该集群与官方支持的最新版本 Docker 映像兼容。此外,Raspberry Pi 3B 在 armv7 CPU 架构上运行。最新的 Arm 处理器(arm64)向后兼容在 armv7 上编写和编译的所有代码。相反,arm64 处理器不向后兼容 armv6 处理器(Raspberry Pi 1 和 2),因此它们正在被社区淘汰。

其次,对于大多数对带宽要求较高的应用程序,该集群将是理想的选择,例如托管你自己的博客,文件同步服务,媒体库管理器,记笔记应用程序等。考虑到 Raspberry Pi 3 中的 USB 2.0 总线瓶颈,如果你的应用程序需要大量持续的写入(例如对视频进行编码),这个集群的性能可能无法达到要求。

总而言之,构建 Raspberry Pi 3 集群是学习 Docker 和集群的最经济有效的方式,并且在可预见的将来仍将如此。因此,如果你只是想接触 Docker,强烈建议你尝试一下。

原文链接:https://ikarus.sg/how-i-built-kraken/

●输入m获取文章目录

推荐↓↓↓

Linux学习

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74241
 
437 次点击