Elasticsearch 有三个配置文件:
- elasticsearch.yml: Elasticsearch 配置文件
- jvm.options: Elasticsearch JVM 配置文件
- log4j2.properties: Elasticsearch 日志配置文件
源码安装方式配置文件位于:安装目录/config目录下
RPM安装方式位于:/etc/elasticsearch目录下
下面介绍一下常用的配置项
elasticsearch.yml
下面是一些常用的配置项
# ---------------------------------- Cluster -----------------------------------
# 集群的名称,不同集群唯一
cluster.name: my-cluster
# 节点的名称,同一集群唯一
node.name: node-1
#设置为true(默认值)的节点,这使它有资格 被选为主 (master)节点,主节点可以控制集群
node.master: true
#设置为true(默认值)的节点。数据节点保存数据并执行与数据相关的操作,如 CRUD、搜索和聚合。
node.data: true
# ----------------------------------- Paths ------------------------------------
# 数据文件的存储路径,可以设置为多个路径,在这种情况下,所有路径都将用于存储数据(尽管属于单个分片的文件都将存储在同一数据路径上),主要要给ES用户权限
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
# 日志文件的存储路径,启动日志和报错日志都在这个目录下
path.logs: /path/to/logs
# ---------------------------------- Network -----------------------------------
# 用于指定 Elasticsearch 监听的网络接口地址,默认127.0.0.1 即只允许本地访问,建议指定为具体IP或0.0.0.0
network.host: 0.0.0.0
# HTTP 通信使用的端口号(默认为 9200),需要开放防火墙端口
http.port: 9200
# 节点间通信使用的 TCP 端口号(默认为 9300),集群环境需要开放端口
transport.tcp.port: 9300
# --------------------------------- Discovery ----------------------------------
# 初始主机节点的主机名或 IP 地址,用于集群自动发现,一般为初始集群中node.master为true的节点
discovery.seed_hosts: [ "host1", "host2","ip3" ]
#用于指定集群第一次启动时的初始主节点列表,注意要使用节点的名称,比如node-1,一般为初始集群中node.master为true的节点
cluster.initial_master_nodes: [ "node-1", "node-2","node-3" ]
# ---------------------------------- Gateway -----------------------------------
# 节点数达到指定数量后,才开始恢复数据(默认为 3),在 7.7.0 中废弃,将在 8.0 中移除。你应该使用 gateway.recover_after_data_nodes 代替之
gateway.recover_after_nodes: 3
# 节点数达到指定数量后,才开始恢复数据
gateway.recover_after_data_nodes: 3
#[7.7.0] 在 7.7.0 中废弃,将在 8.0 中移除。 你应该使用 gateway.expected_data_nodes 代替之。预期在集群中的主节点的数量。一旦预期数量的主节点加入集群,本地分片的恢复就会开始。默认为 0。
gateway.expected_nodes: 3
# 预期在集群中的数据节点的数量。一旦预期数量的数据节点加入集群,本地分片的恢复就会开始。默认为 0。
gateway.expected_data_nodes: 3
# ---------------------------------- Memory ------------------------------------
# 是否锁定 Elasticsearch 进程的内存(需要设置文件系统权限)
bootstrap.memory_lock: true
# ---------------------------------- Various -----------------------------------
# 在执行危险操作(如删除索引)时,需要显式指定操作名称(默认为 true)
action.destructive_requires_name: true
# ---------------------------------- Security ----------------------------------
# 是否启用 X-Pack 安全功能(默认为 false),当将xpack.security.enabled设置为true时,Elasticsearch 将启用安全功能,包括身份验证、授权、加密通信等,用于启用或禁用 API 密钥身份验证方式
xpack.security.enabled: false
# 是否启用 API 密钥认证(默认为 false)
xpack.security.authc.api_key.enabled: false
# ---------------------------------- Logging ----------------------------------
# 日志级别设置(可选:trace, debug, info, warn, error, fatal),默认情况下,它的值是info
logger.org.elasticsearch.transport: debug
配置JVM内存
不建议修改jvm.options文件,建议使用自定的jvm配置文件,进入安装目录/config/jvm.options.d目录,
切换为es用户
vi jvm.custom.options
填入下面的内容,保存重启即可
-Xms3g
-Xmx3g
Elasticsearch 将根据 jvm.options 中设置的 Xms(最小堆大小) 和 Xmx(最大堆大小) 来分配整个堆。 你应该将这两个设置设置为彼此相等。
日志
Elasticsearch 使用 Log4j 2 进行日志记录。 Log4j 2 可以使用 log4j2.properties 文件进行配置。
es提供了3个属性,分别是:${sys:es.logs.base_path}, {sys:es.logs.cluster_name}和{sys:es.logs.node_name}。这几个属性可以在配置文件中使用,用来确定文件的路径。
- ${sys:es.logs.base_path}为日志配置路径。
- ${sys:es.logs.cluster_name}为集群名称。
- ${sys:es.logs.node_name}为节点名称, 前提是在配置文件中设置过。
如果你的path.logs为/var/log/elasticsearch,你的集群名称为production,那么{sys:es.logs.base_path}会解析成/var/log/elasticsearch,{sys:es.logs.base_path}{sys:file.separator}{sys:es.logs.cluster_name}.log将被解析为/var/log/elasticsearch/production.log
日志模版示例:
######## Server JSON ############################
# 日志滚动类型为RollingFile
appender.rolling.type = RollingFile
# 名称
appender.rolling.name = rolling
# 日志文件名为/var/log/elasticsearch/production.json
appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_server.json
# 使用json布局
appender.rolling.layout.type = ESJsonLayout
# 会在日志输出中有这个标识,如果有解析不同类型的日志时,可以用来区分。
appender.rolling.layout.type_name = server
# 文件压缩之后的名称,%i表示构建的数量,是递增的
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.json.gz
appender.rolling.policies.type = Policies
# 使用时间滚动策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 每天滚动
appender.rolling.policies.time.interval = 1
# 以天为标准,输出日志文件
appender.rolling.policies.time.modulate = true
# 基于大小滚动策略
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
# 日志滚动大小,当达到这个值时进行文件滚动
appender.rolling.policies.size.size = 256MB
# 删除策略
appender.rolling.strategy.type = DefaultRolloverStrategy
#
appender.rolling.strategy.fileIndex = nomax
# 使用删除类型
appender.rolling.strategy.action.type = Delete
# 路径配置
appender.rolling.strategy.action.basepath = ${sys:es.logs.base_path}
# 符合这个条件的文件
appender.rolling.strategy.action.condition.type = IfFileName
#删除那些日志文件
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
# 当日志文件数超过该值时,进行删除
appender.rolling.strategy.action.condition.nested_condition.type = IfAccumulatedFileSize
# 压缩日志的大小条件是2 GB
appender.rolling.strategy.action.condition.nested_condition.exceeds = 2GB
################################################
如果你想保留一定时间的日志,那么可以使用滚动删除策略。
# 滚动删除策略
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 = IfFileName
appender.rolling.strategy.action.condition.glob = ${sys:es.logs.cluster_name}-*
# 满足什么条件触发
appender.rolling.strategy.action.condition.nested_condition.type = IfLastModified
appender.rolling.strategy.action.condition.nested_condition.age = 7D