概述
文章目录
- 一 Elasticsearch基础配置
- 1.1 集群名称
- 1.2 节点信息
- 1.3 数据存储路径/日志路径
- 1.4 网络绑定监听
- 1.5 最小主节点数
- 1.6 集群恢复
- 1.7 集群节点发现
- 1.8 推迟分片分配
- 1.9 禁止内存交换
- 二 其他配置
- 2.1 Elasticsearch JVM内存
- 2.2 文件描述符和MMap内存映射
- 2.3 GC配置和线程池
- 三 参考资料
一 Elasticsearch基础配置
elasticsearch的配置信息在elasticsearch.yml中,下面列出一些重要的配置:
1.1 集群名称
默认情况下es的集群名称是elasticsearch,在实际应用中应该设置一个有意义的集群名称:
cluster.name: elasticsearch-cluster-demo
1.2 节点信息
es节点是es集群中的某一个节点,可由基本的三个信息描述,节点名称(node.name),是否为主节点(node.master),是否为数据节点(node.data)。默认情况下,节点名称在每次启动的时候会随机生成,所以应该为节点设置一个有意义的名称,以方便排查问题。而节点又分为主节点、数据节点、客户端节点、部落节点,下面是一个节点(只为主节点)的配置样例:
node.name: node-master-one
node.master: true
node.data: false
1.3 数据存储路径/日志路径
默认情况下,es数据和日志的存储路径是在安装目录下,为了防止被误删掉,应该重新设置路径。配置样例如下:
# Path to directory where to store the data (separate multiple locations by comma):
# es data 存储路径(多个路径可用','隔开)
path.data: /home/environment/elasticsearch-cluster/elasticsearch-master-one/data
#
# Path to log files:
# log存储路径
path.logs: /home/environment/elasticsearch-cluster/elasticsearch-master-one/logs
1.4 网络绑定监听
在搭建es的时候,也应该去修改其监听的主机IP,至于端口可以用默认的:
# Set the bind address to a specific IP (IPv4 or IPv6):
# 网路监听
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
1.5 最小主节点数
如果是搭建es集群,那么应该设置最小主节点这个设置,以便防止脑裂现象:多个主节点同时存在与一个集群(一个集群只允许有一个主节点)。集群的主节点是集群的最高统治者,控制着索引的创建和分片的移动策略等;如果一个集群出现多个主节点,那么就好比一个团队出现两个leader一样,原本的一个整体被划分,对于es集群来讲就是原本的分片(数据)被分开,这样数据就可能出现不完整性。
集群的主节点是靠所有有资格竞选主节点的节点(即节点信息设置node.master为true)投票选举出来的,所以现在获得的投票数量应该大于总票数半。所以在es中,是设定当候选的master节点达到设定的法定个数的时候才进行主节点选举:法定个数 = master-eligible nodes / 2 + 1
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
# 最小主节点个数
discovery.zen.minimum_master_nodes: 2
因为es节点是可以动态删除和添加的,所以这个设置是可以通过API动态设置的。
1.6 集群恢复
es集群在启动的时候,会做数据平衡操作。比如,一个10个节点5/1分片策略(5个分片,5个副本分片)的集群,平衡下来是每个节点一个分片,如果集群在重启的时候,有5个节点因为网络原因一段时间内未启动成功,可能会出现一种情况:启动的5个节点中有3个主分片,2个副分片。这时候就会出现主分片数据不完整和不均匀分布,此时集群会自动做数据的平衡操作。若一段时间后,另外的5个节点重新上线了,发现本身的数据在集群中已存在,则又会做平衡操作。这样,两次数据平衡移动操作,会占用磁盘和带宽,若数据量大则影响可想而知。所以可以做如下控制,来保障集群重启时数据恢复花费时间尽可能短:
- 设置集群可提供服务的条件:最小上线节点数
gateway.recover_after_nodes: 8
- 设置集群数据恢复条件:等待多少分钟,或这有多少个节点上线(具体取决与条件的先达性)
gateway.expected_nodes: 10
gateway.recover_after_time: 5m
1.7 集群节点发现
使用单播方式,为节点提供其应该去尝试连接的节点列表,连接成功,得到集群的状态信息,便加入集群。节点列表中可以不是全部节点,只要能保障能进入集群即可(可以选用部分候选主节点)。
# 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]"]
# 候选主节点ip:port
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300"]
1.8 推迟分片分配
es集群在运行的时候,当有节点加入或离开的时候,会进行分片均衡操作,这个过程有些像集群重启时的数据恢复过程,可能会导致出现多次分片在均衡的过程,所以需要设置延迟分片分配,以尽量避免该情形出现。
# 延迟5min
delayed_timeout: 5m
该设置同样可以通过API的形式动态设置。
1.9 禁止内存交换
内存交换会影响性能,es官方推荐允许JVM锁住内存,禁止出现内存交换的情况:
bootstrap.mlockall: true
二 其他配置
2.1 Elasticsearch JVM内存
es默认的安装内存是1g,这个可以根据需要来设置,在es的config目录中的jvm.options中:
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g
当然,这个内存不是随便设置的,推荐的是最大值和最小值一样,以避免堆内存改变时浪费系统资源。其次是即便硬件资源足购大,也不要分配超过32g(具体原因可以详见Elasticsearch权威指南),可以多给底层lucenen多分点。
2.2 文件描述符和MMap内存映射
es在节点在通信时会产生大量套接字,以及es底层的lucene使用了大量文件,所以需要足够的文件描述符,而linux中一般都是做有限制的,所以应该修改为大一点的值。
可以修改文件/etc/security/limits.conf
vim /etc/security/limits.conf
添加如下配置,配置值设为需要的值即可:
#<domain> <type> <item> <value>
#四个元素的意义在该文件中均有详细描述
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
es对文件混合使用了NioFs(非阻塞文件系统)和 MMapFs ( 内存映射文件系统),所以要保障有足够的虚拟内存用于映射。
可以直接修改/etc/sysctl.conf文件添加如下配置,配置值设为需要的值即可
vm.max_map_count=655360
然后执行如下命令
sysctl -p
这两项如果在启动elasticsearch之前不进行设置的话,在启动es的时候也可能会直接报相关的error以致无法启动成功。
2.3 GC配置和线程池
这两个配置,es官方强烈建议不要做修改,具体原因可参考 Elasticsearch权威指南: 不要触碰这些配置
三 参考资料
- 《Elasticsearch权威指南》
- 《Elasticsearch技术解析与实战》
最后
以上就是爱听歌豆芽为你收集整理的Elasticsearch 重要配置详解的全部内容,希望文章能够帮你解决Elasticsearch 重要配置详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复