用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)