在阅读源码之前,我们先搭建一个三节点集群,以达到对Elasticsearch有一个宏观认识的目的。
一、环境介绍
三个服务器节点,分别为:
huawei@10.18.133.5
huawei@10.18.133.6
huawei@10.18.133.7
二、Elasticsearch集群搭建
2.1 源码下载
首先需要说明的是:因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户。以我的为例
分别建立的三个用户名都是huawei。
接下来,在官网上下载源码:
https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-1
下载后分别拷贝到三个服务器中,并解压,假设解压后的路径为:
/usr/local/elasticsearch-2.4.1
2.2 配置elasticsearch.yml文件
下面以huawei@10.18.133.5中/usr/local/elasticsearch-2.4.1的过程为例:
elasticsearch的config文件夹里面有两个配置文件:elasticsearch.yml和logging.yml,第一个是Elasticsearch的基本配置文件,第二个是日志配置文件,Elasticsearch也是使用log4j来记录日志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了(logging.yml用默认的也可以)。下面主要讲解下elasticsearch.yml文件的配置。
cd /usr/local/elasticsearch-2.4.1/config
vim elasticsearch.yml
对elasticsearch.yml文件进行修改,下面是配置文件中的一些内容,标红的是必须要配置的项,黑色的用默认配置完全可以。(每个配置项下面都有该配置项意义的说明)
cluster.name: GJL
配置es的集群名称,默认是elasticsearch,Elasticsearch会自动发现在同一网段下的Elasticsearch,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
node.name: node-5
(因为该节点ip地址为10.18.133.5,所以我设成node-5)
节点名,默认随机指定一个name列表中名字,该列表在Elasticsearch的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。
node.rack: r1
在同一个机架上的数据会集中在一起,避免过多的跨机架的数据迁移。
path.data: /path/to/data
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
path.data: /path/to/data1,/path/to/data2
path.logs: /path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹。
bootstrap.mlockall: false
mlockall 属性可以让ES节点不进行Swapping。(注意仅适用于Linux/Unix系统)。
mlockall 默认是false的,意味着ES节点被允许Swapping。注意,如果你在文件中设置该属性为true,一定确保通过-DXmx选项或ES_HEAP_SIZE给ES节点预留足够的内存。
network.host: 10.18.133.5
服务器的ip地址。
http.port: 9200
设置对外服务的http端口,默认为9200。
discovery.zen.ping.unicast.hosts: ["10.18.133.5", "10.18.133.6", "10.18.133.7"]
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。
discovery.zen.minimum_master_nodes: 2
集群中至少有几个候选master节点,为了防止脑裂,在三个节点时,配置为2。
gateway.recover_after_nodes: 1
设置集群中N个节点启动时进行数据恢复,默认为1。
node.max_local_storage_nodes: 1
该参数是用来控制节点是否允许从单目录启动多个实例。如果物理机节点承担太多的数量的实例,很容易会超过了其硬件承受能力,总体性能都要下降,设置1为禁止。
action.destructive_requires_name: true
设置是否可以通过正则或者_all删除或者关闭索引。
2.3 拷贝配置文件
将huawei@10.18.133.5中的配置文件拷贝到huawei@10.18.133.6和huawei@10.18.133.7
只需将其中的node.name和network.host进行修改即可。
至此,Elasticsearch集群的配置过程就完成了。
分别在三个服务器执行如下命令
cd /usr/local/elasticsearch-2.4.1/bin
./elasticsearch
Elasticsearch会自动识别集群,并选出master节点,通过下面的命令查看集群状态
curl -XGET 10.18.133.5:9200/_cluster/health?pretty=true