记录每一次的分享与讨论,
为了下一次的碰撞而准备。

源码分析-源码启动

准备工作

  • 基于源码构建发行包
  • 设置启动环境(配置文件、ES模块依赖等、第三方组件依赖)
  • 基于源码启动服务

基于源码构建发行包

默认使用Elasticsearch 源码中的 7.X分支。

  • ./gradlew :distribution:archives:linux-tar:assemble --parallel
  • 发行包位于: $ES_SOURCE_HOME/distribution/archives/linux-tar/build/distributions/

设置启动环境

基于源码启动时,所需要加载的配置文件,组件依赖以及插件将从发行包中取出,第三方插件依赖暂时忽略。

  • 把发行包中的config、lib、modules 解压到指定位置
    发行包目录结构
  • 修改ES配置文件 (config/elasticsearch.yml)
 cluster.name: mandheling-offline
 node.name: DaoLi
 path.data: /data/store/es-7.1.0_mandheling-offline
 path.logs: /data/logs/es-7.1.0_mandheling-offline
 bootstrap.memory_lock: true
 network.host: 192.168.163.131
 discovery.seed_hosts: ["192.168.163.131:9300"]
 cluster.initial_master_nodes: ["192.168.163.131"]
 action.destructive_requires_name: true
 http.max_initial_line_length: 4kb
 http.max_header_size: 8kb
 http.compression: true
 http.compression_level: 6
 http.cors.enabled: true
 http.cors.allow-origin: "*"
 http.cors.allow-methods: OPTIONS,HEAD,GET,POST,PUT,DELETE
 http.cors.allow-headers: X-Requested-With,Content-Type,Content-Length,Authorization,Content-Encoding,Accept-Encoding

基于源码启动服务

找到源码中Elasticsearch.java类,通过执行main方法的方式启动服务。

  • 运行> java Elasticsearch
    • 问题一:the system property [es.path.conf] must be set
      • 解决方法: 运行时指定参数 (e.g. -Des.path.conf=/data/repository/elasticsearch/es-7.1.0_mandheling-offline/config)
    • 问题二:Exception in thread “main” java.lang.IllegalStateException: path.home is not configured
      • 解决方法: 运行时指定参数 (e.g.-Des.path.home=/data/repository/elasticsearch/es-7.1.0_mandheling-offline)
    • 问题三:ERROR Could not register mbeans java.security.AccessControlException: access denied (“javax.management.MBeanTrustPermission” “register”)
      • 解决方法: 运行时指定参数 (e.g.-Dlog4j2.disable.jmx=true)
    • 问题四:java.lang.NoClassDefFoundError: org/elasticsearch/plugins/ExtendedPluginsClassLoader
      • 解决方法:找到 IntelliJ Idea ->Run ->Edit Configurations -> Include dependencies with “Provided” Scope 打钩
        Include dependencies with "Provided" Scope
    • 问题五:org.elasticsearch.bootstrap.StartupException: java.security.AccessControlException: access denied (“java.lang.RuntimePermission” “createClassLoader”)
      • 解决方法: 在config目录下新增一个文件,java.policy
      • 文件内容如下 grant {permission java.lang.RuntimePermission "createClassLoader";};
      • 运行时指定参数 (e.g. -Djava.security.policy=/data/repository/elasticsearch/es-7.1.0_mandheling-offline/config/java.policy)
    • 问题六: initial heap size [132120576] not equal to maximum heap size [2086666240]; this can cause resize pauses and prevents mlockall from locking the entire heap
      • 解决方法: 运行时指定参数 (e.g. -Xms512m -Xmx512m)
    • 问题七: bootstrap checks failed

最终源码启动时参数

ES_HOME=/data/repository/elasticsearch/es-7.1.0_mandheling-offline/

-Xms512m
-Xmx512m
-Des.path.home=\$ES_HOME
-Des.path.conf=\$ES_HOME/config
-Dlog4j2.disable.jmx=true
-Djava.security.policy=$ES_HOME/config/java.policy

未经允许不得转载:Elasticsearch Club » 源码分析-源码启动

分享到:更多 ()
希望每个得到帮助的朋友,能够赞助一波:

    

评论 抢沙发

评论前必须登录!