Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >带有Vagrant和Virtualbox的Elasticsearch集群

带有Vagrant和Virtualbox的Elasticsearch集群

作者头像
February
修改于 2018-11-26 07:17:32
修改于 2018-11-26 07:17:32
1.6K00
代码可运行
举报
文章被收录于专栏:技术翻译技术翻译
运行总次数:0
代码可运行

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

1.背景

面对不断增长的前端需求,后端容量扩展通常通过用功能更强大的CPU / RAM /dish wise即所谓的“垂直缩放”来替换较弱的服务器来解决。这与“横向缩放”相反,其中只需将更多服务器添加到混合中以处理额外需求。直觉上,后一种模式很有吸引力,因为它看起来不那么重要!在传统的以RDBMS为中心的应用程序中,没有选择,垂直扩展实际上是有意义的,因为很难在大型分布式数据表中进行连接。但垂直缩放有其局限性,更重要的是,在达到这些限制之前,它们变得非常昂贵。为了实现更简单的水平伸缩而跳过关系(RDBMS的“R”)的NoSQL数据库如今已成为需要像facebook/google一样进行大规模伸缩的应用程序的常用数据存储

读者可以参考Hadoop:权威指南,其中Tom White深入研究了这些规模问题。在分布式存储和CPU上运行的应用程序必须处理自己的问题,例如让CPU忙于“本地”数据,确保集群成员彼此了解并知道谁拥有哪些数据,并且可能根据需要选择leader/master进行协调,写作等,因为实施细节因系统而异。我们不打算深入研究这一切,但我们对这篇文章的目标更加务实:

  1. 开发一种方法来运行几个节点(“客户”)的虚拟集群,其中现在的客户是由Virtualbox从我的笔记本电脑中雕刻出来的。
  2. 通过机制在guest虚拟机群集上安装分布式数据存储Elasticsearch。
  3. 确认此“虚拟Elasticsearch设备”从主机提供完全可控的服务。

2. VirtualBox

我们使用Oracle的Virtualbox作为来宾虚拟主机的提供商。Virtualbox可以免费使用,在我的Linux笔记本电脑上运行得非常好(我的笔记本电脑上是Ubuntu 15.04 64位,8核i7,2.2GHz CPU,16GB RAM),并且有关于如何控制要创建的主机的各个方面的大量文档。还有预先构建的图像以及任何数量的开源Linux发行版,您可以简单地为客户操作系统添加这些图像。它提供了各种网络选项(有时我发现令人生畏),以扩展/限制guest的可访问性/功能。出于我们的目的,我们更喜欢具有以下标准的“仅限主机”,“私人”网络。

  • guest和host应该能够互相交谈。我们希望客户组成一个集群并一起工作以启用服务。主机应该能够控制和使用客户群提供的服务。
  • guest应该可以访问互联网。这样他们就可以下载任何操作系统更新,以及运行任何应用程序所需的软件包。
  • guest无法从外面进入guest。这只是一个弥补的要求,因为我不想将服务暴露给外部。主机是服务的使用者,它可以将其转换为它自己的服务,如果它愿意,它可以提供给外部。
  • 最后,为了便于使用和移植,每个访客在创建时应具有IP地址和名称“已分配”。

安装Virtualbox并创建各种VM非常简单。根据我下载的预建图像,我可以按照我想要的方式设置一个VM。使用适用于adapter1的NAT,仅适用于适配器2的NAT,以及激活VM上的仅主机接口。我想克隆它并建立其他客户,但我有可能以可靠/可重复的方式正确地建立网络。网络从来都不是我的强项,在通过GUI和命令行玩网络选项后,我放弃了尝试掌握它。我相信网络专家可以做到这一点,所以它肯定不是Virtualbox的限制,而是我的限制。

但更合理的是,我不想通过VirtualBox提供的GUI登录guest虚拟机来设置内容或更糟糕 - 更改每个guest虚拟机的设置。这肯定不会扩展,重现的痛苦,并且容易出错。我想要一种各种各样的交钥匙解决方案,其中我可以预先编写VM群集创建的所有方面,并且只需运行它就可以在安装,启动和饲养所有工具的情况下创建该群集。

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

3. Vagrant

花了很多话来试图到达这里,我们没有进一步的追求。我们准备一个名为'Vagrantfile'的文本文件,其中包含我们要构建的集群的高级详细信息。在命令提示符下运行将生成一个可以根据自己的喜好进行编辑的示例文件。以下是我们的文件如何满足第2节中规定的要求。

Vagrantfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-  *  -  mode:ruby  -  *  - 

它是一个Ruby脚本,但是我不需要知道很多Ruby。这是它的作用的快速概述。

  • 我们想要建立一个2节点集群(第3行)。
  • 我们选择每个上的操作系统映像。如果之前尚未将图像下载到本地仓库('VirtualBox的默认机器文件夹')(第4行),Vagrant会下载它。
  • 我的笔记本电脑有16GB RAM,我想在任何时候都为主机留下8gb。其余部分由guest平分。同样,客户仅限于部分使用CPU。(第5,6行)
  • 我们遍历每个guest:
    • 设置图像(#13)和名称(#14)。
    • 我们选择' private_network '模式并设置IP地址(#15)。这为我们提供了第2节中我们想要的网络模型。
    • #19行,即将供应的工具和应用程序的虚拟机。非常强大和方便。我们可以使用我们希望客户负责的应用程序自动化启动集群中每个成员的过程。无需为每位guest提供服务并进行单独安装 - 节省大量时间!除了简单的shell脚本外,Vagrant还允许其他机制,如Docker,Chef,Ansible,Puppet等,用于配置过程。在这里,我们使用shell脚本'bootstrap.sh'来传递我们需要的参数,以设置Elasticsearch。

对于Vagrant来说,这一切都是真的。其余的都是很好的旧shell脚本,我们老手 - 很棒!一旦脚本准备就绪,我们就会运行以启动集群,完成我们的工作并运行以关闭群集。在我们运行之前,集群将保留其apps / config / data,以便我们可以随时运行以使用集群及其服务。

4.供应Elasticsearch

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env bash
nguests=$1
guestNumber=$2
memory=$3
ipAddressStart=$4
# Install some utilities that we will need
apt-get -y install unzip
apt-get -y install curl
# Install java
mkdir -p /opt/software/java
cd /opt/software/java ; tar zxvf /vagrant/tools/jdk-8u65-linux-x64.tar.gz
# Install & Start up elasticsearch
/vagrant/scripts/elastic.sh $nguests $guestNumber $memory $ipAddressStart

我们在第9行和第10行安装了一些我们需要的实用工具。从第13行和第14行的共享位置安装java。最后,我们运行下面的脚本在第17行安装Elasticsearch。

elastic.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env bash
usage="Usage: elastic.sh nguests thisguest memory ipAddressStart. Need the number of guests in the cluster, this guest number, es-heap memory in MB like 2048m, and startingIp like 192.168.0.5 if clustered ... "
# Install Elastic,  Configure & Start
function setUnicastHosts() {
  local unicast_guests="discovery.zen.ping.unicast.hosts: ["
  for i in $(seq 1 $nguests); do
    unicast_guests+='"guest-es'$i
    unicast_guests+=':9310"'
    if [ "$i" -ne "$nguests" ]; then
      unicast_guests+=','
    fi
  done
  unicast_guests+=']'
  echo "$unicast_guests"
}
# Add to /etc/hosts for convenience & restart networking...
function setEtcHosts() {
  guest_list=""
  for i in $(seq 1 $nguests); do
          guest_list+=$ipAddressStart$i' guest-es'$i
\n'
  done
  echo "$guest_list" > guests_to_be_added
  cat /etc/hosts guests_to_be_added > tmp ; mv tmp /etc/hosts
  /etc/init.d/networking restart
}
if [ "$#" -eq 4 ]; then
  nguests=$1
  thisguest=$2
  memory=$(expr $3 / 2)
  memory+="m"
  ES_HEAP_SIZE=$memory
  ipAddressStart=$4
  ES_HOME=/opt/software/elasticsearch/elasticsearch-1.7.2
  mkdir -p /opt/software/elasticsearch
  cd /opt/software/elasticsearch ; unzip /vagrant/tools/elasticsearch-1.7.2.zip
  cp /vagrant/elastic/start-node.sh $ES_HOME
  cp /vagrant/elastic/stop-node.sh $ES_HOME
  cp /vagrant/elastic/elasticsearch.yml $ES_HOME/config
  guest_name="guest-es"$thisguest
  node_name=$guest_name"-node1"
  unicast_guests=$(setUnicastHosts)
  if [ "$thisguest" -eq 1 ]; then
    mkdir -p $ES_HOME/plugins/kopf
    cd $ES_HOME/plugins/kopf ; tar zxvf /vagrant/elastic/kopf.tar.gz
  fi
  perl -0777 -pi -e "s|ES_HOME=/opt/elasticsearch|ES_HOME=$ES_HOME|" $ES_HOME/start-node.sh
  perl -0777 -pi -e "s/ES_HEAP_SIZE=2g/ES_HEAP_SIZE=$memory/" $ES_HOME/start-node.sh
  perl -0777 -pi -e "s/host_name=localhost/host_name=$guest_name/" $ES_HOME/start-node.sh
  perl -0777 -pi -e "s/host_name=localhost/host_name=$guest_name/" $ES_HOME/stop-node.sh
  perl -0777 -pi -e "s/node_name=node0/node_name=$node_name/" $ES_HOME/start-node.sh
  perl -0777 -pi -e "s/$/\n$unicast_guests/" $ES_HOME/config/elasticsearch.yml
else
  echo $usage
  exit 1
fi
setEtcHosts
$ES_HOME/start-node.sh

Elasticsearch节点是Elasticsearch的运行实例,服务器可以运行多个实例 - 当然资源允许。属于群集的所有节点都具有相同的“cluster.name”。从主机和guest虚拟机之间共享的一些样板配置文件开始,上面的脚本根据在配置期间传递给每个guest虚拟机的参数来修改它们。所有访客节点的文件'config / Elasticsearch.yml'将使用该群集的所有成员列表进行扩充。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
discovery.zen.ping.unicast.hosts :[ “guest-es1:9310” ,“guest-es2:9310]

setEtcHosts 功能附加

  • 192.168.1.51 guest-es1
  • 192.168.1.52 guest-es2

到每个guest虚拟机上的'/ etc / hosts'文件并重新启动网络。下面为'guest2'准备的start-node.sh脚本运行以下命令来启动Elasticsearch节点'guest-es2-node1'。

start-node.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/opt/software/elasticsearch/elasticsearch-1.7.2/bin/elasticsearch -d 
-Des.cluster.name=es-dev 
-Des.node.name=guest-es2-node1 
-Des.http.port=9210 
-Des.transport.tcp.port=9310 
-Des.path.data=/opt/software/elasticsearch/elasticsearch-1.7.2/data 
-Des.path.logs=/opt/software/elasticsearch/elasticsearch-1.7.2/logs 
-Des.path.plugins=/opt/software/elasticsearch/elasticsearch-1.7.2/plugins 
-Des.path.conf=/opt/software/elasticsearch/elasticsearch-1.7.2/config 
-Des.path.work=/opt/software/elasticsearch/elasticsearch-1.7.2/tmp 
-Des.network.host=guest-es2 -Des.network.publish_host=guest-es2 
-p /opt/software/elasticsearch/elasticsearch-1.7.2/pid

其中'es-dev'是我们正在构建的集群的名称。'guest1'启动'guest-es1-node1'的命令与上面的命令相同,只是用'es1'替换'es2'。

我们只需运行vagrant up即可启动虚拟弹性群集 。因为我们在配置期间在'guest1'上安装了'kopf'插件,所以我们可以验证群集已启动,可从主机访问并准备投入使用。

我们通过运行vagrant halt关闭群集。每当我们准备好从主机再次使用它时,我们只需运行vagrant up并且群集将被备份。成功!我们已经建立了一种机制,可以根据虚拟集群的需要将Elasticsearch作为一项服务。

这就是这篇文章的全部内容。在以后的帖子中,我们将考虑扩展这个以在AWS上创建设备,以便我们可以做真正的工作。

原文标题《Elasticsearch Cluster with Vagrant and Virtualbox》

作者:Ashok Chilakapati

译者:February

不代表云加社区观点,更多详情请查看原文链接

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
k8s 系列教程-Vagrant
vagrant是开源的虚拟机技术,相对于 vmware 而言更轻量级,操作更简便移植性更强,如果我们需要学习k8s或者搭建一些集群的话建议使用 Virtualbox+Vagrant。Vagrant 是创建虚拟机的工具,Virtualbox 是vagrant 管理工具,而且这两个软件是开源的,不需要我去付费或者破解。掌握 Vagrant技术对我们后续学习k8s会有很大的帮助
六个核弹
2022/12/23
8170
Vagrant 基本使用操作
Vagrant 是一款支持自动化虚拟机暗转、可配置流程的用于管理虚拟机的软件. 主要的优势在于可以提供一个可配置、可移植和复用的虚拟机环境 (通过定义 Vagrantfile , 类似 Dockerfile ), 并且可以使用 shell、chef、puppet 等工具进行部署. 这里要注意, Vagrant 并不能单独使用, 必须要在自己的电脑里安装额外的虚拟机软件, 比如常见的虚拟机软件有: VirtualBox、VMWare 等.
全栈程序员站长
2022/11/17
7870
Vagrant 基本使用操作
使用Ansible和Vagrant设置Kubernetes
此博客文章介绍了为开发而设的多节点Kubernetes集群所需的步骤。此设置提供了类似生产环境的群集,可以在本地计算机上进行。
CNCF
2019/12/05
1.1K0
ElasticSearch集群搭建图文解析
ElasticSearch作为一个分布式搜索引擎有着广泛的应用场景, 而搜索服务在在一个项目中的权重还是比较高的, 所以我们要想办法去提高搜索服务的可用性, 这就是ElasticSearch集群的作用, 为搜索服务提供高可用的特性
全栈程序员站长
2022/11/08
5950
ElasticSearch集群搭建图文解析
ELK-elasticsearch-6.3.2部署
参考博客:linux下ElasticSearch.6.2.2集群安装与head、Kibana、X-Pack..插件的配置安装
踏歌行
2020/10/15
5290
ELK-elasticsearch-6.3.2部署
『中级篇』Vagrant在本地搭建多节点K8S集群(65)
https://github.com/limingios/docker/tree/master/No.9
IT架构圈
2018/09/11
1.8K1
使用vagrant搭建验证环境
这周的工作需要在一个独立的kubernetes环境调试功能,自然而然地想到在本机装个虚拟机搭建这个环境。不过有同事推荐我试一下vagrant,久闻Vagrant大名,之前也经常在一些开源项目中看到它,今天花了些时间了解下这个新东西。
jeremyxu
2019/05/06
9120
保姆级教程:Vagrant 从入门到超神玩法
首先下载安装 Vagrant 和 VirtualBox ,不用知道是啥玩意,安装完软件之后,打开 cmd 或者 终端 执行以下命令即可安装操作系统,就这么简单!
Lucifer三思而后行
2022/01/08
9.5K0
保姆级教程:Vagrant 从入门到超神玩法
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理
UP之前都是在自己的阿里云服务器和腾讯云服务器上测试的ES,之前的关于ES以及Kibana的操作都是可以正常的执行的,但是这次在配置ES集群的时候问题却是一直有问题.虽然两者的ES都能够正常启动,但是双方节点都显示找不到对方节点,一直处于ping对方节点的状态.并且由于双方节点都处于这种状态,导致两台服务器的Kibana都无法正常连接到相应的ES,导致后续的操作都无法正常执行.
萌萌哒的瓤瓤
2021/01/13
2K0
ElasticSearch学习笔记(四)-ES集群基本概念及搭建过程及主要工作原理
开始 Vagrant 之旅
如果你和我一样,你可能在某一个地方有一个“沙盒”,你可以在那里进行你正在做的任何项目。随着时间的推移,沙盒会变得杂乱无章,充斥着各种想法、工具链元素、你不使用的代码模块,以及其他你不需要的东西。当你完成某件事情时,这会使你的部署变得复杂,因为你可能不确定项目的实际依赖关系 —— 随着时间推移你在沙盒中已经有了一些工具,但是你忘了必须安装它。你需要一个干净的环境,将所有的依赖关系放在一个地方,以便以后更方便。
用户8639654
2021/10/14
5740
ElasticSearch&HanLP --- 集群部署及常见坑
3台服务器: 192.168.58.201 192.168.58.203 192.168.58.205,部署地址为/opt/soft/,ES版本为5.4.3
十毛
2019/03/27
9190
手把手带你搭建 Elasticsearch 集群
通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
杰哥的IT之旅
2020/06/18
9240
手把手带你搭建 Elasticsearch 集群
ELK弹性堆栈的心脏--Elasticsearch
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/54223990
shaonbean
2019/05/26
5730
Vagrant入门
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。
用户2131907
2019/02/27
9240
Vagrant搭建集群环境
平时大家可能需要在多机集群中做一些部署测试,下面介绍如何通过vagrant配置一个测试用的集群环境 1. 安装vagrant和virtualbox 自行解决 2. 安装box文件 根据需要下载centos或者ubuntu的vbox镜像,并添加到系统中,例如: vagrant box add alpha xxx.box vagrant box add centos centos.box vagrant box add xxx.box 3. 创建目录并初始化vagrant vagrant init <!-- m
高木工
2019/05/06
1.1K0
Elasticsearch 6.x集群搭建
1、关闭防火墙和SELINUX systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config 2、JDK安装 rpm -qa|grep java|xargs rpm -e --nodeps tar -zxvf jdk*.tar.gz -C /opt vi /etc/profile.d/cus
程裕强
2019/05/27
6510
基于vagrant+vxlan实现开发测试环境虚拟化
在大型的系统开发时,通常需要准备多套环境用于开发和测试的目的,如:开发环境,UAT测试环境,集成测试环境和模拟环境等。这样通常会需要大量的机器节点,尤其是进行大数据类的系统开发的时候,通常一个大数据集群都要几台到几十台机器,这个时候的机器数量的需求将更是惊人。如果这些节点机器都通过物理机的方式实现,那成本就更是让人无法接受了。面对这种情况,选用虚拟化环境的方案,是一个非常好的选择。因为测试和开发环境通常对节点机器的配置要求不高,运行时甚至可以不必同时运行,可以根据工作安排灵活调度。但是确对环境之间的隔离性,以及与生产环境的一致性上要求很高。这种时候通过虚拟化资源池的方式将能应对这种困局。
用户7493655
2020/06/23
1.3K0
基于vagrant+vxlan实现开发测试环境虚拟化
实战篇:一行命令安装Linux系统,超详细的 Vagrant 上手指南
注意:如果是macOS可以通过homebrew直接安装,Windows可以通过下载安装包进行安装。
Lucifer三思而后行
2021/08/17
9670
实战篇:一行命令安装Linux系统,超详细的 Vagrant 上手指南
使用Vagrant将您的笔记本电脑刻录到虚拟机
本文介绍了如何使用 Vagrant 在本地开发环境中模拟多客户机环境,以便在开发过程中轻松测试应用程序在客户机环境中的表现。通过使用 Vagrant,可以在一个控制台中模拟多个客户机环境,方便开发人员测试和调试应用程序。同时,Vagrant 还可以与 Ansible 等配置管理工具集成,实现自动化客户机环境部署和配置。
Steve Wang
2018/01/05
1.3K0
Vagrant入门
简单地说,Vagrant让我们可以通过代码的方式快速地、可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox、AWS、Docker等。它使得我们可以一次性地、自动创建多个环境相同的虚拟机,对于软件开发和测试尤其有用。本文我们将以Virtualbox为例,看看Vagrant的基本使用。
全栈程序员站长
2021/11/10
4750
相关推荐
k8s 系列教程-Vagrant
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验