elasticSearch性能
elastic的性能跟机器的分配内存和是否使用ssd固态硬盘有很大关系,主要是因为搜索的时候可以减少磁盘的读写交互, 以及数据的寻址, 将数据基本上全部放到内存中;elasticsearch不适合特别大量的数据, 就是因为他占用内存过多, 如果数据量很大, 可以考虑使用大数据技术, 因此在使用之前要估算业务的数据量和要使用的机器以及内存情况;
集群的发现机制
unicastunicast-list就是将集群中的几个节点作为通讯节点来接受和返回其他要加入节点的信息, 不需要将所有的节点都设置为unicast list配置项: discovery.zen.ping.uncast.hosts
master选举节点间通讯超时时间配置: discovery.zen.ping_timeout节点设置cluster-name: 需要设置成一样的才能加入到集群node-name: 每一个节点需要有自己的一个名字network-host: 需要绑定到自己的机器上去
集群故障探查
两种方法: master去ping其他的节点保证其他节点都存活, 或者其他节点去ping master节点配置项ping_interval: 每隔多长时间ping一个nodeping_timeout: 每次ping的超时时间ping_retries: 一个node被ping多少次失败就认为是故障了
集群状态更新
类似于zookeeper的二阶提交, 不过zookeeper是强一致性的, 而elasticsearch则可以配置返回消息的节点数量;配置项: discovery.zen.minimum_master_nodes一般建议的目录地址path.logs var/log/elasticsearchpath.data var/data/elasticsearch
log日志配置
appender.rolling.strategy.type = DefaultRolloverStrategyappender.rolling.strategy.action.type = Deleteappender.rolling.strategy.action.basepath = ${sys:es.logs.base\_path}appender.rolling.strategy.action.condition.type = IfLastModifiedappender.rolling.strategy.action.condition.age = 7Dappender.rolling.strategy.action.PathConditions.type = IfFileNameappender.rolling.strategy.action.PathConditions.glob = ${sys:es.logs.cluster\_name}-\*第一行是配置了默认的DefaultRolloverStrategy第二行是配置了Delete action,在rollover之后,就会删除文件第三行是配置了es log的基础路径第四行是配置了rollover发生的条件,是基于IfLastModified第五行是配置了保留的天数,这里是7天第六行是配置了删除匹配7天前的文件第七行是配置了一个删除文件的格式,这样就只是删除过期日志文件,但是不要删除慢查询日志
集群脑裂问题参数配置
脑裂主要是由于网络问题引起的, 由于一个集群被划分到两个网络中去, 相互之间不能通讯, 因此会对集群重新选举master, 当网络恢复后, 会造成数据不一致或者丢失的问题;配置项: discovery.zen.master_minimum_nodes 取值为node数量 n\2 + 1 个, 当只有两个节点时,不论这个值取几都是有问题的;
集群重启时无意义的shard重新分配
原因: 如果有十个节点, 其中五个节点先启动了, 剩余五个节点启动很慢, 那么先启动的五个节点会组成一个集群, 记性p-shard和r-shard的分配, 当其他五个节点启动后, 这些shard会重新分配, 耗费大量资源和时间;配置项: gateway.recover_after_nodesgateway.expected_nodesgateway.recover_after_time
jvm分配的一般方法
通常会将机器的内存一半分配给jvm, 因为机器占用内存的不光是jvm还有lucene, 以及系统资源, 如果不是用大量的聚合或者filedata数据, 可以将jvm内存设置的小一点, 但jvm的内存不能超过32G, 超过32会造成内存的浪费, 和内存中数据的指针压缩有关系;
es后台方式启动
1). es不允许使用root用户启动, 因此需要添加新用户adduser elasticsearch /passwd elasticsearch //授权 chown -R elasticsearch /usr/local/...2). 在 /etc/sysctl.conf文件最后添加一行 vm.max_map_count=262144修改 etc/security/limits.confsudo vi /etc/security/limits.conf在文件最后面加上* soft nofile 65536* hard nofile 65536* soft nproc 4096* hard nproc 4096