dockerdb

Elasticsearch 集群管理(集群规划、集群搭建、集群管

2019-12-30  本文已影响0人  Splunker

集群规划

我们需要多大规模的集群

需要从以下两个方面考虑

推算的依据:

类应用场景:

集群中的节点角色如何分配
节点角色

Master
node.master: true 节点可以作为主节点
DataNode
node.data: true 默认是数据节点。
Coordinate node 协调节点
如果仅担任协调节点,将上两个配置设为false。
说明: *一个节点可以充当一个或多个角色,默认三个角色都有* *协调节点:一个节点只作为接收请求、转发请求到其他节点、汇总各个节点返回数据等功能的节点。就叫协调节点*

如何分配

如何避免脑裂问题(7.0版本已不存在此问题)

脑裂问题

一个集群中只有一个A主节点,A主节点因为需要处理的东西太多或者网络过于繁忙,从而导致其他从节点ping不通A主节点,这样其他从节点就会认为A主节点不可用了,就会重新选出一个新的主节点B。过了一会A主节点恢复正常了,这样就出现了两个主节点,导致一部分数据来源于A主节点,另外一部分数据来源于B主节点,出现数据不一致问题,这就是脑裂。

尽量避免脑裂,需要添加最小数量的主节点配置:

discovery.zen.minimum_master_nodes: (有master资格节点数/2) + 1
这个参数控制的是,选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举。官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。

常用做法(中大规模集群)
discovery.zen.ping.multicast.enabled: false # 关闭多播发现机制,默认是关闭的
discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] #配置单播发现的主节点ip地址,其他从节点要加入进来,就得去询问单播发现机制里面配置的主节点我要加入到集群里面了,主节点同意以后才能加入,然后主节点再通知集群中的其他节点有新节点加入
discovery.zen.ping_timeout: 30(默认值是3秒)#其他节点ping主节点多久时间没有响应就认为主节点不可用了
discovery.zen.minimum_master_nodes: 2 # 选举主节点时需要看到最少多少个具有master资格的活节点,才能进行选举

索引应该设置多少个分片

说明:分片数指定后不可变,除非重索引。
思考

分片过多的影响
分片设置的可参考原则
分片应该设置几个副本

说明:副本数是可以随时调整的!
思考

副本设置基本原则

集群搭建

准备3台虚拟机
修改3台虚拟机下ES的配置,使得它们组成一个集群

进入elasticsearch的config目录,修改elasticsearch.yml的配置

IP访问限制、默认端口修改9200

这里有两个需要提醒下,第一个就是IP访问限制,第二个就是es实例的默认端口号9200。IP访问限制可以限定具体的IP访问服务器,这有一定的安全过滤作用。

# Set the bind address to a specific IP (IPv4 or IPv6): 
# 
network.host: 192.168.152.128

如果设置成0.0.0.0则是不限制任何IP访问。一般在生产的服务器可能会限定几台IP,通常用于管理使用。

默认的端口9200在一般情况下也有点风险,可以将默认的端口修改成另外一个,这还有一个原因就是怕开发人员误操作,连接上集群。当然,如果你的公司网络隔离做的很好也无所谓。

# 
# Set a custom port for HTTP: 
# 
http.port: 9200 
transport.tcp.port: 9300

这里的9300是集群内部通讯使用的端口,这个也可以修改掉。因为连接集群的方式有两种,通过扮演集群node也是可以进入集群的,所以还是安全起见,修改掉默认的端口。
说明:记得修改安装了ES的3台虚拟机(三个节点)的相同配置,要不然节点之间无法建立连接工作,也会报错。

集群发现IP列表、node、cluster名称

你需要在192.168.152.128的elasticsearch中配置成:

# --------------------------------- Discovery ---------------------------------- 
# 
# Pass an initial list of hosts to perform discovery when new node is started: 
# The default list of hosts is ["127.0.0.1", "[::1]"] 
# 
discovery.zen.ping.unicast.hosts: [ "192.168.152.129:9300","192.168.152.130:9300" ]

让他去发现129,130的机器,以此内推,完成剩下的129和130机器的配置。
然后你需要配置下集群名称,就是你当前节点所在集群的名称,这有助于你规划你的集群。集群中的所有节点的集群名称必须一样,只有集群名称一样才能组成一个逻辑集群。

# ---------------------------------- Cluster ----------------------------------- 
# 
# Use a descriptive name for your cluster: 
# 
cluster.name: mycluster 

配置你当前节点的名称

# 
# ------------------------------------ Node ------------------------------------ 
# 
# Use a descriptive name for the node: 
# 
node.name: node-1

以此类推,完成另外两个节点的配置。cluster.name的名称必须保持一样。然后分别设置node.name。
说明: 这里搭建的是一个简单的集群,没有做集群节点角色的区分,所以3个节点默认的角色有主节点、数据节点、协调节点

选举ES主节点的逻辑:
选举的大概逻辑,它会根据分片的数据的前后新鲜程度来作为选举的一个重要逻辑。(日志、数据、时间都会作为集群master全局的重要指标)。
因为考虑到数据一致性问题,当然是用最新的数据节点作为master,然后进行新数据的复制和刷新其他node。

集群管理

监控API
http://localhost:9200/_cat
GET  /_cat
/_cat/health
/_cat/nodes
/_cat/master
/_cat/indices
/_cat/allocation 
/_cat/shards 
/_cat/shards/{index}
/_cat/thread_pool
/_cat/segments 
/_cat/segments/{index}
x-pack

为集群提供安全防护、监控、告警、报告等功能的收费组件;
部分免费:https://www.elastic.co/subscriptions
6.3开始已开源,并并入了elasticsearch核心中。

官网安装介绍:
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/installing-xpack-es.html

上一篇 下一篇

猜你喜欢

热点阅读