加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

mpj-v0_44踩坑(linux集群上的分布式计算框架)

发布时间:2022-09-30 06:02:36 所属栏目:Linux 来源:网络
导读: 最近琢磨了好几天mpj在集群上的部署问题,发现daemon进程可以正常启动,但是一旦使用-dev niodev启动集群运行时会出现错误:java.net.ConnectException: Connection refused

一开始以为是

最近琢磨了好几天mpj在集群上的部署问题,发现daemon进程可以正常启动,但是一旦使用-dev niodev启动集群运行时会出现错误:java.net.ConnectException: Connection refused

集群linux_linux高可用集群 方案_linux服务器集群搭建

一开始以为是权限问题,所以花费了一些时间配置两台服务器的无密码登录,但是即使是启用了双向无密码登录,依然会存在问题(linux集群无密码的登录只需要互相保存public key即可,将其导入authorized_keys中并赋予权限,操作很简单,顺便写了个脚本用于实现集群无密码登录一键配置)

一开始没有头绪,因此打开mpj的debug模式,找到mpjrun.sh的debug输出,发现localhost的socket连通后就终止了输出,猜测是远程服务器socket连接失败导致,因此去检查运行过程中是连接哪个port导致的错误

linux服务器集群搭建_linux高可用集群 方案_集群linux

由于正常输出了daemon启动的信息,所以一开始没有考虑是daemon启动脚本的问题,而是去思考执行脚本命令mpjrun.sh的问题,因此去查了它的源码。

linux高可用集群 方案_集群linux_linux服务器集群搭建

(前后不重要,只需要看红框部分内容)它使用了lib里的starter.jar启动,因此使用IDEA打开对应的jar包,查看MANIFEST.MF可以发现使用的Main-class是runtime.starter.MPJRun

linux服务器集群搭建_集群linux_linux高可用集群 方案

找到对应的class文件,为了知道它连接了哪个port,所以查找了log输出的位置,IDEA的ctrl + F很方便找到了对应的位置,看来是调用servSock.accept方法失败,socket的address不用考虑,主要是port,因此上方的SERVER_PORT很关键,只要找到它就能知道哪个port出问题了,因此一开始想修改这个read only的jar包,让它先输出socket的信息再卡死。在linux上先unzip后将class反编译为代码,之后重新打包,发现它连接了40002端口。

linux服务器集群搭建_linux高可用集群 方案_集群linux

这个40002端口哪来的呢,继续查找SERVER_PORT的赋值位置,发现它读取了文件中的内容进行赋值,文件其实就是mpiexpress.conf

linux高可用集群 方案_集群linux_linux服务器集群搭建

OK集群linux,打开mpiexpress.conf,文件也是很长一块,快速辨别信息,下面mpjrun果然使用了40002端口,那么按常理来说daemon进程在启动时应该会监听这个端口,以及上面写的两个40055与40052端口,但是问题就在这里~!!!

集群linux_linux服务器集群搭建_linux高可用集群 方案

使用相同的方法打开mpjboot命令的脚本,发现使用的jar包中启动mpjdaemon的程序只监管了前两个port,而最后面最关键的port没有被程序监听,这个可以在打开本机的port监控看到。这时候终于能解释清楚为什么出错了,就是这个端口没有被守护进程监管,所以会出现这个问题,因此手动修改源码,这个过程很复杂,需要参考v0_43版本的mpj_debug版本的源码进行修改,在其中加入对应的代码,此处不做说明,有关打包修改jar包花了我一天时间,简而言之就是v0_44版本的代码由于将通信全部使用NIO通道,而作者在守护进程往master发送输出信息时没有考虑已经采用别的port传输输出,导致子服务器发送消息因为没有daemon进程监听端口而出现permission denied的情况

集群linux_linux高可用集群 方案_linux服务器集群搭建

写详细说明太麻烦了,简而言之最好的办法就是避免使用v0_44版本的mpj,使用v0_43版本就好,但是最新版本有加速的改进,所以emmm,看个人选择,有需要可私戳我获得修改后的v0_44版本的daemonmanage.jar,由于只是个人修改,虽然暂未出现bug,不代表它是一个stable的版本,写下这些内容给其他使用mpj的小伙伴踩坑

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!