Browse Source

添加windows 版本的 自动编译打包, LTS-Admin和JobTracker的shell脚本运行

hugui 9 years ago
parent
commit
d6f8d6466e

+ 33 - 0
build.cmd

@@ -0,0 +1,33 @@
+@echo off
+
+start mvn clean install -DskipTests
+echo "LTS: mvn clean install -DskipTests"
+echo "LTS: After sub window finished, close it , and press any key to continue" & pause>nul
+
+set VERSION=1.5.5-SNAPSHOT
+set BASE_HOME=%~dp0%
+set DIST_BIN_DIR=lts-%VERSION%-bin
+
+md "%BASE_HOME%\dist"
+md "%BASE_HOME%\dist\%DIST_BIN_DIR%"
+
+set LTS_BIN_DIR=%BASE_HOME%dist\%DIST_BIN_DIR%
+
+set JOB_TRACKER_START_UP_DIR=%BASE_HOME%\lts-startup\lts-startup-jobtracker
+cd %JOB_TRACKER_START_UP_DIR%
+start mvn assembly:assembly -DskipTests
+echo "LTS: mvn assembly:assembly -DskipTests"
+echo "LTS: After sub window finished, close it , and press any key to continue" & pause>nul
+
+xcopy /e /y "%JOB_TRACKER_START_UP_DIR%\target\lts-bin\lts" "%LTS_BIN_DIR%"
+cd ..\..\
+
+set LTS_ADMIN_START_UP_DIR=%BASE_HOME%/lts-startup/lts-startup-admin
+cd %LTS_ADMIN_START_UP_DIR%
+start mvn assembly:assembly -DskipTests
+echo "LTS: mvn assembly:assembly -DskipTests"
+echo "LTS: After sub window finished, close it , and press any key to continue" & pause>nul
+
+xcopy /e /y "%LTS_ADMIN_START_UP_DIR%\target\lts-bin\lts" "%LTS_BIN_DIR%"
+xcopy /e /y "%BASE_HOME%\lts-admin\target\lts-admin-%VERSION%.war" "%LTS_BIN_DIR%\war\lts-admin.war"
+cd ..\..\

+ 7 - 8
build.sh

@@ -16,19 +16,18 @@ mkdir -p $LTS_BIN_DIR/dist/$DIST_BIN_DIR
 # JOB_TRACKER 的打包
 JOB_TRACKER_START_UP_DIR="$LTS_BIN_DIR/lts-startup/lts-startup-jobtracker"
 cd $JOB_TRACKER_START_UP_DIR
-mvn assembly:assembly
-cp -rf $JOB_TRACKER_START_UP_DIR/target/lts-bin/lts/*  $LTS_BIN_DIR/dist/$DIST_BIN_DIR
-
+mvn assembly:assembly -DskipTests
 
 # LTS-Admin 打包
 LTS_ADMIN_START_UP_DIR="$LTS_BIN_DIR/lts-startup/lts-startup-admin"
 cd $LTS_ADMIN_START_UP_DIR
-mvn assembly:assembly
-cp -rf $LTS_ADMIN_START_UP_DIR/target/lts-bin/lts/*  $LTS_BIN_DIR/dist/$DIST_BIN_DIR
+mvn assembly:assembly -DskipTests
 
+cp -rf $JOB_TRACKER_START_UP_DIR/target/lts-bin/lts/*  $LTS_BIN_DIR/dist/$DIST_BIN_DIR
+cp -rf $LTS_ADMIN_START_UP_DIR/target/lts-bin/lts/*  $LTS_BIN_DIR/dist/$DIST_BIN_DIR
 cp -rf $LTS_BIN_DIR/lts-admin/target/lts-admin-$VERSION.war $LTS_BIN_DIR/dist/$DIST_BIN_DIR/war/lts-admin.war
 
-cd $LTS_BIN_DIR/dist
-zip -r $DIST_BIN_DIR.zip $DIST_BIN_DIR/*
-rm -rf $DIST_BIN_DIR
+# cd $LTS_BIN_DIR/dist
+# zip -r $DIST_BIN_DIR.zip $DIST_BIN_DIR/*
+# rm -rf $DIST_BIN_DIR
 

BIN
docs/LTS 使用说明文档.pdf


+ 92 - 0
docs/LTS文档.md

@@ -0,0 +1,92 @@
+# LTS用户文档
+	
+LTS(light-task-scheduler)主要用于解决分布式任务调度问题,支持实时任务,定时任务和Cron任务。有较好的伸缩性,扩展性,健壮稳定性而被多家公司使用,同时也希望开源爱好者一起贡献。
+
+## 项目地址
+github地址:
+[https://github.com/qq254963746/light-task-scheduler](https://github.com/qq254963746/light-task-scheduler)
+
+oschina地址:
+[git.oschina.net/hugui/light-task-scheduler](git.oschina.net/hugui/light-task-scheduler)
+
+这两个地址都会同步更新。
+
+## 框架概况
+LTS 有主要有以下四种节点:
+
+* JobClient:主要负责提交任务, 并接收任务执行反馈结果。
+* JobTracker:负责接收并分配任务,任务调度。
+* TaskTracker:负责执行任务,执行完反馈给JobTracker。
+* LTS-Admin:(管理后台)主要负责节点管理,任务队列管理,监控管理等。
+
+其中JobClinet,JobTracker,TaskTracker节点都是`无状态`的。
+可以部署多个并动态的进行删减,来实现负载均衡,实现更大的负载量, 并且框架采用FailStore策略使LTS具有很好的容错能力。 
+
+LTS注册中心提供多种实现(Zookeeper,redis等),注册中心进行节点信息暴露,master选举。(Mongo or Mysql)存储任务队列和任务执行日志, netty做底层通信。
+
+LTS支持任务类型:
+
+* 实时任务:提交了之后立即就要执行的任务。
+* 定时任务:在指定时间点执行的任务,譬如 今天3点执行(单次)。
+* Cron任务:CronExpression,和quartz类似(但是不是使用quartz实现的)譬如 0 0/1 * * * ?
+
+## 架构图
+
+![LTS architecture](http://git.oschina.net/hugui/light-task-scheduler/raw/master/docs/LTS_architecture.png?dir=0&filepath=docs%2FLTS_architecture.png&oid=1e5daa62b8d032daaa47eab4a84ab1d4c8962c33&sha=774aa73d186470aedbb8f4da3c04a86a6022be05)
+
+## 概念说明
+
+###节点组
+1. 英文名称 NodeGroup,一个节点组等同于一个小的集群,同一个节点组中的各个节点是对等的,等效的,对外提供相同的服务。
+2. 没个节点组中都有一个master节点,这个master节点是由LTS动态选出来的,当一个master节点挂掉之后,LTS会立马选出另外一个master节点,框架提供API监听接口给用户。
+
+###FailStore
+1. 顾名思义,这个主要是用于失败了存储的,主要用于节点容错,当远程数据交互失败之后,存储在本地,等待远程通信恢复的时候,再将数据提交。
+2. FailStore主要用户JobClient的任务提交,TaskTracker的任务反馈,TaskTracker的业务日志传输的场景下。
+3. FailStore目前提供三种实现:leveldb,rocksdb,berkeleydb,用于可以自由选择使用哪种。
+
+
+## 流程图
+下图是一个标准的实时任务执行流程。
+
+![LTS progress](http://git.oschina.net/hugui/light-task-scheduler/raw/master/docs/LTS_progress.png?dir=0&filepath=docs%2FLTS_progress.png&oid=22f60a83b51b26bac8dabbb5053ec9913cefc45c&sha=774aa73d186470aedbb8f4da3c04a86a6022be05)
+
+##特性
+###1、Spring支持
+LTS可以完全不用Spring框架,但是考虑到很用用户项目中都是用了Spring框架,所以LTS也提供了对Spring的支持,包括Xml和注解,引入`lts-spring.jar`即可。
+###2、业务日志记录器
+在TaskTracker端提供了业务日志记录器,供应用程序使用,通过这个业务日志器,可以将业务日志提交到JobTracker,这些业务日志可以通过任务ID串联起来,可以在LTS-Admin中实时查看任务的执行进度。
+###3、SPI扩展支持
+SPI扩展可以达到零侵入,只需要实现相应的接口,并实现即可被LTS使用,目前开放出来的扩展接口有
+
+1. 对任务队列的扩展,用户可以不选择使用mysql或者mongo作为队列存储,也可以自己实现。
+2. 对业务日志记录器的扩展,目前主要支持console,mysql,mongo,用户也可以通过扩展选择往其他地方输送日志。
+
+###4、故障转移
+当正在执行任务的TaskTracker宕机之后,JobTracker会立马分配在宕机的TaskTracker的所有任务再分配给其他正常的TaskTracker节点执行。
+###5、节点监控
+可以对JobTracker,TaskTracker节点进行资源监控,任务监控等,可以实时的在LTS-Admin管理后台查看,进而进行合理的资源调配。
+###6、多样化任务执行结果支持
+LTS框架提供四种执行结果支持,`EXECUTE_SUCCESS`,`EXECUTE_FAILED`,`EXECUTE_LATER`,`EXECUTE_EXCEPTION`,并对每种结果采取相应的处理机制,譬如重试。
+
+* EXECUTE_SUCCESS: 执行成功,这种情况,直接反馈客户端(如果任务被设置了要反馈给客户端)。
+* EXECUTE_FAILED:执行失败,这种情况,直接反馈给客户端,不进行重试。
+* EXECUTE_LATER:稍后执行(需要重试),这种情况,不反馈客户端,重试策略采用1min,2min,3min的策略,默认最大重试次数为10次,用户可以通过参数设置修改这个重试次数。
+* EXECUTE_EXCEPTION:执行异常, 这中情况也会重试(重试策略,同上)
+
+###7、FailStore容错
+采用FailStore机制来进行节点容错,Fail And Store,不会因为远程通信的不稳定性而影响当前应用的运行。具体FailStore说明,请参考概念说明中的FailStore说明。
+
+##项目编译打包
+项目主要采用maven进行构建,目前提供shell脚本的打包。
+环境依赖:`Java(jdk1.7)` `Maven`
+
+用户使用一般分为两种:
+###1、Maven构建
+可以通过maven命令将lts的jar包上传到本地仓库中。在父pom.xml中添加相应的repository,并用deploy命令上传即可。具体引用方式可以参考lts中的例子即可。
+###2、直接Jar引用
+
+##JobTracker和LTS-Admin部署
+运行根目录下的`sh build.sh`脚本,会在`dist`目录下生成`lts-{version}-bin`文件夹,
+
+

+ 1 - 1
lts-admin/src/main/java/com/lts/web/support/AppConfigurer.java

@@ -16,7 +16,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 public class AppConfigurer {
 
     private static final Map<String, String> CONFIG = new HashMap<String, String>();
-    private static final String CONF_NAME = "lts-admin.conf";
+    private static final String CONF_NAME = "lts-admin.cfg";
 
     private static AtomicBoolean load = new AtomicBoolean(false);
 

+ 2 - 1
lts-admin/src/main/java/com/lts/web/support/SystemInitListener.java

@@ -14,7 +14,8 @@ public class SystemInitListener implements ServletContextListener {
     @Override
     public void contextInitialized(ServletContextEvent servletContextEvent) {
 
-        String confPath = System.getProperty("lts.admin.conf.path");
+        String confPath = servletContextEvent.getServletContext().getInitParameter("lts.admin.config.path");
+
         if (StringUtils.isNotEmpty(confPath)) {
             System.out.println("lts.admin.config.path : " + confPath);
         }

+ 0 - 0
lts-admin/src/main/resources/lts-admin.conf → lts-admin/src/main/resources/lts-admin.cfg


+ 3 - 1
lts-core/src/main/java/com/lts/core/monitor/AbstractMonitor.java

@@ -141,7 +141,9 @@ public abstract class AbstractMonitor implements Monitor {
                     try {
                         if (send(params)) {
                             toIndex = toIndex + CollectionUtils.sizeOf(monitorDataList);
-                            LOGGER.info("Report monitor data success ");
+                            if(LOGGER.isDebugEnabled()){
+                                LOGGER.debug("Report monitor data success ");
+                            }
                         } else {
                             LOGGER.warn("Report monitor data failed, send later ,please check the LTS-Admin is available");
                             break;

+ 4 - 4
lts-core/src/main/java/com/lts/core/remoting/HeartBeatMonitor.java

@@ -97,7 +97,7 @@ public class HeartBeatMonitor {
                                 }
                             }, 30, 30, TimeUnit.SECONDS);      // 30s 一次心跳
                 }
-                LOGGER.info("Start slow ping success.");
+                LOGGER.debug("Start slow ping success.");
             }
         } catch (Throwable t) {
             LOGGER.error("Start slow ping failed.", t);
@@ -110,7 +110,7 @@ public class HeartBeatMonitor {
 //                pingScheduledFuture.cancel(true);
 //                PING_EXECUTOR_SERVICE.shutdown();
                 application.getEventCenter().unSubscribe(EcTopic.NO_JOB_TRACKER_AVAILABLE, jobTrackerUnavailableEventSubscriber);
-                LOGGER.info("Stop slow ping success.");
+                LOGGER.debug("Stop slow ping success.");
             }
         } catch (Throwable t) {
             LOGGER.error("Stop slow ping failed.", t);
@@ -132,7 +132,7 @@ public class HeartBeatMonitor {
                                 }
                             }, 1, 1, TimeUnit.MILLISECONDS);
                 }
-                LOGGER.info("Start fast ping success.");
+                LOGGER.debug("Start fast ping success.");
             } catch (Throwable t) {
                 LOGGER.error("Start fast ping failed.", t);
             }
@@ -144,7 +144,7 @@ public class HeartBeatMonitor {
             if (fastPingStart.compareAndSet(true, false)) {
 //                fastPingScheduledFuture.cancel(true);
 //                FAST_PING_EXECUTOR.shutdown();
-                LOGGER.info("Stop fast ping success.");
+                LOGGER.debug("Stop fast ping success.");
             }
         } catch (Throwable t) {
             LOGGER.error("Stop fast ping failed.", t);

+ 20 - 3
lts-startup/lts-startup-admin/src/main/java/com/lts/startup/JettyContainer.java

@@ -3,6 +3,13 @@ package com.lts.startup;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.webapp.WebAppContext;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
 /**
  * @author Robert HG (254963746@qq.com) on 9/1/15.
  */
@@ -11,13 +18,23 @@ public class JettyContainer {
     public static void main(String[] args) {
         try {
             String confPath = args[0];
-            Integer port = Integer.parseInt(args[1]);
 
-            System.setProperty("lts.admin.config.path", confPath + "/conf");
+            confPath = confPath.trim();
+
+            Properties conf = new Properties();
+            InputStream is = new FileInputStream(new File(confPath + "/conf/lts-admin.cfg"));
+            conf.load(is);
+            String port = conf.getProperty("port");
+            if (port == null || port.trim().equals("")) {
+                port = "8080";
+            }
 
-            Server server = new Server(port);
+            Server server = new Server(Integer.parseInt(port));
             WebAppContext webapp = new WebAppContext();
             webapp.setWar(confPath + "/lts-admin.war");
+            Map<String, String> initParams = new HashMap<String, String>();
+            initParams.put("lts.admin.config.path", confPath + "/conf");
+            webapp.setInitParams(initParams);
             server.setHandler(webapp);
             server.setStopAtShutdown(true);
             server.start();

+ 15 - 0
lts-startup/lts-startup-admin/src/main/resources/bin/lts-admin.cmd

@@ -0,0 +1,15 @@
+@echo off
+
+set BASE_HOME=%~dp0%..
+md "%BASE_HOME%\logs"
+
+set CLASSPATH=%BASE_HOME%\war\lib\*;%CLASSPATH%
+
+set LTS_MAIN=com.lts.startup.JettyContainer
+
+echo LTS-Admin started
+
+java -cp "%CLASSPATH%" %LTS_MAIN% "%BASE_HOME%\war" %*
+
+pause>null
+

+ 1 - 7
lts-startup/lts-startup-admin/src/main/resources/bin/lts-admin.sh

@@ -33,12 +33,6 @@ LTS_MAIN="com.lts.startup.JettyContainer"
 
 LTS_PID_FILE="$LTS_ADMIN_HOME/../pid/lts-admin.pid"
 
-# 得到Jetty端口
-PORT="$(grep "^[[:space:]]*port" "$CONF_HOME/conf/lts-admin.conf" | sed -e 's/.*=//')"
-if [ -z "$PORT" ]; then
-    PORT=8080
-fi
-
 case $1 in
 start)
     echo "Starting LTS LTS-Admin ... "
@@ -48,7 +42,7 @@ start)
          exit 0
       fi
     fi
-    nohup "$JAVA" -cp "$CLASSPATH" $JVMFLAGS $LTS_MAIN "$CONF_HOME" "$PORT"> "$_LTS_DAEMON_OUT" 2>&1 < /dev/null &
+    nohup "$JAVA" -cp "$CLASSPATH" $JVMFLAGS $LTS_MAIN "$CONF_HOME" > "$_LTS_DAEMON_OUT" 2>&1 < /dev/null &
 
 	if [ $? -eq 0 ]
     then

+ 0 - 0
lts-startup/lts-startup-admin/src/main/resources/conf/lts-admin.conf → lts-startup/lts-startup-admin/src/main/resources/conf/lts-admin.cfg


+ 14 - 0
lts-startup/lts-startup-jobtracker/src/main/resources/bin/jobtracker.cmd

@@ -0,0 +1,14 @@
+@echo off
+set /p NODE_NAME="Enter your jobtracker config name:"
+
+set BASE_HOME=%~dp0%..\
+md "%BASE_HOME%\logs"
+
+set CLASSPATH=%BASE_HOME%\lib\*;%CLASSPATH%
+
+set CONF_HOME=%BASE_HOME%\conf\%NODE_NAME%
+
+set LTS_MAIN=com.lts.startup.JobTrackerStartup
+
+echo JobTracker [%NODE_NAME%] started
+java -cp "%CLASSPATH%" %LTS_MAIN% "%CONF_HOME%" %*

+ 1 - 1
lts-startup/lts-startup-jobtracker/src/main/resources/conf/zoo/jobtracker.cfg

@@ -15,7 +15,7 @@ configs.job.logger=mysql
 configs.zk.client=zkclient
 
 # 监控中心,即LTS-Admin地址
-configs.lts.monitor.url=http://localhost:8080
+configs.lts.monitor.url=http://localhost:8081
 
 # ---------以下是任务队列配置-----------
 # 任务队列,可选值 mysql, mongo