如何在CentOS/RHEL, Ubuntu和Debian上安装ElasticSearch(多节点)集群
ElasticSearch是一个灵活而强大的开源分布式实时搜索和分析引擎。
使用一组简单的api,它提供了全文搜索功能。
Elasticsearch在Apache 2许可下免费提供,它提供了最大的灵活性。
本文将在CentOS、RHEL、Ubuntu和Debian系统上配置ElasticSearch多节点集群。
在ElasticSearch中,多节点集群就是在同一网络中配置多个具有相同簇名的单节点集群。
网络拓扑
我们有三个具有以下ip和主机名的服务器。
所有的服务器都运行在同一个局域网中,并且可以使用ip和主机名完全访问其他服务器。
192.168.10.101 NODE_1 192.168.10.102 NODE_2 192.168.10.103 NODE_3
验证Java(所有节点)
安装ElasticSearch 需要用到Java。
因此,请确保在所有节点上都安装了Java。
# java -version java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.31-b07, mixed mode)
下载ElasticSearch(在所有节点上操作)
现在在所有节点系统上,从官方下载页面下载最新的ElasticSearch存档。
使用以下命令下载ElasticSearch 1.4.2。
$ wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.tar.gz
提取ElasticSearch。
$ tar xzf elasticsearch-1.4.2.tar.gz
配置ElasticSearch
现在我们需要在所有节点系统上设置ElasticSearch。
ElasticSearch使用“ElasticSearch”作为默认集群名称。
我们建议根据命名对话对其进行更改。
$ mv elasticsearch-1.4.2 /usr/share/elasticsearch $ cd /usr/share/elasticsearch
要修改集群的名称,编辑 config/elasticsearch.yml文件,并更新以下值。
节点名是动态生成的,但为了方便,也要进行修改。
在NODE_1上
在NODE_1(192.168.10.101)系统上编辑elasticsearch集群配置。
$ vim config/elasticsearch.yml
cluster.name: theitroadCluster node.name: "NODE_1"
NODE_2
在NODE_2(192.168.10.102)系统上编辑elasticsearch集群配置。
$ vim config/elasticsearch.yml
cluster.name: theitroadCluster node.name: "NODE_2"
NODE_3
在NODE_3(192.168.10.103)系统上编辑elasticsearch集群配置。
$ vim config/elasticsearch.yml
cluster.name: theitroadCluster node.name: "NODE_3"
安装ElasticSearch-Head插件(在所有节点上操作)
elasticsearch-head是一个用于浏览和与Elasticsearch集群交互的web前端。
使用以下命令在所有节点系统上安装此插件。
$ bin/plugin --install mobz/elasticsearch-head
启动ElasticSearch集群(所有节点)
因为ElasticSearch集群的设置已经完成。
让我们在所有节点上使用以下命令启动ElasticSearch集群。
$ ./bin/elasticsearch &
默认情况下,elasticserch监听端口9200和9300。
因此,连接到NODE_1的 9200端口 ,我们将看到集群中的所有三个节点。
http://NODE_1:9200/_plugin/head/
验证多节点集群
来验证集群是否正常工作。
在一个节点中插入一些数据,如果相同的数据在其他节点中可用,则表示集群正常工作。
在NODE_1上插入数据
为了验证集群,在 NODE_1中创建一个 bucket 并添加一些数据。
$ curl -XPUT http://NODE_1:9200/mybucket $ curl -XPUT 'http://NODE_1:9200/mybucket/user/Hyman' -d '{ "name" : "Hyman Kumar" }'
$ curl -XPUT 'http://NODE_1:9200/mybucket/post/1' -d ' { "user": "Hyman", "postDate": "01-16-2015", "body": "Adding Data in ElasticSearch Cluster" , "title": "ElasticSearch Cluster Test" }'
在所有节点上搜索数据
现在从 NODE_2和 NODE_3中搜索相同的数据,检查是否将相同的数据复制到集群的其他节点。
根据上面的命令,我们创建了一个名为Hyman的用户,并在其中添加了一些数据。
因此,使用以下命令搜索与用户Hyman相关的数据。
$ curl 'http://NODE_1:9200/mybucket/post/_search?q=user:Hyman&pretty=true' $ curl 'http://NODE_2:9200/mybucket/post/_search?q=user:Hyman&pretty=true' $ curl 'http://NODE_3:9200/mybucket/post/_search?q=user:Hyman&pretty=true'
你会得到如下所有命令的结果。
{ "took" : 69, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 1, "max_score" : 1.0, "hits" : [ { "_index" : "mybucket", "_type" : "post", "_id" : "1", "_score" : 1.0, "_source": { "user": "Hyman", "postDate": "01-16-2015", "body": "Adding Data in ElasticSearch Cluster" , "title": "ElasticSearch Cluster Test" } } ] } }
在Web浏览器上查看集群数据
使用浏览器打开其中一个节点 http://NODE_1:9200/_plugin/head/
, 点击 浏览器标签
查看 ElasticSearch集群的数据。