elasticSearch性能
elastic的性能跟机器的分配内存和是否使用ssd固态硬盘有很大关
系,主要是因为搜索的时候可以减少磁盘的读写交互, 以及数据的寻
址, 将数据基本上全部放到内存中;
elasticsearch不适合特别大量的数据, 就是因为他占用内存过多,
如果数据量很大, 可以考虑使用大数据技术, 因此在使用之前要估算
业务的数据量和要使用的机器以及内存情况;
基本配置
#需要设置成一样的才能加入到集群
cluster-name: xxxx;
#每个节点的名称不能相同
node-name: yyy
# 绑定本机ip, 否则不能远程访问
network-host: 192.168.1.10
#master选举/节点间通讯超时时间(这个时间的配置需要根据实际情况设置)
discovery.zen.ping_timeout: 3s
集群的发现机制
# unicast-list: 就是将集群中的几个节点作为通讯节点来接受和返回给其他要加入节点的信息, 不需要将所有的节点都设置为unicast list配置项:
discovery.zen.ping.unicast.hosts: ["192.168.1.6", "192.168.1.8", "192.168.1.11"]
集群故障探查
两种方法:
1. master去ping其他的节点保证其他节点都存活;
2. 其他节点去ping master节点;
配置项
# 每隔多长时间ping一个node
discovery.zen.fd.ping_interval: 30s
# 每次ping的超时时间
discovery.zen.fd.ping_timeout: 120s
# 一个node被ping多少次失败就认为是故障了
discovery.zen.fd.ping_retries: 6
集群间的消息复制原理
# 类似于zookeeper的二阶提交, 不过zookeeper是强一致性的, 而
# elasticsearch则可以配置返回消息的节点数量, 一般情况下会配置(n/2 + 1)个节点
discovery.zen.minimum_master_nodes: 2
数据和日志地址
# 一般建议的目录地址
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, 当网络恢复
后, 会造成数据不一致或者丢失的问题;
#取值为node数量n\2 + 1 个, 当只有两个节点时,不论这个值取几都是有问题的;
discovery.zen.master_minimum_nodes: 2
集群重启时无意义的shard重新分配
原因: 如果有十个节点, 其中五个节点先启动了, 剩余五个节点启动
很慢, 那么先启动的五个节点会组成一个集群, 记性p-shard和r-
shard的分配, 当其他五个节点启动后, 这些shard会重新分配, 耗费
大量资源和时间;
配置项:
# 多少个节点启动后就可以组成集群
gateway.recover_after_nodes: 2
# 期望多少个节点联通之后才开始分配shard
gateway.expected_nodes: 3
# 超时时间
gateway.recover_after_time: 1m
jvm分配的一般方法
通常会将机器的内存一半分配给jvm, 因为机器占用内存的不光是jvm还有lucene, 以及系统资源, 如果不是用大量的聚合或者filedata数据, 可以将jvm内存设置的小一点, 但jvm的内存不能超过32G, 超过32会造成内存的浪费, 和内存中数据的指针压缩有关系;
es后台方式启动
# es不允许使用root用户启动, 因此需要添加新用户
adduser elasticsearch;
passwd elasticsearch;
# 授权, 将es相关目录授权给新用户
chown -R elasticsearch /usr/local/...
# 在 /etc/sysctl.conf文件最后添加一行, 文件句柄数量
vm.max_map_count=262144
# 修改 etc/security/limits.conf, 添加如下内容
# soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
# hard xxx : 代表严格的设定,不允许超过这个设定的值
# nproc : 是操作系统级别对每个用户创建的进程数的限制
# nofile : 是每个进程可以打开的文件数的限制
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# 启动
./bin/elasticsearch -d
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。