一、集群节点角色有哪些,各自起着什么作用?
master节点:
主要功能是维护元数据,管理集群各个节点的状态,数据的导入和查询都不会走master节点,所以master节点的压力相对较小,因此master节点的内存分配也可以相对少些;但是master节点是最重要的,如果master节点挂了或者发生脑裂了,你的元数据就会发生混乱,那样你集群里的全部数据可能会发生丢失,所以一定要保证master节点的稳定性。
机器配置建议:稳定、普通服务器即可(CPU 内存 消耗一般)
配置方法:node.master: true node.data: false
data节点:
是负责数据的查询和导入的,它的压力会比较大,它需要分配多点的内存,选择服务器的时候最好选择配置较高的机器(大内存,双路CPU,SSD... 土豪~);data node要是坏了,可能会丢失一小份数据。
机器配置建议:性能高(主要消耗磁盘,内存)
配置方法:node.master: false node.data: true
client节点 :
该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
警告:添加太多的客户端节点对集群是一种负担,因为主节点必须等待每一个节点集群状态的更新确认!客户节点的作用不应被夸大,数据节点也可以起到类似的作用
机器配置建议:普通服务器即可(如果要进行分组聚合操作的话,建议这个节点内存也分配多一点)
配置方法:node.master: false node.data: false
tribe节点(用的少):
部落节点可以跨越多个集群,它可以接收每个集群的状态,然后合并成一个全局集群的状态,它可以读写所有节点上的数据
二、集群搭建步骤?
window下(要jdk1.8环境):
1、elasticsearch-2.3.2\bin\elasticsearch.in.sh文件:
2、elasticsearch-2.3.2\config\elasticsearch.yml文件:(一定要记得开头带空格,冒号后面带空格)
- cluster.name: my-application(集群名称,所有节点需保持一致)
- node.name: node-1(节点名称,必须都不一样)
- node.master (根据情况设置true或者false,思路参考第一个问题)
- node.data(根据情况设置true或者false,思路参考第一个问题)
- network.host: 0.0.0.0 (使其支持外网访问)
- discovery.zen.ping.unicast.hosts: ["192.0.0.1","192.0.0.2"] (设置了自动发现的节点)http.enabled: false
- http.enabled: false (关闭node节点的http功能,其他节点不设置)
- discovery.zen.minimum_master_nodes :默认值是1,该属性定义的是为了组成一个集群,相互连接的候选主结点的最小数目,强烈推荐该属性的设置使用多数原则:(master_eligible_nodes / 2) + 1,既能避免出现脑裂(split-brain),又能在故障发生后,快速选举出新的主结点,例如,有5个候选主结点,推荐把该属性设置为3
- bootstrap.mlockall: true (锁定物理内存地址)
三、集群优化建议?
1、节点越多越好,每个节点各司其职。根据机器配置设置节点的类型。
2、索引分片数不要太多,尽量控制在5~10之内。副本数根据情况来,至少设置为1,在一定范围内,副本数越多,效率越高
3、一台机器上最好只部署一个节点,如果配置很高,那就无所谓
4、关闭data 节点的http 功能:将其中的配置参数这样设置:http.enabled: false,同时也不要安装head, bigdesk, marvel等监控插件,这样保证data节点服务器只需处理创建/更新/删除/查询索引数据等操作
5、ES内存设置:不要超过32G(即便你有足够的内存,也尽量不要超过32G,因为它浪费了内存,降低了CPU的性能,还要让GC应对大内存)
6、设置memory_lock来锁定进程的物理内存地址:修改elasticsearch.yml文件,设置bootstrap.memory_lock: true(版本2.4.3之后)、bootstrap.mlockall: true(版本2.4之后)
7、清除已删除文档:curl -XPOST 'http://192.168.80.10:9200/zhouls/_forcemerge?only_expunge_deletes=true'
8、将log的输出级别改为info(index.search.slowlog)