Elasticsearch 集群配置/分词问题/root 用户问题

本文深入探讨Elasticsearch配置要点,包括集群、节点、网络、日志等关键参数设置,及ik分词器安装和root用户问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Elasticsearch 配置问题

elasticsearch的config文件夹里面有两个配置文件:elasticsearch.ymllogging.yml,第一个是es的基本配置文件,第二个是日志配置文件,es也是使用log4j来记录日志的,所以logging.yml里的设置按普通log4j配置文件来设置就行了。

这些文件位于config目录,目录的默认位置是 $ES_HOME/config/。通过Debian和RPM安装的配置文件的目录是 /etc/elasticsearch/

可通过以下的命令修改配置文件的位置:

./bin/elasticsearch -Epath.conf=/path/to/my/config/

下面主要讲解下elasticsearch.yml这个文件中可配置的东西。

cluster.name:elasticsearch
# 配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,
# 如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。

node.name:"node-1"
# 节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字。

node.master:true
# 指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master。

node.data:true
# 指定该节点是否存储索引数据,默认为true。

index.number_of_shards:5
# 设置默认索引分片个数,默认为5片。

index.number_of_replicas:1
# 设置默认索引副本个数,默认为1个副本。

path.conf:/path/to/conf
# 设置配置文件的存储路径,默认是es根目录下的config文件夹。

path.data:/path/to/data
# 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开,例:
# 所有的路径都会被用来存储数据(但所有属于同一个分片的文件,都会全部保存到同一个数据路径)
path.data:/path/to/data1,/path/to/data2

path.work:/path/to/work
# 设置临时文件的存储路径,默认是es根目录下的work文件夹。

path.logs:/path/to/logs
# 设置日志文件的存储路径,默认是es根目录下的logs文件夹

path.plugins:/path/to/plugins
# 设置插件的存放路径,默认是es根目录下的plugins文件夹

bootstrap.mlockall:true
# 设置为true来锁住内存。因为当jvm开始swapping时es的效率会降低,所以要保证它不swap,
# 可以把ES_MIN_MEM和ES_MAX_MEM两个环境变量设置成同一个值,并且保证机器有足够的内存分配给es。
# 同时也要允许elasticsearch的进程可以锁住内存,Linux下可以通过`ulimit-l unlimited`命令。

network.bind_host:192.168.0.1
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。

network.publish_host:192.168.0.1
# 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址。

network.host:192.168.0.1
# 这个参数是用来同时设置bind_host和publish_host上面两个参数。

transport.tcp.port:9300
# 设置节点间交互的tcp端口,默认是9300。

transport.tcp.compress:true
# 设置是否压缩tcp传输时的数据,默认为false,不压缩。

http.port:9200
# 设置对外服务的http端口,默认为9200。

http.max_content_length:100mb
# 设置内容的最大容量,默认100mb

http.enabled:false
# 是否使用http协议对外提供服务,默认为true,开启。

gateway.type:local
# gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,
# Hadoop的HDFS,和amazon的s3服务器,其它文件系统的设置方法下次再详细说。

gateway.recover_after_nodes:1
# 设置集群中N个节点启动时进行数据恢复,默认为1。

gateway.recover_after_time:5m
# 设置初始化数据恢复进程的超时时间,默认是5分钟。

gateway.expected_nodes:2
# 设置这个集群中节点的数量,默认为2,一旦这N个节点启动,就会立即进行数据恢复。

cluster.routing.allocation.node_initial_primaries_recoveries:4
# 初始化数据恢复时,并发恢复线程的个数,默认为4。

cluster.routing.allocation.node_concurrent_recoveries:2
# 添加删除节点或负载均衡时并发恢复线程的个数,默认为4。

indices.recovery.max_size_per_sec:0
# 设置数据恢复时限制的带宽,如入100mb,默认为0,即无限制。

indices.recovery.concurrent_streams:5
# 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认为5。

discovery.zen.minimum_master_nodes:1
# 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)

discovery.zen.ping.timeout:3s
# 设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错。

discovery.zen.ping.multicast.enabled:false
# 设置是否打开多播发现节点,默认是true。

discovery.zen.ping.unicast.hosts:["host1", "host2:port","host3[portX-portY]"]
# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
  1. 配置文件的格式(Config file format)

    配置文件使用的格式是 YAML 。下面例子修改了数据和日志目录:

    path:
        data: /var/lib/elasticsearch
        logs: /var/log/elasticsearch
    

    配置也可以使用平面化的方式:

    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    
  2. 环境变量替换(Environment variable subsitution)

    在配置文件中,可以通过 ${...} 符号引用环境变量,例如:

    node.name:    ${HOSTNAME}
    network.host: ${ES_NETWORK_HOST}
    
  3. 提示输入配置(Prompting for settings)

    如果你不想把配置写到配置文件中,你可以在配置的值中输入 ${prompt.text}${prompt.secret} 符号,并且以前景的方式运行elasticsearch。${prompt.secret} 不会把你输入的内容显示到终端上(相当于输入密码时的***功能吧),${prompt.text} 可以让你在终端上看到你输入的内容,例如:

    node:
      name: ${prompt.text}
    

    当启动elasticsearch的时候,终端会提示你输入配置值:

    Enter value for [node.name]:
    

    注意,如果elasticsearch的配置文件使用 ${prompt.text}${prompt.secret} 作为配置值并且以后台的形式运行,那么它将启动失败。

  4. 设置默认配置(Setting default settings)

    可以在命令行中使用default.前缀指定新的默认值。当配置文件没有指定该值的时候就会使用默认值。

    例如,如果elasticsearch用以下命令运行:

    ./bin/elasticsearch -Edefault.node.name=My_Node
    

    如果没有在命令行重写 es.node.name 或在配置文件中重写 node.namenode.name的值将会是 My_Node

  5. 日志配置(Logging configuration)

    elasticsearch 使用 log4j2 来记录日志。日志的配置文件是 log4j2.properties 。elastisearch 暴露了 ${sys:es.logs} 属性, Log4j2 可以在配置文件引用它动态指定日志文件的位置。在运行的时候, ${sys:es.logs} 将会被替换成以当前集群名称作为前缀的路径。

    例如,如果你的日志目录 path.log/var/log/elasticsearch 并且 你的集群名字是 prodution ,那么 ${sys:es.logs} 将会被替换成 /var/log/elasticsearch/production

    appender.rolling.type = RollingFile【1】
    appender.rolling.name = rolling
    appender.rolling.fileName = ${sys:es.logs}.log 【2】
    appender.rolling.layout.type = PatternLayout
    appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n
    appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log【3】 
    appender.rolling.policies.type = Policies
    appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 【4】
    appender.rolling.policies.time.interval = 1 【5】
    appender.rolling.policies.time.modulate = true 【6】
    
    • 使用 RollingFile 文本追加器来保存日志
    • 把日志写到 /var/log/elasticsearch/production.log
    • 设置日志命名规则 /var/log/elasticsearch/production-yyyy-MM-dd.log
    • 使用基于时间的轮换策略
    • 每天轮换一次日志文件
    • 日志轮换是以天作为分界(而不是相隔24小时)

    如果在 appender.rolling.filePattern 中追加 .gz 或者 .zip 后缀,那么当日志轮换的时候,旧的日志将会被压缩处理。

    可以在elasticsearch的 config 的不同子目录下使用多个名字是 log4j2.properties 的配置文件(加载配置文件的时候会进行合并处理)。这样做可以让插件自定义日志。日志部分包含java包和相应的日志级别。 appender 部分包含日志的储存位置。在 Log4j documentation 可以找到关于如何自定义日志和其他 appenders 的相关信息。

  6. 弃用日志(Deprecation logging)

    除了常规的日志,elasticsearch允许你记录弃用的特性。也就是说由于elasticsearch的升级,有些旧的特性可能会被弃用,当你的配置文件使用到这些弃用的特性时,就会写日志到弃用日志文件,好让你了解elasticsearch做了哪些改动。 这让你更早地确定你将来是否需要迁移某些功能(因为过期的特性不会马上被移除,但未来还是会移除,你可以在未移除之前,使用新的方案代替被移除的特性)。默认地,弃用日志记录对 WARN 级别开启,在这个级别的所有弃用日志消息都会被输出到弃用日志中。

    logger.deprecation.level = warn
    

    使用这个配置将会创建一个轮转策略的弃用日志文件到你的日志目录。你需要定期检查这个文件,特别是在准备更新一个大版本的时候。

    默认使用轮换日志保存策略,日志大于1GB后被压缩,最多创建5个日志文件(4个轮换日志,一个在用的日志)。

    你可以通过以下命令禁用弃用日志:

     logger.deprecation.level = error
    
  7. Elasticsearch 常用配置
    path.data  and path.logs
 
    cluster.name
  
    node.name
 
    bootstrap.memory_lock
  
    network.host

    discovery.zen.ping.unicast.hosts

    discovery.zen.minimum_master_nodes
  • path.data and path.logs

    如果您正在使用 .zip.tar.gz 文件归档, datalogs 目录在 $ES_HOME 下。如果这些重要文件夹保留在默认位置,则Elasticsearch升级到新版本时,很有可能被删除。

    在生产中使用,肯定要更改数据和日志文件夹的位置:

    path:
      logs: /var/log/elasticsearch
      data: /var/data/elasticsearch
    

    RPM和Debian的安装包已经使用了自定义的data和logs路径。

    path.data 选项可以同时指定多个路径,所有的路径都会被用来存储数据(但所有属于同一个分片的文件,都会全部保存到同一个数据路径)

    path.data:/path/to/data1,/path/to/data2
    
  • cluster.name

    某个节点只有和集群下的其他节点共享它的 cluster.name 才能加入一个集群。默认是elasticsearch,但是应该修改为更恰当的,用于描述集群目的的名称。

    cluster.name: logging-prod
    
  • node.name

    默认情况下,Elasticsearch 将使用随机生成的uuid的前7个字符作为节点id,请注意,节点ID是持久化的,并且在节点重新启动时不会更改,因此默认节点名称也不会更改。

    推荐为节点配置更有意义的名称。

    node.name: prod-data-2
    

    也可以使用服务器的 HOSTNAME 作为节点的名称。

    node.name: ${HOSTNAME}
    
  • bootstrap.memory_lock

    由于当jvm开始swapping时es的效率会降低,所以要保证它不swap,这对节点健康极其重要。实现这一目标的一种方法是将 bootstrap.memory_lock 设置为 true

    要使此设置有效,首先需要配置其他系统设置。有关如何正确设置内存锁定的更多详细信息,请参阅启用bootstrap.memory_lock

  • network.host

    默认情况下,Elasticsearch 仅仅绑定回环地址,比如 127.0.0.1[::1] 。这足以在服务器上运行单个开发节点。

    事实上,一台机器上可以启动多个节点。这可对于测试Elasticsearch集群的能力很有用,但不推荐用于生产。

    为了与其他服务器上的节点进行通信并形成集群,你的节点将需要绑定到非环回地址。虽然这里有很多网络相关的配置,但通常只需要配置一下 network.host

    network.host: 192.168.1.10
    

    network.host 设置一些特殊值也是可以的,比如 _local_ , _site_ , _global_ip4 , ip6 。更多详情请参考 “Special values for network.host

    一旦自定义设置了 network.host ,Elasticsearch 会假定你正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级到异常。有关详细信息,请参阅“Development mode vs production mode”

  • discovery.zen.ping.unicast.hosts

    开箱即用,没有任何网络配置情况下,Elasticsearch将绑定到可用的回环地址,并会扫描端口9300至9305以尝试连接到同一服务器上运行的其他节点。这提供了一个自动集群体验,而无需执行任何配置。

    如果想和其他服务器的节点形成一个集群,你必须提供集群中其它节点的列表。可以通过以下方式指定:

     discovery.zen.ping.unicast.hosts:["host1", "host2:port","host3[portX-portY]"]
    

    如果没有指定端口,将默认为 transport.profiles.default.port 并回退 transport.tcp.port

    如果输入的是主机名,被解析成多个地址,将会尝试连接所有地址。

  • discovery.zen.minimum_master_nodes

    为了防止数据丢失, discovery.zen.minimum_master_nodes 配置至关重要, 以便每个候选主节点知道为了形成集群而必须可见的最少数量的候选主节点。

    没有这种设置,遇到网络故障的群集有可能将群集分成两个独立的群集(脑裂), 这将导致数据丢失。更详细的解释在“Avoiding split brain with minimum_master_nodes 中提供。

    为了避免脑裂,候选主节点的数量应该设置为:

    (master_eligible_nodes / 2) + 1
    

官方配置文档请点击

elasticsearch 检查配置升级更详细介绍请参阅

2. Elasticsearch ik 分词安装

在 plugins 下建立目录 ik ,然后下载 ik 分词器的 zip 包,直接解压到 ./ik 路径里面就行

3. Elasticsearch root 用户问题

elasticsearch 启动时会出现提示不能以管理员 root 身份启动

  # 建立用户组 elsearch
  groupadd elsearch
  # 建立新的用户 elsearch 
  useradd elsearch -g elsearch -p elsearch
  # 将目录 elasticsearch 授权给 elsearch 
  chown -R elsearch:elsearch elasticsearch 
  # 切换用户 elsearch 即可正常启动 elasticsearch
  su elsearch
  # elasticsearch 后台启动
  ./bin/elasticsearch -d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值