共计 2190 个字符,预计需要花费 6 分钟才能阅读完成。
elasticSearch 性能
elastic 的性能跟机器的分配内存和是否使用 ssd 固态硬盘有很大关
系, 主要是因为搜索的时候可以减少磁盘的读写交互, 以及数据的寻
址, 将数据基本上全部放到内存中;
elasticsearch 不适合特别大量的数据, 就是因为他占用内存过多,
如果数据量很大, 可以考虑使用大数据技术, 因此在使用之前要估算
业务的数据量和要使用的机器以及内存情况;
集群的发现机制
unicast
unicast-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 一个 node
ping_timeout: 每次 ping 的超时时间
ping_retries: 一个 node 被 ping 多少次失败就认为是故障了
集群状态更新
类似于 zookeeper 的二阶提交, 不过 zookeeper 是强一致性的, 而
elasticsearch 则可以配置返回消息的节点数量;
配置项: discovery.zen.minimum_master_nodes
一般建议的目录地址
path.logs var/log/elasticsearch
path.data var/data/elasticsearch
log 日志配置
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.action.type = Delete
appender.rolling.strategy.action.basepath = ${sys:es.logs.base\_path}
appender.rolling.strategy.action.condition.type = IfLastModified
appender.rolling.strategy.action.condition.age = 7D
appender.rolling.strategy.action.PathConditions.type = IfFileName
appender.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_nodes
gateway.expected_nodes
gateway.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.conf
sudo vi /etc/security/limits.conf
在文件最后面加上
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
正文完
发表至: elasticsearch
2020-05-25