1.2、Elasticsearch集群部署
ES的集群部署其实和单机部署几乎一致,主要的不同点就在于配置文件
服务规划:
ES集群部署
可参考Elasticsearch详解及部署将三台设备分别部署好ES
修改ES配置文件
将三台设备的配置文件进行修改
su - es
cd /usr/local/elasticsearch-7.6.1/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-7.6.1/data #设置日志的存储路径 path.logs: /usr/local/elasticsearch-7.6.1/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.36.164:9700","192.168.36.150:9700","192.168.36.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: 100000
三个节点启动ES
cd /usr/local/elasticsearch-7.6.1/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节点