当前位置: 首页 > news >正文

【橘子ES】如何本地调试ES源码

一、简介

我们在研究一个中间件源码的时候,其实最好的办法就是编译他的源码,并且通过源码启动,然后这样可以在服务端进行debug,方便我们更加清晰的了解他的运行流程。
这里我们来编译启动一下Elasticsearch8.1.0的版本。

二、源码编译

1、在编译之前要准备好jdk17的环境,因为从es8之后jdk要求就是jdk17。
2、准备一个发行版的安装包,比如我们这里是8.1.0,那我们就下载一个8.1.0的版本。
发行版的作用是为我们的源码启动提供一些配置环境,比如配置文件,权限文件,jvm文件,等等那些你以前通过安装包启动时候需要的脚本和文件,这里依然需要。
3、idea最好是2024左右的,别太老了,不然会有一些奇怪的问题。
4、一个比较好的网络环境,因为我们要下载一些安装文件,或者可以配置国内的比如阿里的源都可以。
在准备好之后我们就通过git clone把源码拉下来,或者直接下载都可以,对好版本8.1.0即可。
然后用idea打开项目,选择好jdk,就把平时那几个需要配置jdk版本的地方都指向jdk17即可,除了常见的那几个地方一定要把setting下的gradle的java版本指定好。
在这里插入图片描述
执行 ./gradlew localDistro (注意jdk版本17)
编译完成后执行 导入项目 使用 idea open项目下的 build.gradle,等待编译结束(这里耗时会比较长)。中间失败的多执行几次就好。其余的想配置就配置一下gradle路径那些,不想配置就idea自己接管就好。

三、配置启动 elasticsearch

编译好之后,此时我们就来配置启动es。
我们需要创建一个启动配置,内容如下。
在这里插入图片描述
图中的vm参数需要详细讲解一下。

-Des.path.home=/Users/levi/develop/source_code/es_debug/elasticsearch-8.1.0
-Des.path.conf=/Users/levi/develop/source_code/es_debug/elasticsearch-8.1.0/config
-Djava.security.policy=/Users/levi/develop/source_code/es_debug/elasticsearch-8.1.0/config/elasticsearch.policy
-Dlog4j2.disable.jmx=true

我们这里配置了四行,其中-Dlog4j2.disable.jmx=true这个是jmx的
上面三行比较重要,-Des.path.home这个指向的是你刚才下载的发行版的路径,
-Des.path.conf这个指向你发行版的配置文件目录,你的源码会读取这里的配置,所以你可以在这下面的配置文件修改一些你的东西。因为我们这就是个单点的启动,最好把那些权限都关掉,不然害的配证书。比如我的config下面的配置文件如下:

cluster.name: my-application810
node.name: node-8101
network.host: 127.0.0.1
http.port: 9202 
xpack.security.enabled: false # 关闭https
xpack.security.transport.ssl.enabled: false # 关闭ssl

其余的jvm那些你也可以配置一下,源码启动就会按照那个jvm参数的内容去读取。

下面我们来说第三个配置-Djava.security.policy,es在启动的时候有很多jdk权限要开启,源码这里没有,我们需要自己创建一个新的.policy文件里面指定一下,也就是我的/Users/levi/develop/source_code/es_debug/elasticsearch-8.1.0/config/elasticsearch.policy这个发行版下面创建的。这个东西很麻烦,一开始我并不知道里面写啥,每次运行一次根据报错的信息一点一点的把权限加上去的。这里我给出我的一个内容。

grant {permission org.elasticsearch.secure_sm.ThreadPermission "*";permission java.lang.RuntimePermission "*";permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "getenv.AWS_RETRY_MODE"; permission org.elasticsearch.SpecialPermission "*"; permission javax.management.MBeanTruxtPermission "register";permission javax.management.MBeanServerPermission "createMBeanServer";permission java.lang.RuntimePermission "createClassLoader";permission java.lang.RuntimePermission "getClassLoader";permission java.lang.RuntimePermission "setContextClassLoader";permission org.elasticsearch.ThreadPermission "modifyArbitraryThreadGroup";permission java.lang.management.ManagementPermission "monitor";permission java.util.PropertyPermission "es.distribution.flavor", "read";permission java.util.PropertyPermission "*", "read";permission java.lang.RuntimePermission "getProtectionDomain";
};

此时我们就配置完了jvm参数。此时就可以启动了。

四、启动遇到的问题

1、版本不一致

如果你下载的发行版和你的源码版本差异比较多,那就会报版本错误,此时你最好去下一个一致的版本。或者要是版本差异不大,可以直接在源码中修改版本,让他强行读取。org.elasticsearch.Version这个类里面的CURRENT和你的发行版保持一致即可,但是这样可能有兼容性问题,我建议还是下一个一致的版本比较到位。

2、Unknown codebases

这是一些权限问题,你可以根据报错的Unknown codebases内容到resources/org/elasticsearch/bootstrap/security.policy这个文件中把对应的grant部分注释了,也可以像我一样,直接全删了,不影响你的启动。因为他是一些内部的校验。
在这里插入图片描述
至此,我们要做的就都ok了,启动之后。通过浏览器访问一下。
在这里插入图片描述
没有问题。

3、高版本

其实我一开始是想编译8.16.1这个版本的,因为我日常用的就是这个版本,但是从8.3.0之后的版本启动流程改了很多,有些地方我没摸准,就启动失败了,后续如果编译好了,再补充高版本的。

http://www.dtcms.com/a/483521.html

相关文章:

  • Leetcodde 3713. Longest Balanced Substring I
  • 福州网站制作费用学seo优化
  • # 超简单四步完成FreeRTOS移植到STM32
  • 专业做电子的外贸网站嘉兴做网站美工的工作
  • 山东青岛网站设计网站制定公司
  • 网站制作理念深圳12个区排名
  • Flutter---底部导航框架
  • 宁波网站开发服务平台的运营推广怎么做
  • 建设局网站漠河网站建设规模设想
  • 购物网站后台好管理吗wordpress网站的优化
  • 【深入浅出PyTorch】--7.1.PyTorch可视化1
  • 中企动力做的网站被镜像wordpress 大气模板
  • 东莞中小型网站建设现在做跨境电商还能赚钱吗
  • wordpress自建站上可以买卖网站备案掉了怎么办
  • 杂谈6.0
  • C语言--预处理
  • 电子商务网站建设核心是河南省城乡建设厅网站首页
  • 个人网站备案名称咋制作网站
  • 做网站需要考虑什么金融网站开发文档
  • 白细胞偏高:揪出原因,科学应对
  • 【开题答辩过程】以《助农电商信息管理系统的设计与实现》为例,不会开题答辩的可以进来看看
  • HT4822立体声耳机放大器:打造高品质音频
  • 使用NVIDIA TAO 6和DeepStream 8构建实时视觉检测管道
  • Java并发机制的底层实现原理:从CPU到JVM的全面解析
  • 判断web代理服务未生效以及测试服务是否生效
  • 视觉检测设备-AI视觉质量检测方案提升效率
  • 原生多模态AI架构:统一训练与跨模态推理的系统实现与性能优化
  • 荣耀手机商城官方网站入口网站制作公司深圳
  • 网站内容运营免费建网站的服务器
  • Spring Boot 集成免费的 EdgeTTS 实现文本转语音