deployment - 为自托管服务/博客构建低功耗 HA 集群

标签 deployment cluster-computing kubernetes high-availability docker-swarm

我想建立一个基于低功耗架构(arm)的 HA swarm/kubernetes 集群。
我的主要目标是了解 HA Web 集群的工作原理,它如何对故障使用react并从中恢复,以及扩展的难易程度。

一旦它工作(git/自定义服务/家庭自动化/CI服务器/...),我想在它以及其他服务上托管一个博客。

这是我的第一个问题:

  • 看硬件,哪个更合适? Rpi3 或 Odroid-C2 还是别的什么?我打算启动 4-6 个节点。低功耗对我来说很重要,因为它将在家里 24/7 全天候运行
  • 最好遵循的架构是什么?我想在容器中运行所有东西(为了可扩展性和冗余),并拥有冗余的负载均衡器、Web 服务器和数据库。像这样:architecture
  • 是否可以在所有集群上分布 Web 服务器/数据库,并在 2-3 个节点上进行负载平衡?还是物理上分开比较好?
  • 哪种技术更适合(swarm/kubernetes/ansible to deploy/flocker for storage)?我最近读了很多关于这个话题的文章,但是有很多选择。

  • 感谢您的回答!

    EDIT1:基础设施部署和管理

    我拥有几乎所有的 Material ,我现在正在寻找一种方法来轻松管理和部署 5 个(或更多)PI。我希望该过程尽可能具有可扩展性。

    有没有办法:
  • 第一次从网络检索图像(PXE 引导)
  • 为每个节点应用自定义设置:网络配置 (IP)、SSH 访问、...
  • 在服务器上自动部署/更新新软件
  • 轻松在集群上添加新节点

  • 我可以有一个专用的 PI 或我的 PC 作为部署服务器。

    感谢您的投入!

    最佳答案

    Raspberry Pi、ODroid、CHIP、BeagleBoard 都是合适的硬件。
    请注意,如果您不断地对其进行读/写,闪存卡的使用生命周期是有限的。

    Kubernetes 是学习集群容器的绝佳选择。
    Docker Swarm 也不错。
    这些解决方案都没有提供分布式存储,所以如果你谈论的是非分布式的 PHP 类型的 Web 服务器和 SQL 数据库,那么即使使用 Kubernetes 或 Swarm,你也不能真正冗余。
    为了有效地实现冗余,您需要为数据库设置主/从设置,或者更好的集群数据库,如 elasticsearch,或者可能是 MariaDB for SQL 的集群版本,因此您拥有数据库集群本身提供的冗余(这不是备份的替代品) ,但它比单个容器更好)

    对于真正的分布式存储,您需要查看 Ceph 或 GlusterFS 等技术。这些不适用于 Kubernetes 或 Swarm,因为它们需要绑定(bind)到硬件。 Github 上有一个 docker/kubernetes Ceph 项目,但我想说它仍然有点 hacky。
    最好单独或直接在主机上进行配置。

    就负载平衡而言,您可能希望有几个带有外部负载平衡器的节点以实现冗余,如果您构建一个 Kubernetes 集群,您并没有真正选择可以在同一节点上运行的其他内容,除非指定 CPU/RAM配额和限制,或亲和力。

    关于deployment - 为自托管服务/博客构建低功耗 HA 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074753/

    相关文章:

    java - 如何部署到Intellij IDEA Tomcat文件夹?

    hadoop - 如何配置和重新启动在 Azure 上运行的 HDInsight 群集?

    mysql - 对数据库的故障转移支持

    kubernetes - 需要对 Kubernetes pod 进行 ssh

    wordpress - 带有部分工作树的 Git 后接收 Hook

    visual-studio-2010 - 如何分发/部署 Visual Studio 插件

    ios - 无需提交到应用商店即可将 iPhone 应用部署到最终用户的最佳方式

    ssh - 警告 : Identity file not accessible: No such file or directory

    kubernetes - 在 helm kubernetes 中使用 secret 存储敏感数据

    python - 如何在运行时访问容器内部的环境变量?