1、elasticsearch服务配置
1.1、Cluster集群配置
参数名称 |
默认值 |
说明 |
cluster.name |
elasticsearch |
集群名称,只有具有相同集群名的节点才能组成一个逻辑集群 |
1.2、Node节点配置
参数名称 |
默认值 |
说明 |
node.name |
系统生成 |
节点名称,同一集群的各节点名称必须不同,不配置则系统默认生成 |
node.attr.rack |
|
节点部落属性 |
1.3、Paths路径配置
参数名称 |
默认值 |
说明 |
path.conf |
|
配置文件路径 |
path.data |
|
数据存储位置,可以以逗号分隔配置多个存储位置,有利于提升安全性 |
path.work |
|
临时文件存储路径 |
path.logs |
|
日志文件存储路径 |
1.4、Memory内存配置
参数名称 |
默认值 |
说明 |
bootstrap.mlockall |
true |
当JVM开始写入交换空间时(swapping)ElasticSearch性能会低下,应该保证它不会写入交换空间,设置这个属性为true来锁定内存,同时也要允许elasticsearch的进程可以锁住内存 |
1.5、网络及http配置
参数名称 |
默认值 |
说明 |
network.bind_host |
0.0.0.0 |
设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0 |
network.publish_host |
|
设置其它节点和该节点交互的ip地址,如果不设置它会自动设置,值必须是个真实的ip地址 |
network.host |
|
同时设置bind_host和publish_host上面两个参数 |
transport.tcp.port |
9300 |
设置节点间交互的tcp端口,默认是9300 |
transport.tcp.compress |
false |
设置是否压缩tcp传输时的数据,默认为false,不压缩 |
http.port |
9200 |
设置对外服务的http端口,默认为9200 |
http.max_content_length |
100Mb |
设置请求内容的最大容量,默认100mb |
http.enabled |
false |
使用http协议对外提供服务,默认为true,开启 |
http.cors.enabled |
true |
使用head等插件监控集群信息,需要打开 |
http.cors.allow-origin |
“*” |
使用head等插件监控集群信息,需要打开 |
http.cors.allow-credentials |
true |
使用head等插件监控集群信息,需要打开 |
1.6、Geteway网关
参数名称 |
默认值 |
说明 |
gateway.type |
local |
gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统 |
gateway.recover_after_nodes |
1 |
一个集群中的N个节点启动后,才允许进行恢复处理 |
gateway.recover_after_time |
5m |
设置初始化恢复过程的超时时间,超时时间从上一个配置中配置的N个节点启动后算起 |
gateway.expected_nodes |
2 |
设置这个集群中期望有多少个节点.本地节点恢复会在这N个节点启动(并且recover_after_nodes也符合)加入集群之后开始执行。 |
1.7、Recovery集群恢复
参数名称 |
默认值 |
说明 |
cluster.routing.allocation.node_initial_primaries_recoveries |
4 |
初始化数据恢复时,并发恢复线程的个数,默认为4 |
cluster.routing.allocation.node_concurrent_recoveries |
2 |
添加删除节点或负载均衡时并发恢复线程的个数,默认为2 |
indices.recovery.max_bytes_per_sec |
0 |
设置恢复时的吞吐量(例如:100mb,默认为0无限制.如果机器还有其他业务在跑的话还是限制一下的好) |
indices.recovery.concurrent_streams |
5 |
设置来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5 |
1.8、Discovery集群发现
参数名称 |
默认值 |
说明 |
discovery.zen.minimum_master_nodes |
1 |
设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点.默认为1,对于大的集群来说,可以设置大一点的值(2-4) |
discovery.zen.ping.timeout |
3 |
探查的超时时间,默认3秒,提高一点以应对网络不好的时候,防止脑裂 |
discovery.zen.ping.multicast.enabled |
true |
设置是否打开多播发现节点.默认是true, 当多播不可用或者集群跨网段的时候集群通信还是用单播吧 |
discovery.zen.ping.unicast.hosts |
|
这是一个集群中的主节点的初始列表,当节点(主节点或者数据节点)启动时使用这个列表进行探测 |
1.9、Cache缓存
参数名称 |
默认值 |
说明 |
indices.cache.filter.size |
10% |
filter cache缓存的临界值,如1gb或20%等 |
index.cache.field.expire |
|
缓存过去时间 |
index.cache.field.max_size |
|
缓存的最大条数 |
index.cache.field.type |
|
缓存类型 |
1.10、Translog配置
参数名称 |
默认值 |
说明 |
index.translog.flush_threshold_ops |
unlimited |
当发生多少次操作时进行一次flush |
index.translog.flush_threshold_size |
512mb |
当translog的大小达到此值时会进行一次flush操作 |
index.translog.flush_threshold_period |
30m |
在指定的时间间隔内如果没有进行flush操作,会进行一次强制flush操作 |
index.translog.interval |
5s |
多少时间间隔内会检查一次translog,来进行一次flush操作.es会随机的在这个值到这个值的2倍大小之间进行一次操作 |
index.gateway.local.sync |
5s |
多少时间进行一次的写磁盘操作 |
1.11、线程池配置
线程池配置.png
2、重要配置
2.1、内存配置
确保将对内存最大值和最小值设置为相同大小,防止出现在运行时改变堆内存大小而消耗系统资源;
lucene会消耗大量的非堆内存,其被设计可以很好利用操作系统的底层缓存机制,从而提升检索性能。标准建议将50%可用内存作为es的堆内存,剩下50%交给操作系统及lucene,如不考虑对分词字符串的聚合操作(不使用fielddata),可以降低对内存,这样对es及lucene的性能都会提升;
同时对内存最大不要超过32GB,Java 使用一个叫作 内存指针压缩(compressed oops)的技术来解决这个问题。 它的指针不再表示对象在内存中的精确位置,而是表示 偏移量 。这意味着 32 位的指针可以引用 40 亿个 对象 , 而不是 40 亿个字节。最终, 也就是说堆内存增长到 32 GB 的物理内存,也可以用 32 位的指针表示。
一旦你越过那个神奇的 ~32 GB 的边界,指针就会切回普通对象的指针。 每个对象的指针都变长了,就会使用更多的 CPU 内存带宽,也就是说你实际上失去了更多的内存。事实上,当内存到达 40–50 GB 的时候,有效内存才相当于使用内存对象指针压缩技术时候的 32 GB 内存。
2.2、swapping对性能的影响
内存交换到磁盘对服务器性能来说是致命的,最好的办法就是在你的操作系统中完全禁用 swap。可以设置配置文件中的 mlockall 开关, 它的作用就是允许 JVM 锁住内存,禁止操作系统交换出去。
网友评论