本文共 3378 字,大约阅读时间需要 11 分钟。
elasticsearch的配置信息在elasticsearch.yml中,下面列出一些重要的配置:
默认情况下es的集群名称是elasticsearch,在实际应用中应该设置一个有意义的集群名称:
cluster.name: elasticsearch-cluster-demo
es节点是es集群中的某一个节点,可由基本的三个信息描述,节点名称(),是否为主节点(node.master),是否为数据节点(node.data)。默认情况下,节点名称在每次启动的时候会随机生成,所以应该为节点设置一个有意义的名称,以方便排查问题。而节点又分为主节点、数据节点、客户端节点、部落节点,下面是一个节点(只为主节点)的配置样例:
node.name: node-master-onenode.master: truenode.data: false
默认情况下,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
在搭建es的时候,也应该去修改其监听的主机IP,至于端口可以用默认的:
# Set the bind address to a specific IP (IPv4 or IPv6):# 网路监听network.host: 0.0.0.0http.port: 9200transport.tcp.port: 9300
如果是搭建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动态设置的。
es集群在启动的时候,会做数据平衡操作。比如,一个10个节点5/1分片策略(5个分片,5个副本分片)的集群,平衡下来是每个节点一个分片,如果集群在重启的时候,有5个节点因为网络原因一段时间内未启动成功,可能会出现一种情况:启动的5个节点中有3个主分片,2个副分片。这时候就会出现主分片数据不完整和不均匀分布,此时集群会自动做数据的平衡操作。若一段时间后,另外的5个节点重新上线了,发现本身的数据在集群中已存在,则又会做平衡操作。这样,两次数据平衡移动操作,会占用磁盘和带宽,若数据量大则影响可想而知。所以可以做如下控制,来保障集群重启时数据恢复花费时间尽可能短:
gateway.recover_after_nodes: 8
gateway.expected_nodes: 10gateway.recover_after_time: 5m
使用单播方式,为节点提供其应该去尝试连接的节点列表,连接成功,得到集群的状态信息,便加入集群。节点列表中可以不是全部节点,只要能保障能进入集群即可(可以选用部分候选主节点)。
# 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:portdiscovery.zen.ping.unicast.hosts: ["127.0.0.1:9300"]
es集群在运行的时候,当有节点加入或离开的时候,会进行分片均衡操作,这个过程有些像集群重启时的数据恢复过程,可能会导致出现多次分片在均衡的过程,所以需要设置延迟分片分配,以尽量避免该情形出现。
# 延迟5mindelayed_timeout: 5m
该设置同样可以通过API的形式动态设置。
内存交换会影响性能,es官方推荐允许JVM锁住内存,禁止出现内存交换的情况:
bootstrap.mlockall: true
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(具体原因可以详见),可以多给底层lucenen多分点。
es在节点在通信时会产生大量套接字,以及es底层的lucene使用了大量文件,所以需要足够的文件描述符,而linux中一般都是做有限制的,所以应该修改为大一点的值。
可以修改文件/etc/security/limits.conf
vim /etc/security/limits.conf
添加如下配置,配置值设为需要的值即可:
##四个元素的意义在该文件中均有详细描述elasticsearch soft nofile 65536elasticsearch hard nofile 65536
es对文件混合使用了NioFs(非阻塞文件系统)和 MMapFs ( 内存映射文件系统),所以要保障有足够的虚拟内存用于映射。
可以直接修改/etc/sysctl.conf文件添加如下配置,配置值设为需要的值即可
vm.max_map_count=655360
然后执行如下命令
sysctl -p
这两项如果在启动elasticsearch之前不进行设置的话,在启动es的时候也可能会直接报相关的error以致无法启动成功。
这两个配置,es官方强烈建议不要做修改,具体原因可参考
转载地址:http://ybpin.baihongyu.com/