Elasticsearch集群部署
原创
©著作权归作者所有:来自51CTO博客作者feirenraoyuan的原创作品,请联系作者获取转载授权,否则将追究法律责任
说明:ES的集群部署其实和单机部署几乎一致,主要的不同点就在于配置文件,将三台设备的配置文件进行如下修改。
1、文件配置:cd /usr/local/elasticsearch/config/
vi elasticsearch.yml
#ES集群名称
cluster.name: my-es
#ES节点名称,同一个集群内的节点名称不能相同(三个节点分别设置成node-1、node-2、node-3)
node.name: node-1
#该节点是否有资格被选举为master
node.master: true
#是否存储索引数据
node.data: true
#设置索引数据的存储路径
path.data: /usr/local/elasticsearch/data
#设置日志的存储路径
path.logs: /usr/local/elasticsearch/logs
#设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中
network.host: 0.0.0.0
#设置对外服务的端口
http.port: 9200
#ES集群内部通信端口
transport.tcp.port: 9700
#该项的主要作用就是为了防止脑裂问题
#表示集群最少master数,如果集群master数少于该值,将无法启动
#官方推荐的参数配置:集群中节点数/2+1,加入有3个节点,我们该项就配置成2
discovery.zen.minimum_master_nodes: 2
#设置集群的初始节点列表,集群互通端口为我们所配置的端口
discovery.zen.ping.unicast.hosts: ["192.168.100.164:9700","192.168.100.150:9700","192.168.100.151:9700"]
#首次启动全新的Elasticsearch集群时,会出现一个集群引导步骤,该步骤确定了在第一次选举中便对其票数进行计数的有资格成
为集群中主节点的节点(投票的目的是选出集群的主节点)
cluster.initial_master_nodes: ["node-1","node-2","node-3"]
#索引的分片数量,ES集群中节点数*2,单节点需配置为1
index.number_of_shards: 6
#索引可被复制的数量,集群最少配置为1,单节点为0
index.number_of_replicas: 1
#fielddata所能占用的最大内存,设置为JVM的60%
indices.breaker.fielddata.limit: 60%
#估算完成查询需要的内存大小,设置为JVM总内存的40%
indices.breaker.request.limit: 40%
#设置request和fielddata断路器保证这两部分总的内存不会超出JVM内存大小。
indices.breaker.total.limit: 70%
#控制fielddata允许内存大小,达到HEAP 40% 自动清理旧cache
indices.fielddata.cache.size :40%
#修改线程池配置,线程池大小为size属性指定,type若为cache就代表着无限制的线程池,为每个请求创建一个线程
threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500
#返回结果最大条数,默认是10000,如果有大量数据要分页需该此值
index.max_result_window: 10000
2、三个节点启动ES
cd /usr/local/elasticsearch/bin/
nohup ./elasticsearch &
命令查看ES集群节点状态:curl -XGET "localhost:9200/_cat/nodes?v"
ES脑裂问题说明
假如我们当前场景的ES集群有三个节点(node-1、node-2、node-3),node-1为master。假如node-1与node-2和node-3这时候因为网路问题断开,就有可能出现以下情况:
node-1自己组成一个集群成为master;node-2和node-3自己又组成了一个集群重新选举新的master,
这时候就会出现有两个master的存在。所以我们需要配置上discovery.zen.minimum_master_nodes项,
必须保证我们ES的节点数大于或等于quorum的值,才会选举master。
再来看看设置discovery.zen.minimum_master_nodes项后刚刚所说的场景,node-1虽然与node-2和node-3断开连接,
但是由于node-1这边不符合quorum的选举条件,就不会进行master的选举,而node-2和node-3符合quorum的条件,
所以会选举master,这时候,我们的ES就还是会只有一个master节点。
集群健康状态 API : GET _cluster/health?pretty
索引信息 API : GET _cat/indices?pretty&v
节点状态 API: GET _nodes?pretty
主节点信息 API: GET _cat/master?pretty&v
分片分配、索引信息统计 API : GET _stats?pretty
统计节点的jvm,http,io统计信息: GET _nodes/stats?pretty