用Docker尝试Elasticsearch的自动平衡功能

这是一个Linux新手的Docker入门第二篇。
也许Docker变得有趣了一点。

Elasticsearch 是一款与 Apache Solr 并列(甚至比 Solr 更受欢迎?)的全文搜索系统,它可以将数据分布在多个服务器上,实现并行处理和故障恢复。

所以,自动重新平衡是指在添加服务器(据说是节点)时,该服务器的角色会自动确定,并从其他服务器那里获取数据进行分配,以保证整体数据平衡。

我觉得若使用Docker,由于服务器的启动简便,非常适合尝试Auto-Rebalancing,所以我尝试了一下。

总体来说,

    elasticsearch と elasticsearch-head を docker でサクッと試す – ようへいの日々精進 XP

我正在参考【X】。

在Ubuntu的Docker容器中安装Elasticsearch。

我昨天在使用的 Ubuntu 容器中安装 Elasticsearch。

请按照以下步骤进行 Elasticsearch 的安装:

    Install ElasticSearch on Ubuntu 12.04

我参考了这个(好像还有已经安装了Elasticsearch的容器或Dockerfile)。

接下来,我们将安装一个提供Elasticsearch管理图形界面的插件elasticsearch-head。

关于elasticsearch-head,这是一个非常有参考价值的资源。

    elasticsearchのGUI「elasticsearch-head」がとても便利 – yuhei.kagaya

安装只需一条命令。(不加 “./” 无法正常运行)

[ root@bb638d1f825f:/ ]$ cd elasticsearch/bin
[ root@bb638d1f825f:/ ]$ ./plugin -install mobz/elasticsearch-head

Elasticsearch 集群的配置

当使用多个Elasticsearch时,需要给它们统一的组名。

编辑elasticsearch.yml文件并添加分组名称。

[ root@bb638d1f825f:/ ]$ vim elasticsearch/config/elasticsearch.yml

json elasticsearch.yml
cluster.name: 阿美集群

在Elasticsearch的分布式环境中的使用方面。

    Cluster機能を使う – AWSで始めるElasticSearch(2) | Developers.IO

我参考了该句话。
在「EC2中无法使用组播」等陈述中,由于这是Docker,所以忽略了这一点。结果只对elasticsearch.yml进行了上述修正。

创建一个已经配置好的Elasticsearch映像

暂时停止容器,并通过docker commit命令保存。可以使用docker images命令确认已创建镜像。

docker@boot2docker:~$ docker commit -m "Setting Elasticsearch cluster" bb638d1f825f amay077/es_cluster

docker@boot2docker:~$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
amay077/es_cluster         latest              b9d05b77d71a        9 hours ago         1.075 GB
ubuntu                     latest              ba5877dc9bec        2 weeks ago         192.7 MB

在 Docker 中启动多个容器,并在每个容器中启动 Elasticsearch。

使用下面的命令启动容器并启动Elasticsearch。
(我认为您可以直接启动elasticsearch而不是/bin/bash,但是我后来想直接连接到控制台上。)

docker@boot2docker:~$ docker run -i -t -p 9200:9200 -p 9300:9300 amay077/es_cluster /bin/bash

[ root@bb638d1f825f:/ ]$ /elasticsearch/bin/elasticsearch -d
#Control+p, Control+q でデタッチ

当您启动它时,通过 Mac 主机上的浏览器访问 http://localhost:9200/_plugin/head/。
哦,在此之前,您需要在 VirtualBox 的设置中进行 9200 和 9300 端口转发。

如果设置成功,访问先前的地址应该会显示elasticsearch-head的管理界面。

接下来,多次执行之前的命令,启动多个 Elasticsearch 实例。
由于 -p 9200:9200 部分重复会导致错误,所以我将其修改为 -p 9201:9200 等,但我无法确认这样修改是否正确。

将数据导入Elasticsearch。

将数据输入到Elasticsearch可以通过主机PC(Mac)上的终端实现。

curl -XPOST 'http://localhost:9200/mytest/memo/' -d '{ "name" : "kappa", "date" : "2013-09-07", "message" : "test1" }'
curl -XPOST 'http://localhost:9200/mytest/memo/' -d '{ "name" : "kappa", "date" : "2013-09-07", "message" : "test2" }'
curl -XPOST 'http://localhost:9200/mytest/memo/' -d '{ "name" : "kappa", "date" : "2013-09-07", "message" : "test3" }'
…続く

以类似的方式投放了大约3万个。

投入后,当查看 http://localhost:9200/_plugin/head/ 时,

这说明数据已分散注册在四台服务器中。方框内的数字(0〜4)表示数据被分割成了五块,并显示了这些块被配置在哪个服务器上,粗边框表示主服务器,细边框表示从服务器。这表明无论哪台服务器发生故障,服务都能继续进行而不会丢失数据。

我试着添加一个节点

我尝试添加第五台 Elasticsearch。

docker@boot2docker:~$ docker run -i -t -p 9204:9200 -p 9304:9300 amay077/es_cluster /bin/bash

[ root@de6d825fa34d:/ ]$ /elasticsearch/bin/elasticsearch -d
#Control+p, Control+q でデタッチ

看了elasticsearch-head之后,

在旁边,稍等片刻后点击刷新,

这是这样的。

追加的“Isaiah Bradley”服务器被赋予了数据块1和3的从属角色,并且可以看到数据已经被转移(虽然在转移过程中颜色发生了变化,但无法截图)

借助 Docker,我们可以轻松尝试 Elasticsearch 的自动平衡功能。(在实际运营中,可能不会使用 Docker 来部署 Elasticsearch)

广告
将在 10 秒后关闭
bannerAds