es集群搭建

ES集群搭建(非高可用版)

3个ES节点:均为master和data节点,ES版本7.10.1

1个kibana节点:kibana版本7.10.1

 

环境:es7要求jdk最低版本为11,不过es7已内置jdk,不需要我们额外安装11版本的jdk,但es6版本需要安装最低版本8的jdk。

 

第一步:下载elasticsearch和kibana的7.10.1版本的压缩包,并解压到相应目录

Es目录结构

es集群搭建

Kibana目录结构

es集群搭建

第二步:es为了安全不允许使用root用户启动,因此需要创建用户elasticsearch,并给予es和kibana安装目录的所有权。

es集群搭建

第三步:修改es配置elasticsearch.yml

位置:在解压目录下的config文件夹中

es集群搭建

# 集群名称
cluster.name: escluster

#节点名称
node.name: es1

# 该节点是否为master节点
node.master: true

# 该节点是否为数据节点
node.data: true

# 数据目录(需检查是否存在该目录且有权限访问)
path.data: /data/elasticsearch/data

# 日志目录(需检查是否存在该目录且有权限访问)
path.logs: /data/elasticsearch/logs

# 对外暴露的http请求端口
http.port: 9200

# 集群节点之间通信用的TCP端口
transport.tcp.port: 9300

# 这将指定用于监听请求的网络接口。一个节点可以绑定多个接口,例如有两块网卡,一个本地站点地址,一个本地地址
network.bind_host: 192.168.1.1

# 发布地址,一个单一地址,用于通知集群中的其他节点,以便其他的节点能够和它通信。当前,一个 elasticsearch 节点可能被绑定到多个地址,但是仅仅有一个发布地址
network.publish_host: 192.168.1.1

# bind_host和publish_host一起设置
network.host: 192.168.1.1

# 一个集群中最小主节点个数(防止脑裂,一般为n/2 + 1,n为集群节点个数)(7.10.1版本已取消?)
discovery.zen.minimum_master_nodes: 2

# 新节点启动时能被发现的节点列表(新增节点需要添加自身)
discovery.zen.ping.unicast.hosts: ["172.16.0.8:9300","172.16.0.6:9300","172.16.0.22:9300"]

# 集群初始话指定主节点(节点名),7版本必须设置
cluster.initial_master_nodes: es1

# 字段发现其他节点的超时时间
discovery.zen.ping_timeout: 3000s

# 锁住物理内存,不使用swap内存
bootstrap.memory_lock: true

 

 

第四步:jvm配置调优

解压目录下conf目录下的jvm.options文件,修改-Xms1g和-Xmx1g,一般设置为物理内存的一半,但是不应超过32G,最大设置为31G即可。

 

第五步:内存优化

① /etc/sysctl.conf添加以下内容,sysctl -p生效:

fs.file-max=655360 # 系统最大打卡文件描述符数
vm.max_map_count=655360 # 限制一个进程拥有虚拟内存区域的大小

② 修改/etc/security/limits.conf

soft nofile 65536

hard nofile 65536

soft nproc 65536

hard nproc 65536

soft memlock unlimited

# (nofile)最大开打开文件描述符
# (nproc)最大用户进程数
# (memlock)最大锁定内存地址空间

③ 修改/etc/security/limits.d/90-nproc.conf,将1024修改为65536

soft nproc 1024 # 修改前

soft nproc 65536 # 修改后

 

max file descriptors [65535] for elasticsearch process is too low -> elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65536,参考博客:

https://blog.csdn.net/jiahao1186/article/details/90235771

 

第六步:复制es文件夹并修改部分参数

将压缩后的ES进行复制,复制到另外两个节点,修改elasticsearch中的参数:

es集群搭建

es集群搭建

node.name: es2

path.data: /data/elasticsearch/data

path.logs: /data/elasticsearch/logs

 

第七步:启动3台ES节点

执行bin目录下的elasticsearch文件,注意启动前,三台机器都需要进行第四步和第五步的操作。

es集群搭建

3台ES节点启动后,会自动选举出一个master节点,这3台es节点一起组成一个es集群,master节点宕机后,另外两个节点

第八步:修改kibana配置文件kibana.yml

配置文件目录再安装目录的config文件夹下:

es集群搭建

# kibana对外暴露端口
server.port:: 5601

# 默认localhost,指定后端服务器的主机
server.host: "192.168.119.128"

# es主节点ip+端口,与ES进行通信用
elasticsearch.hosts: ["http://192.168.119.128:9200"]

# es集群名称
server.name: "my-es"

# 开启中文
i18n.locale: "zh-CN"

 

第九步:启动kibana并验证

执行bin目录下的kibana文件,页面上输入192.168.119.128:5601地址(kibana地址+端口)即可看到es集群状态,若ES集群状态为green则为健康。

es集群搭建

es集群搭建es集群搭建

 

ES非高可用版集群注意事项:

故障恢复

该非高可用版集群适用于开发和测试环境,通过3个节点组成集群,3个节点均为数据节点,均会存储数据,这3个节点中会选举一个master主节点,当该master节点宕机后,另外两个节点会选举出一个新的master节点。

但是如果两个节点宕机,则不满足最小节点限制,该限制通过yml配置文件中的discovery.zen.minimum_master_nodes配置项修改,防止脑裂推荐设置为n/2+1,n为集群中设置为master的节点数,故3个master节点时推荐设置为2。

另外,为保证数据的完整性,es提供了副本作为冗余,合理的设置分片和副本的数量可以一定程度地保证宕机时的数据完整性。

例如,在3个数据节点的情况下,如果主分片为5个,那么1个副本的情况下, 1个节点宕机后,另外两个节点还拥有完整的数据,2个节点宕机后则最后一个节点没有完整的数据,无法正常地提供服务了。若需要2个节点宕机最后一个节点仍有完整的数据,则可以设置副片数量为2。

分片和副本

但是分片和副本并不是免费的。一方面分片数量越多,对查询速度的确也会有提升,但是当分片数量到一定数量后,对主分片的维护的时间开销变大,反而会降低索引的查询速度。一般来说,主分片数量需要设置少于2倍的节点数。另一方面副本的增加除了提高了维护分片的成本,副本增加会导致一个索引暂用的空间增加,也进一步增加了存储的压力,一般来说,副本数量应尽量设置不超过3个。

最后,因为索引的主分片设置后就不允许修改。所以,一个索引的大小增加后,分片的大小必然也会随之增加,当分片的大小增加到一定程度后,对该分片的维护成本变高,查询速度也会变慢。官方推荐一个分片的大小最好在20G~50G之间,所以当一个索引的大小到达一定程度后,我们需要将新的数据导入到新的索引中,这些会需要用到rollover。设置该索引数据量超过一定大小后,es将会险种一个索引,并将数据导入到新的索引中。

冷热数据分离(未完待续...)

上一篇:ElasticSearch索引生命周期策略配置(ES TTL)


下一篇:汇编王爽老师,编写int 9中断例程,用esc键改变字母颜色