机器之心编译

机器之心编辑部

撸代码、写博客、动手做点好玩的东西是一个码农常见的进阶方式。很多大牛都有写博客的习惯,动手能力更是不在话下。今天介绍的这位机器学习爱好者 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 5001
TCP 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 5001
TCP 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/

© THE END

转载请联系 机器之心 公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

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

  1. 云原生(二十七) | Kubernetes篇之自建高可用k8s集群前置概念与操作

    文章目录 自建高可用k8s集群前置概念与操作 一.内核升级 二.k8s集群架构

  2. 玩着k3s树莓派集群指南

    Kubernetes 作为当前云计算基础设施的 De Facto 标杆,已经炙手可热.因为其是谷歌家开放的源码库,一直成为全球技术社区的模仿参照物.在它的技术光芒之下,大量的技术人员跳入此坑无法自拔. ...

  3. mysql集群重启报错lock_CentOS7.2 下 MySQL 之 PXC 集群部署【Docker+单机多节点】

    背景 [注意]: 鄙人认为本篇适合做入门测试/学习之用,选择的 "单机多节点配置",后面再整理 "多机配置"文章. 近期正突击学习数据库知识 想着对 PXC 集 ...

  4. docker redis 删除集群_基于Docker的Redis集群实践

    单机版的Redis相信大家都比较熟悉了,这里介绍几种Redis的集群模式,并结合Docker来进行实践操作 abstract.png 准备工作 通过Docker下载最新的Redis镜像 # 获取red ...

  5. Sealer - 把 Kubernetes 看成操作系统集群维度的 Docker

    作者 | 中弈 写在开头 身为一名技术人员,总是喜欢把自己的作品打造成理想状态呈现给别人,我非常荣幸能把集群镜像这样一个卓越的想法变成现实, 也非常开心用户使用我们的作品时对我们的高度认可. Seal ...

  6. K8s集群 实现集群业务是否对外暴露的控制 (多LB实施方案)

    K8s集群 实现集群业务是否对外暴露的控制 (多LB实施方案) 架构图: 简述实施步骤: 1.新建集群会自动创建一个公网的LB,需要新创建一个内网LB绑定在此nginx controller 上,实现 ...

  7. 树莓派 mysql集群_多树莓派集群服务器

    树莓派使用实例之:2 Pi R 第二篇:Web服务器 在我的上一篇文章中讲过如何做一个高可用系统:两个树莓派布署上 GlusterFS 集群文件系统,就变成一个容错文件服务器了.在这篇文章中我们会基于 ...

  8. docker集群_使用Docker,Chef和Amazon OpsWorks进行集群范围的Java / Scala应用程序部署...

    docker集群 Docker非常适合在单个节点上运行隔离的容器. 但是,大多数软件系统都在多个节点上运行,因此,除了Docker之外,我们还需要某种方法来指定哪些容器应在哪些节点上运行. 我要解决的 ...

  9. rocketmq docker集群_【解构云原生】RocketMQ高可用方案调研及On K8S设计展望(下)...

    本文由作者授权网易云发布,未经许可,请勿转载. 作者:李海燕,网易杭州研究院云计算技术部工程师 上文链接:[解构云原生]RocketMQ高可用方案调研及On K8S设计展望(上) 四.RocketMQ ...

最新文章

  1. Appium的Java封装
  2. python用户名和密码登录函数_基于Python构建用户ID和密码存储查询系统,python,建立,一个,用户名,UserID,Password,的...
  3. 理解熵:机器学习的黄金标准
  4. 程序员的写作课:三、 海量信息输入指南
  5. SAP UI configuration determination的优先级
  6. ST_LINK/V2 SWIM和SWD、JTAG下载口说明
  7. Proactor设计模式:单线程高并发
  8. 指纹识别开源竞赛启动,5000张指纹图像匹配
  9. 寒假汇编语言作业(11)
  10. 有关Wiki的三个应用
  11. JAVA偶数分解质数_优化后的寻找偶数是两个质数之和的JAVA代码
  12. 电脑端输入法的一些设置
  13. 最齐全的宋体字体素材,速来收藏
  14. Zynq-Linux移植学习笔记之57-国产ZYNQ PL挂载兆易创新GD25S512 flash
  15. juns java,Java中的基本數據類型
  16. 测试自己移动速度的软件,Superspeed一键测速脚本 测试服务器到国内电信/联通/移动速度...
  17. 自己做量化交易软件(1)通通量化分析环境安装使用
  18. IE innerHTMLi(转载)
  19. 腾讯云-视频直播(android集成)
  20. 罗永浩2011年保利剧院演讲(一个理想主义者的创业故事II)

热门文章

  1. 解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
  2. 百度副总裁马杰:实现元宇宙,技术要过三道坎
  3. 从飞天到倚天 阿里云底层自研技术大爆发
  4. 用数据分析《你好,李焕英》“斐妈”爆红的真相
  5. 2021年浅谈多任务学习
  6. 石锤!谷歌排名第一的编程语言,死磕这点,程序员都收益
  7. 老码农:这是我见过最操蛋的代码,切勿模仿!
  8. 谷歌开源张量网络库TensorNetwork,GPU处理提升100倍!
  9. 一个App卖了4亿美元,这家听声识曲公司为何得到Apple的青睐?
  10. 透过腾讯张潼离职事件,看AI研究院如何才算成功?