两个elastic-job节点,且两个节点有配置keepalived,会导致两个节点都会运行job

fly2thesky 发布于 2017/09/12 10:36
阅读 1K+
收藏 0

我搭建了两个Elastic-Job的节点,同时在这两个节点服务器上,有配置了keepalived给其他组件用(也就是eth0上面绑定了一个内网IP,同时又绑定了一个虚拟IP),结果发现相同的JOB会运行两次,也就是两个节点都同时运行了。如果把keepalived关掉,就只会有一个节点运行了。请问,这个是elastic-job的问题,还是zookeeper的问题呢?有没有办法解决?

elastic-job版本:2.0.3

job的配置:

 <reg:zookeeper id="regCenter" server-lists="${zookeeper.servers}" namespace="macc-job" base-sleep-time-milliseconds="1000" max-sleep-time-milliseconds="3000" max-retries="3" />
	<!-- apmgt -->
	<job:simple id="sampleJOb" class="com.test.sample" registry-center-ref="regCenter" cron="${sample.job.cron}" monitor-execution="false" failover="true" overwrite="true" sharding-total-count="1" sharding-item-parameters="0=A" />

 

加载中
0
张亮_Apache
张亮_Apache

是不是没有在业务代码中写哪个分片对应什么操作?

fly2thesky
fly2thesky
我们只有一个分片,job的配置都是只有一个 sharding-total-count="1" sharding-item-parameters="0=A"
0
张亮_Apache
张亮_Apache

我感觉可能和zk的环境有关?用了两个不同的zk么?或是不同的namespace?

fly2thesky
fly2thesky
回复 @亮_dangdang : 以及这样的错误: reqpath:n/a Error Path:/macc-job-mongo/systemClearJob/leader/sharding Error:KeeperErrorCode = NoNode for
fly2thesky
fly2thesky
回复 @亮_dangdang : zookeeper上有这样的日志,会不会是这个问题导致? INFO [SyncThread:0:ZooKeeperServer@673] - Established session 0x15eaa112e770003 with negotiated timeout 40000 for client
张亮_Apache
张亮_Apache
回复 @fly2thesky : 可以参见文档dump状态看看
fly2thesky
fly2thesky
有哪些日志可以看下问题出在哪里吗?
fly2thesky
fly2thesky
没有的,zk只有一个,刚开始是用zk集群,后来以为是zk的问题,然后就改成单机版的zk,问题还是这样。同时,进入zk看,只有一个节点,所以namespace也能确定只有一个。有个疑惑点就是,如果把keepalived关掉,其他都不用动,就只有一个job会运行。
0
fly2thesky
fly2thesky

    回复 @亮_dangdang
亮哥,我想,是不是这个原因导致的呢:
1. elastic-job获取ip是通过这个方法的:com.dangdang.ddframe.job.util.env.IpUtils.getIp();
2. 我的服务器网卡信息是:eth0:172.18.139.83; lo:127.0.0.1;lo:0:172.18.139.88,结果上面的getIp()返回的88,而88这个地址,是因为我这台服务器是作为LVS的后端realserver,所以有两台服务器的lo:0都绑定了88这个ip地址;另外,getIp()在while循环中获取到private地址的顺序是83,然后88,由于获取到private后,并没有break,所以两台服务器都返回88的地址,最终导致两台服务器的job都同时运行了

不知会不会是这个原因?

0
fly2thesky
fly2thesky

升级到2.1.5版本,已解决。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部