任务调度中心使用:Elastic Job Lite v2.1.6,应用主要涉及部署容器问题,部署步骤及过程如下:
一. 版本选取
项目中目前使用的是Elastic Job Lite v2.1.6,对应包:elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar。
二. 启动
在终端或堡垒机上找到已上传的Elastic Job包,执行:tar -zxvf java.tar.gz elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar
进入已解压的文件目录的bin目录下,执行:nohup ./start.sh &
理想情况下执行者命令能把服务起来,但是在在实际过程中
第一个错
sh: ./start.sh: /bin/bash^M: bad interpreter: 没有那个文件或目录
经查着错的主要原因是start.sh文件是原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。
解决办法:
linux下执行shell脚本时报错:-bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory。
原因是windows下的文件是dos格式,即每一行结尾以\r\n来标识,而linux下的文件是unix格式,行尾则以\n来标识。
查看文件格式有三种方法:
1.cat -A <filename>,如果输出结果中行末尾是^M$,则是dos格式,如果行末尾只是$,则是unix格式。
2.vim <filename>,编辑文件,执行“:set ff”,若执行结果为fileformat=dos则为dos格式,若执行结果为fileformat=unix则为unix格式。
3.od -t x1 <filename>,以16进制查看文件,若输出结果中存在“0d 0a”则为dos格式,如果只有“0a”则为unix格式。其中“0d”即为回车符“\r”,“0a”即为换行符“\n”。
修改文件格式有三种方式:
1.sed -i "s/\r//" <filename>或sed -i "s/^M//" <filename>,直接将回车符替换为空字符串。
2.vim <filename>,编辑文件,执行“: set ff=unix”,将文件设置为unix格式,然后执行“:wq”,保存退出。
3.dos2unix <filename>或busybox dos2unix <filename>,如果提示command not found,可以使用前两种方法。
第二个错,再执行
nohup ./start.sh &,这次执行报错:./start.sh: line 34: java: command not found
查看文件的34行是:java -classpath ${LIB_DIR}:. ${CONSOLE_MAIN} $port$
看是JDD环境设置不对,
解决办法:
在执行脚本上加入如下配置即可
#!/bin/bash
JAVA_HOME=/export/servers/jdk1.8.0_20
export PATH=$PATH:$JAVA_HOME/bin
第三个错,再执行nohup ./start.sh &,这次执行报错(自己把elastic端口改成了80,其它端口不对外开放):
[INFO ] 2021-03-04 08:31:16,120 --main-- [io.elasticjob.lite.lifecycle.restful.RestfulServer] Elastic Job: Start RESTful server
[INFO ] 2021-03-04 08:31:16,140 --main-- [org.eclipse.jetty.server.Server] jetty-8.1.19.v20160209
[WARN ] 2021-03-04 08:31:16,308 --main-- [org.eclipse.jetty.util.component.AbstractLifeCycle] FAILED SelectChannelConnector@0.0.0.0:80: java.net.BindException:
地址已在使用
java.net.BindException: 地址已在使用
at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_20]
at sun.nio.ch.Net.bind(Net.java:436) ~[na:1.8.0_20]
at sun.nio.ch.Net.bind(Net.java:428) ~[na:1.8.0_20]
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214) ~[na:1.8.0_20]
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_20]
at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:187) ~[jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209]
at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:316) ~[jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209]
at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:265) ~[jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209
]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) [jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209]
at org.eclipse.jetty.server.Server.doStart(Server.java:293) [jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) [jetty-all-server-8.1.19.v20160209.jar:8.1.19.v20160209]
at io.elasticjob.lite.lifecycle.restful.RestfulServer.start(RestfulServer.java:84) [elastic-job-lite-lifecycle-3.0.0.M1-SNAPSHOT.jar:na]
at io.elasticjob.lite.lifecycle.restful.RestfulServer.start(RestfulServer.java:62) [elastic-job-lite-lifecycle-3.0.0.M1-SNAPSHOT.jar:na]
at io.elasticjob.lite.console.ConsoleBootstrap.main(ConsoleBootstrap.java:61) [elastic-job-lite-console-3.0.0.M1-SNAPSHOT.jar:na]
就其原因是容器 80端口已经被Nginx占用,并且,Linux系统不允许非root账号使用1024以下的端口。
解决办法:先把start.sh端口号改成其默认8899,然后,
Linux系统不允许非root账号使用1024以下的端口,所以Jetty要使用80端口启动只有两个方法,或者使用root,账号启动,或者使用iptables做本地端口映射。由于使用root账号启动Jetty会存在安全隐患,不推荐这么做。在本地做端口映射看起来是最合理的做法。iptables直接在网卡上做的四层端口映射,效率会比Nginx的七层代理要高很多。下面来聊聊怎么使用iptables做本地端口映射。
1.使用iptables查看本地的策略
iptables -L -n -v
可以查看所有非nat的本地路由策略,只能看到INPUT\OUTPUT\FORWORD三个表的策略,如果需要看NAT表的策略,需要加-t nat。而内部端口映射的策略需要加到NAT表中的。
iptables -L -n -v -t nat
2.增加端口映射的策略
所有发送到本地网卡上的80端口的请求,转发到本地8899:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8899
加上上面这条策略后,所有发送到网卡上的80请求会映射到8080,但是如果本地访问127.0.0.1的时候,端口还是映射不过去,因为本地访问127.0.0.1的事情,请求不会到网卡,直接到lo了,所以还需要增加一条本地请求的策略:
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8899
这样无论本地还是,别的机器所有发送到80的请求都会转发到8080。但是需要注意的一点是,从netstat中是看不到80端口的监听的,这个请求转发是在网卡上完成的。
3.删除本地策略
如果只是测试,可以使用下面的命令删除刚才创建的策略:
iptables -F -t nat
PS,如果使用非ROOT用户启动jetty去绑定80端口,会在日志中看到以下的错误:
2012-09-13 20:37:18.077:WARN::failed SelectChannelConnector@0.0.0.0:80: java.NET.SocketException: 权限不够
这次再执行启动命令,信息如下:
[1] 13130
sh-4.1# nohup: 忽略输入并把输出追加到"nohup.out"
浏览器地址输入对应机器IP,
部署成功了了。
分享到:
相关推荐
用maven将elastic job lite源码编译的压缩包,解压缩在 elastic-job-lite-console-3.0.0.M1-SNAPSHOT.tar.gz\bin目录下是启动脚本 windows环境用:start.bat linux环境用:start.sh
elastic-job-lite-console-2.1.4.tar.gz,可以在windows或者linux环境部署。控制台和Elastic Job并无直接关系,是通过读取Elastic Job的注册中心数据展现作业状态,或更新注册中心数据修改全局配置。
elastic-job-lite-console-3.0.0.M1-SNAPSHOT 最新的elastic-job打包成,已经部署测试没有问题
当当开源系统elastic-job的控制台 无需tomcat部署 直接运行bin下命令即可运行 然后访问localhost:8989 登录的用户名密码都是root
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的...
ElasticJob是一种分布式调度解决方案,由两个单独的项目(ElasticJob-Lite和ElasticJob-Cloud)组成。 通过灵活的调度,资源管理和作业管理功能,它创建了适合Internet场景的分布式调度解决方案,并通过开放式架构...
分为引言,其他分布式任务调度框架的痛点,为什么选择elastic-job这个框架,elastic-job框架的特点,elastic-job-lite和elastic-job-cloud这两个框架各有什么特点,代码以及如何进行环境部署,elastic-job是如何进行...
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的...
从 Elastic-Job 的 github 地址下载源码:https://github.com/elasticjob/elastic-job-lite 如果不想自己编译可以直接下载我打包好的,解压后直接使用,具体操作下面有步骤: 链接:...
为您提供ElasticJob分布式调度解决方案下载,ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及...
ElasticJob是一个分布式调度解决方案,由两个单独的项目(ElasticJob-Lite和ElasticJob-Cloud)组成。 通过灵活的调度,资源管理和作业管理功能,它创建了适合Internet场景的分布式调度解决方案,并通过开放式架构...
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的...
ElasticJob 是一个分布式调度解决方案,由两个独立的项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 ElasticJob-Lite 是一个轻量级、去中心化的解决方案,提供分布式任务分片服务。 ElasticJob-Cloud 使用 Mesos ...
Elastic-Job由2个独立的子项目组成:Elastic-Job-Lite和Elastic-Job-Cloud。 Elastic-Job-Lite是一种无中心的解决方案,使用轻量级的jar来协调分布式作业。 Elastic-Job-Cloud是一个Mesos框架,它使用Mesos + ...
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的...
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的...
2.2、Elastic-job Elastic-job是当当开源的一款非常好用的作业框架,Elastic-job在2.x之后,出现了两个相互独立的产品线:Elastic-job-lite和Elastic-job-cloud。 2.2.1、Elastic-job-lite Elastic-job-lite定位为...
14.7.4 Elastic-Job-Lite功能与架构 287 14.7.5 Elastic-Job-Lite示例 288 15 队列术 295 15.1 应用场景 295 15.2 缓冲队列 296 15.3 任务队列 297 15.4 消息队列 297 15.5 请求队列 299 15.6 数据总线队列 300 15.7...