您的位置:

深入了解elasticsearch启动

一、前言

elasticsearch是一个免费、开源、分布式的搜索和分析引擎。elasticsearch是建立在Apache Lucene™软件库之上的,它提供了一个分布式多用户能力的全文搜索引擎。elasticsearch是RESTful的(基于HTTP协议),它内部所有的操作都是JSON格式的。因此,它可以通过HTTP来访问,从而可以在浏览器、命令行等多种环境下使用。

二、elasticsearch启动流程

elasticsearch启动过程中,其实会进行很多的初始化操作,如:读取配置文件,创建必要的线程池,创建数据存储目录等,最后启动各个组件,如:http服务,transport服务,jvm监控等。

我们可以通过以下步骤来了解elasticsearch启动的整个过程:

    Elasticsearch.java -> main
        |
        V
    Elasticsearch.java -> start
        |
        V
    Node.java -> start
        |
        V
    Node.java -> doStart
        |
        V
    InternalElasticsearchBuild.java -> start
        |
        V
    HttpServerTransport.java -> start
        |
        V
    TransportService.java -> start
        |
        V
    HttpServerTransport.java -> bindServer -> Jetty6HttpServerTransport.java -> startJetty
        |
        V
    Node.java -> onJoinClusterService -> LifecycleService.java -> start

三、启动脚本及配置

在启动elasticsearch时,我们需要使用以下命令:

    ./bin/elasticsearch

在bin目录下,还有其他启动脚本,如:

    bin/elasticsearch-plugin : 安装插件
    bin/elasticsearch-keystore: 创建keystore
    bin/elasticsearch-certutil: 证书相关操作

elasticsearch启动时还需要配置文件,它们位于config目录下。其中,elasticsearch.yml是主配置文件,log4j2.properties是日志配置文件,jvm.options是jvm参数文件。

另外,我们还可以通过在config目录下创建scripts目录,来添加一些启动时的自定义脚本,如:

    config/scripts -> setup_system_check -> 配置节点检查脚本
    config/scripts -> setup -> 安装时的脚本

四、启动参数

在启动elasticsearch时,我们可以使用一些启动参数来指定其行为。例如,通过以下命令启动elasticsearch时,可以指定监听的IP和端口:

    ./bin/elasticsearch -E http.host=0.0.0.0 -E http.port=9200

elasticsearch一共有两类启动参数:

  • -E参数:用来设置elasticsearch的属性值,如 http.host=127.0.0.1。
  • -D参数:用来设置jvm的属性值,如 -Djava.net.preferIPv4Stack=true。

五、集群启动

在elasticsearch中,我们可以将多个节点组成一个集群来提高搜索和索引的速度。启动elasticsearch集群时,我们需要设置集群名称,如:

    ./bin/elasticsearch -E cluster.name=es_cluster

对于每个节点,我们还需要设置节点名称、数据路径、监听地址、是否为主节点等属性。

具体来说,可以在elasticsearch.yml中设置以下属性:

    node.name: "node-1"
    path.data: "/path/to/data"
    network.host: "0.0.0.0"
    http.port: 9200
    discovery.seed_hosts: ["host1:port1", "host2:port2"]
    cluster.initial_master_nodes: ["node-1", "node-2"]

六、启动过程中的错误处理

在启动elasticsearch时,有可能会发生各种错误。例如:

  • 端口被占用
  • 路径不存在
  • 配置文件格式错误
  • 内存不足

针对不同的错误,我们可以采取不同的措施。例如,如果端口被占用,我们可以修改http.port属性,如:

    ./bin/elasticsearch -E http.port=9201

如果路径不存在,我们需要创建相应的目录,如:

    mkdir /path/to/data

七、总结

通过以上对elasticsearch启动的分析和总结,我们了解了elasticsearch的启动流程、启动脚本、启动参数、集群启动以及启动过程中的错误处理。同时,我们还给出了一些示例代码,希望对大家学习elasticsearch有所帮助。