文章目录
此文档主要解释cluster/setting中的配置信息(包括集群级别的,索引级别的)。
动态配置:就是设置完立即生效的;静态配置:就是需要重启生效的。
获取集群配置get cluster/setting
es官网setting配置
1:集群分片分配规则和重平衡机制
分片分配是将分片分配给节点的过程。主要在集群初始恢复,副本分配,重新平衡或添加或删除节点时发生。
有许多设置可用于控制分片分配过程:
集群级别分片分配设置:控制分配和重新平衡操作。
磁盘的分片分配设置:介绍了Elasticsearch如何考虑可用磁盘空间以及相关设置。
分片分配感知和强制感知控制了如何在不同机架或可用性区域之间分配分片。
集群级分片分配过滤允许某些节点或某些节点组从分配中排除,以便将其停用。
1.1:集群分片分配(动态)
1.1.1、分配策略
cluster.routing.allocation.enable
(动态生效)启用或禁用对特定种类的分片的分配:
all -(默认)允许为所有类型的分片分配分片。
primaries -仅允许为主分片分配分片。
new_primaries -仅允许为新索引的主分片分配。
none -不允许为任何索引分配任何类型的分片。
控制未分配的主分片副本分配和恢复,此设置不会影响重启节点时本地主分片的恢复
1.1.2:集群分片分配过滤器(路由)
控制分片分配的位置(节点),或者排除某些节点。比如用来控制节点隔离控制其上面的索引分配到其他位置到达隔离节点作用。
cluster.routing.allocation.include.{attribute}
将分片分配给其节点{attribute}至少具有一个逗号分隔值的节点。
cluster.routing.allocation.require.{attribute}:
仅将分片分配给{attribute}具有所有逗号分隔值的节点。
cluster.routing.allocation.exclude.{attribute}:
请勿将分片分配给{attribute}具有任何逗号分隔值的节点
cluster.max_shards_per_node:
控制每个数据节点在集群中允许的分片数量,数量计算包括主副本和未分配的分片,但是不包括关闭和删除的索引分片。
过滤器使用:比如停止向某台服务器分布分片(也可以让你上面的分片都迁移走对其节点进行下线),支持通配符*
PUT _cluster / settings { “ transient” :{
“cluster.routing.allocation.exclude._ip” :“ 10.0.0.1” } }
单台服务器所分配的分片限制,默认1000,则集群总数=1000*n台服务器
1.2:分片均衡设置(动态)
1.2.1:分片负载均衡策略
当集群在每个节点上具有相同数量的分片时,集群是平衡的,下面配置控制集群中的分片进行重新平衡。
主要3个参数,除此之外还可以设置平衡算法
1:cluster.routing.rebalance.enable
为特定种类的分片启用或禁用重新平衡:
all -(默认)允许所有类型的分片进行分片平衡。
primaries -仅允许对主分片进行分片平衡。
replicas -仅允许对副本分片进行分片平衡。
none -任何索引都不允许分片平衡。
2:cluster.routing.allocation.allow_rebalance
指定何时允许分片重新平衡:
always -始终允许重新平衡。
indices_primaries_active -仅在分配集群中的所有主节点时。
indices_all_active -(默认)仅在分配集群中的所有分片(主和副本)时。
3:cluster.routing.allocation.cluster_concurrent_rebalance
允许控制在集群范围内允许多少并发分片重新平衡。默认为2。请注意,由于群集中的不平衡,
此设置仅控制并发碎片重定位的数量。由于设置过滤或强制感知,此设置不限制碎片重定位
实际使用,处理未分配的分片,有些分片的状态是unassigned
curl -XPUT "http://ip:port/_cluster/settings?pretty&master_timeout=180s"
-H 'Content-Type:application/json'
-d '{"transient":{"cluster.routing.allocation.allow_rebalance":"indices_primaries_active"}}'
1.2.2、设置分片延迟分配
可以使用 index.unassigned.node_left.delayed_timeout 动态设置来延迟由于节点离开而导致未分配的副本分片的分配问题; 该配置默认值 1m;
PUT _all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
1.2.3 均衡触发条件
单节点分片数和总节点总分片数平均值的差额大于百分比时触发
## 每个节点上的从shard数量,-1代表不限制
cluster.routing.allocation.total_shards_per_node: -1
## 定义分配在该节点的分片数的因子 阈值=因子*
(当前节点的分片数-集群的总分片数/节点数,即每个节点的平均分片数)
cluster.routing.allocation.balance.shard: 0.45f
## 定义分配在该节点某个索引的分片数的因子,阈值=因子*(保存当前节点的某个索引的分片数-索引的总分片数/节点数,即每个节点某个索引的平均分片数)
cluster.routing.allocation.balance.index: 0.55f
## 超出这个阈值就会重新分配分片
cluster.routing.allocation.balance.threshold: 1.0f
## 磁盘参数
## 启用基于磁盘的分发策略
cluster.routing.allocation.disk.threshold_enabled: true
## 硬盘使用率高于这个值的节点,则不会分配分片
cluster.routing.allocation.disk.watermark.low: "85%"
## 如果硬盘使用率高于这个值,则会重新分片该节点的分片到别的节点
cluster.routing.allocation.disk.watermark.high: "90%"
## 当前硬盘使用率的查询频率
cluster.info.update.interval: "30s"
## 计算硬盘使用率时,是否加上正在重新分配给其他节点的分片的大小
cluster.routing.allocation.disk.include_relocations: true
1.2:磁盘使用率控制及watermark水印上的设
基于磁盘的分片分配器确保所有节点都有足够的磁盘空间,而不会执行不必要的分片移动。
- cluster.routing.allocation.disk.threshold_enabled
是否开启水位控制,默认为true。设置为false禁用磁盘分配决定器。 - cluster.routing.allocation.disk.watermark.low
控制磁盘使用率的低水位线。它的默认值为85%。
允许主分片分配,禁止副本副本分配 - cluster.routing.allocation.disk.watermark.high
控制高水位线。它默认为90%,阻止分配所有分片到该节点。 - cluster.routing.allocation.disk.watermark.flood_stage
控制洪水阶段水印,默认为 95%,达到后该节点所有的索引被强制设置为只读索引,同时开始分配迁移。
配置示例,可以控制剩余的可用空间大小
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "100gb",
"cluster.routing.allocation.disk.watermark.high": "50gb",
"cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
"cluster.info.update.interval": "1m"
}
}
2:数据缓存设置
fielddata字段数据缓存主要在对字段进行排序或计算聚合时使用。它将所有字段值加载到内存中,以提供对这些值的基于文档的快速访问
indices.fielddata.cache.size:默认是无界的随便缓存
(静态)字段数据缓存的最大大小(例如30%,节点堆空间的最大大小)或绝对值例如12GB,
3:索引的写入缓存设置
索引缓冲区用于存储新索引的文档。填满后,缓冲区中的文档将写入磁盘上的某个段segment。是每个node的静态配置
以下设置是静态的,并且必须在集群中的每个数据节点上进行配置:
indices.memory.index_buffer_size
接受百分比或字节大小的值。默认为10%,表示10%分配给节点的总堆中的堆将用作所有分片之间共享的索引缓冲区大小。
indices.memory.min_index_buffer_size
如果将index_buffer_size百分比指定为,则此设置可用于指定绝对最小值。默认为48mb。
indices.memory.max_index_buffer_size
如果将index_buffer_size百分比指定为,则此设置可用于指定绝对最大值。默认为无界。
4:读写等线程池配置优化
线程池设置有get,write,search等线程池的设置,一般是根据服务器的核数计算出来的,不需要手动更改。
of allocated processors:服务器核数
get:获取操作。线程池类型fixed 的大小为# of allocated processors,queue_size为1000
write
于单文档索引/删除/更新和批量请求。线程池类型fixed,队列大小queue_size为10000(7.9版本以前为1000,经常会写不过啦),线程并发数of allocated processors
不过也可以通过覆盖处理器数量进行改变服务器核数的设置,若集群识别核数错误时可以进行显示指定
node.processor
5:其他重要配置
5.1:数据和日志存储路径设置:path.data 和 path.logs
path.data设置可以被设置为多条路径,在这种情况下,所有的路径将被用于存储数据(虽然属于单个碎片文件将全部存储相同的数据路径上),比如多磁盘多路径
path.logs:日志存储路径
5.2:集群名cluster.name
通过识别cluster.name。发现新加入集群的其他服务器,elasticsearch。所以不同的集群名字要区分
5.3:堆内存设置
Xmx和Xms占用不超过物理内存50%且不超过32G
Elasticsearch可用的堆越多,它可用于其内部缓存的内存就越多
6:系统设置
6.1:文件句柄数设置
修改系统文件:vi /etc/sysctl.conf
添加
vm.max_map_count=655360
保存退出:执行 sysctl -p 使配置生效
也可使用如下命令临时修改,生产不建议
sudo su
ulimit -n 65535
su elasticsearch