带有 Vagrant 和 Virtualbox 的 Elasticsearch 集群

模拟分布式存储和计算环境的一种简单方法是使用 Virtualbox 作为 VM(“虚拟机”)的提供者,使用 Vagrant 作为前端脚本引擎来配置、启动和停止这些 VM。这篇文章的目标是构建一个集群虚拟设备,提供 Elasticsearch 作为可由主机使用/控制的服务。本文中使用的工件可以从 Github下载。

一、背景
面对不断增长的前端需求,后端容量扩展通常通过用更强大的服务器替换较弱的服务器(CPU/RAM/磁盘方面)来解决,即所谓的“垂直扩展”。这与“水平扩展”相反,“水平扩展”只是简单地添加更多服务器来处理额外的需求。直观上,后一种模型很有吸引力,因为它听起来工作量更少!在传统的以 RDBMS 为中心的应用程序中,别无选择,垂直扩展实际上是有意义的,因为很难跨大型分布式数据表进行连接。但垂直扩展有其局限性,更重要的是,在达到这些限制之前,垂直扩展就变得非常昂贵。NoSQL 数据库忽略关系(RDBMS 的“R”)以允许更简单的水平扩展,现已成为当今需要大规模扩展(如 facebook/google 等)的应用程序的首选数据存储。

读者可以参考《Hadoop:权威指南》,其中 Tom White 深入探讨了这些规模问题。在分布式存储和 CPU 上运行的应用程序必须处理自己的问题,例如让 CPU 忙于处理其“本地”数据,确保集群成员彼此了解并知道谁拥有哪部分数据,并可能根据协调、写入等需要选举领导者/主人,因为实施细节因系统而异。我们不会在这里深入探讨所有内容,但我们这篇文章的目标更加务实:

2023 年容器将会发生什么

DZone 的 2023 年容器趋势报告将探讨容器的当前状态、全球容器化战略的主要趋势和进展,以及用于实现软件架构现代化的建设性内容。


开发一种方法来运行由几个节点(“来宾”)组成的虚拟集群,其中来宾目前是由 Virtualbox 从我的笔记本电脑中划分出来的。稍后我们将扩展相同的方式在AWS提供的节点集群上运行服务
在此访客集群上安装分布式数据存储。现在是 Elasticsearch,所以我们可以了解一下机制
确认此“虚拟 Elasticsearch 设备”提供主机完全可控的服务。
2. 虚拟盒子
我们使用 Oracle 的Virtualbox作为来宾虚拟主机的提供者。Virtualbox 可以免费使用,在我的 Linux 笔记本电脑上运行得很好(我的笔记本电脑上运行 Ubuntu 15.04 64 位,具有 8 核 i7、2.2GHz CPU、16GB RAM),并且有关于如何控制要创建的主机的各个方面的大量文档。还有任意数量的开源 Linux 发行版的预构建映像,您可以将它们简单地放入来宾操作系统中。它提供了多种网络选项(我发现有时令人畏惧)来扩展/限制客人的可访问性/能力。出于我们的目的,我们更喜欢具有以下标准的“仅主机”、“专用”网络。

客人和主人应该能够互相交谈。我们希望客人形成一个集群并共同努力提供服务。主机应该能够控制和使用访客集群提供的服务。
客人应该能够访问互联网。这样他们就可以下载运行任何应用程序所需的任何操作系统更新和软件包。
客人无法从外部进入。这只是目前的一个弥补要求,因为我不想将服务暴露给外部。主机是服务的消费者,它可以将其整合到自己的服务中,如果愿意的话,可以向外部提供该服务。
最后,为了便于使用和可移植性,每个来宾在创建时都应“分配”一个 IP 地址和名称。
安装 Virtualbox 并创建各种虚拟机非常简单。根据我下载的预构建映像,我可以按照我想要的方式设置单个虚拟机。对适配器 1 使用 NAT,对适配器 2 使用仅主机接口,并在虚拟机上激活仅主机接口。我想克隆它并构建其他客户端,但我在以可靠/可重复的方式正确建立网络时遇到了麻烦。网络从来都不是我的强项,在通过 GUI 和命令行尝试了一些网络选项后,我放弃了尝试掌握它。我确信网络专家可以做到这一点,所以这当然不是 Virtualbox 的限制,而是我的限制。

但更合理的是,我不想登录来宾进行设置,或者更糟糕的是 - 通过 VirtualBox 提供的 GUI 更改每个来宾的设置。这绝对无法扩展,重现起来很痛苦,而且容易出错。我想要一种交钥匙解决方案,其中我可以预先编写虚拟机集群创建的所有方面的脚本,然后只需运行它即可创建该集群,并安装、启动和培养所有工具。

我很高兴地发现,Vagrant可以让人们轻松地做到这一点。基本上,他们已经弄清楚了“vboxmanage”命令(及其选项!)的确切顺序,以运行以设置由一些高级要求指定的集群......这就是我正在尝试做的事情,他们已经完成了!另外,由于使用 Vagrant 设置的集群是基于文件的,我们可以对其进行版本控制并共享它(与 OVA 文件相比较小),以便在其他地方准确地重现集群。也许由于我在网络设置方面遇到的问题,我有偏见,但读者会参考类似“为什么 Vagrant?” 的讨论。或者为什么我应该使用 Vagrant 而不是 VirtualBox?Vagrant 对我来说真正的吸引力在于它可以通过插件与其他 VM 提供商(例如 AWS、VMWARE)无缝协作,因此只需更改提供商名称即可重复使用相同的配置文件/脚本。从我的笔记本电脑中提取资源来构建虚拟机对于降低机制来说是很好的,但它不会提供高性能的集群!

3.流浪者
我们花了很多言语试图到达这里,所以我们毫不犹豫地直接投入其中。我们准备一个名为“Vagrantfile”的文本文件,其中包含我们要构建的集群的高级详细信息。在命令提示符下运行将生成一个示例文件,可以根据我们的喜好进行编辑。以下是我们的文件满足第 2 节中规定的要求的情况。

我们想要设置一个 2 节点集群(第 3 行)。
我们选择作为每个操作系统映像。如果该映像之前尚未下载到本地存储库(VirtualBox 的“默认计算机文件夹”),Vagrant 将下载它(第 4 行)
我的笔记本电脑有 16GB RAM,我想始终为主机保留 8GB。其余的则由客人平分。同样,来宾也只能使用部分 CPU。(5、6 号线)
我们循环遍历每个客人:
设置其图像(#13)和名称(#14)。
我们选择“ private_network ”模式并设置 IP 地址(#15)。这为我们提供了第 2 节中想要的网络模型。
第 19 行是关于为虚拟机配置工具和应用程序。非常强大且方便。我们可以自动化启动集群每个成员的过程,只使用我们希望该来宾负责的应用程序。无需通过 ssh 连接到每位访客并进行单独的安装 — 非常节省时间!除了简单的 shell 脚本之外,Vagrant 还允许使用其他机制(如 Docker、Chef、Ansible、Puppet 等)来进行配置过程。这里我们使用 shell 脚本“bootstrap.sh”,向其中传递我们需要的参数来设置 Elasticsearch。
这就是 Vagrant 的全部内容,真的。剩下的都是很好的老式 shell 脚本,我们都是老手了——太棒了!一旦脚本准备就绪,我们就运行以启动集群,完成我们的工作并运行以关闭集群。在我们运行之前,集群将保留其应用程序/配置/数据,以便我们可以随时运行以使用集群及其服务。

4. 配置Elasticsearch
这相当简单。要知道的关键一件事是 Vagrant 自动在主机和来宾之间启用一个共享目录。这是文件“Vagrantfile”所在的目录。在来宾上,此目录可作为“/vagrant”访问。因此,如果我们在主机上“Vagrantfile”所在的位置有文件“a/b/c/some_file”,则可以在客户机上以“/vagrant/a/b/c/some_file”的形式访问该“some_file”。我们使用此功能来共享需要在访客上安装的预下载软件包,以及我们想要在启动后运行的任何脚本。

你可能感兴趣的:(vagrant,elasticsearch,ruby)