云服务部署说明

概述

集算器云服务是一款既可部署在云平台虚拟机,也可部署在本地的提供 SPL 计算的应用。管理多个 SPL 服务器,执行远程存储脚本文件时,会自动为 SPL 服务器分配任务实现云计算。

云服务由 QVS、QVA、QVM 三部分构成:

QVM 是 SPL 服务器,可以通过访问远程存储 (如 S3)、数据库、本地硬盘以及 ElasticsSearch、Kafka、MongoDB、Cassandra 等外部库系统进行 SPL 计算。S3 中数据的上传、下载、调试可以用集算器企业版中的远程调试功能,具体使用可参考《企业版 RSRV 部署使用说明》。

QVA 是 QVM 管理服务器,每个 QVA 管理一批 QVM,QVA 响应任务请求后分配虚拟机启动 QVM。可分为公有云和私有云两种方式部署,公有云支持 QVM 的动态启停,私有云则不支持,只能用户手动管理。

QVS 是用户自行部署的多功能服务器。配置多个 QVA,用户可以使用验证串来访问相应的 QVA 并申请 QVM 进行 SPL 计算;QVS 还可以单独部署成远程调试服务器。

云服务部署

本章节主要介绍关于云服务的部署和使用。
接下来我们以私有部署模式为例,通过在用户自己的第三方云平台虚拟机(EC2)和远程存储(S3)部署云服务,让您快速了解云服务。
部署环境:


192.168.1.4 QVM
192.168.1.5 QVA
192.168.1.6 QVS

第一步:部署 QVS 应用

企业版集算器安装包中提供了 QVS,位于【集算器安装目录】\esProc\q-server\webapps\qvs。

集成部署需参考如下操作,如不需要集成部署则可直接跳至下一步:
将【集算器安装目录】\esProc\q-server\webapps 下的 qvs 目录集成到 WEB 应用中。

1png

集成后还需要将如下目录中的 jar 放至 lib 目录下:

【集算器安装目录】\esProc\lib
【集算器安装目录】\esProc\q-extlib,该目录包含多种类型的远程存储第三方 jar,按需获取与所使用的远程存储对应的 jar 即可。本步我们需将 s3 目录中 jar 放至 QVS 应用的 lib 目录,远程存储 jar 用于读取远程存储数据文件或脚本文件。

注意:所有文件中只有 web.xml 文件不能直接拷贝,而是将 QVS 的 web.xml 文件中的内容拷贝到所要集成的 web.xml 文件中。其内容在 web.xml 中的顺序,要遵从相关应用服务器的规定。

第二步:部署 QVA 应用

企业版集算器安装包中提供了 QVA 项目,位于【集算器安装目录】\esProc\q-server\webapps\qva。
集成部署需参考如下操作,如不需要集成部署则可直接跳至下一步:
将【集算器安装目录】\esProc\q-server\webapps 下的 qva 目录集成到 WEB 应用中。

集成后还需要将如下目录中的 jar 放至 lib 目录下:

【集算器安装目录】\esProc\lib
【集算器安装目录】\esProc\q-extlib,该目录包含多种类型的云虚拟机、远程存储第三方 jar,按需获取与所使用的服务器云虚拟机、远程存储对应的 jar 即可。本步我们需将 ec2 和 s3 目录中 jar 放至 QVA 应用的 lib 目录,远程存储 jar 用于 QVA 远程存储日志功能。

注意:所有文件中只有 web.xml 文件不能直接拷贝,而是将 QVS 的 web.xml 文件中的内容拷贝到所要集成的 web.xml 文件中。其内容在 web.xml 中的顺序,要遵从相关应用服务器的规定。

第三步:配置 QVS 的 IP 地址和端口号

企业版集算器内置 tomcat 服务器,在【集算器安装目录】\esProc\q-server\conf\server.xml 文件中配置 IP 地址和端口号。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8041" shutdown="SHUTDOWN">
 …
  <Service name="Catalina">
    <Connector port`="8090" protocol="HTTP/1.1"
               connectionTimeout="0"
               />
    <Engine name="Catalina" defaultHost="localhost">
     …
<Host name="192.168.1.6"  appBase="webapps"
            unpackWARs="true"  autoDeploy="false" 
			deployXML ="false" deployOnStartup ="false" >
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
              <Context path="/qvs" docBase="qvs" reloadable="true"  privileged="true"> </Context>
      </Host>
    </Engine>
  </Service>
</Server>

集成部署时本步骤可省略,使用当前服务器的 IP 地址和端口号即可。

第四步:配置 QVA 的 IP 地址和端口号

企业版集算器内置了 tomcat 服务器,在【集算器安装目录】\esProc\q-server\conf\server.xml 文件中配置 IP 地址和端口号。

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8041" shutdown="SHUTDOWN">
 …
  <Service name="Catalina">
    <Connector port="8090" protocol="HTTP/1.1"
               connectionTimeout="0"
               />
    <Engine name="Catalina" defaultHost="localhost">
     …
      <Host name="192.168.1.5"  appBase="webapps"
            unpackWARs="true"  autoDeploy="false" 
			deployXML ="false" deployOnStartup ="false" >
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
              <Context path="/qvs" docBase="qvs" reloadable="true"  privileged="true"> </Context>
            
      </Host>
    </Engine>
  </Service>
</Server>

集成部署时本步骤可省略,使用当前服务器的 IP 地址和端口号即可。

第五步:配置 QVS/QVA 的集算器系列号

为 QVS 和 QVA 配置系列号。
QVS 配置文件:【集算器安装目录】/esProc/q-server/webapps/qvs/WEB-INF/home/raqsoftConfig.xml
QVA 配置文件:【集算器安装目录】/esProc/q-server/webapps/qva/WEB-INF/home/raqsoftConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<Config Version="3">
    <Runtime>
        ...
        <Esproc>
          ...
			<serialNo>CAKSXV8GUK66X</serialNo>
          ...
        </Esproc>
        ...
    </Runtime>

</Config>

第六步:QVS 配置

将 QVS 运行模式设置为 0(服务),并且设置用户的远程存储地址。
配置文件:【集算器安装目录】/esProc/q-server/webapps/qvs/WEB-INF/home/qvsConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<qvs>
<runMode>0</runMode>
<locale language="en" country=""/>
<cacheSystem cachePath="cache" blockSize="1024" minFreeSpace="2" />
<verifies>
<verify code="demoqvs">
<qva user="admin" xpwd="88888888" url="http://192.168.1.5:8090/qva"/>			
<store type="S3">
{"region":"us-east-2","accessKey":"AKIAVSPDUYZ7O7WTX3C2","secretKey":"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","endPoint":"https://s3.us-east-2.amazonaws.com"}
</store>
</verify>
</verifies>
</qvs>

属性说明
runMode:QVS 的运行模式,0 是服务,1 是调试。可以根据需要设置为 0 或者 1。安装包默认为 1(调试模式),关于运行模式为 1(调试模式)的部署和使用可参考《企业版 RSRV 部署使用说明》。
locale:QVS 应用程序的语言。
cacheSystem:从远程存储服务商下载用户文件到 QVS 的相关配置,仅在调试模式下有效,此处可忽略。

cachePath:记录文件下载信息的目录。
blockSize:指定下载块的大小。
minFreeSpace:存放下载文件目录的最小空闲空间,当服务器剩余空间小于最小空闲空间时,会自动删除下载目录下的缓存文件。

verifies:验证配置,可以配置多套。连接 QVS 时会根据验证串匹配 qva 和 store 信息。

code:验证串。为了增加安全性,请使用复杂度高的验证串;
qva:访问 QVA 应用的用户名、执行密码、url。可以配置 QVA 管理界面注册的任意用户,默认管理员账号为 admin/88888888;
store:与远程存储相关的配置,用于读取远程存储数据文件或脚本文件。QVS 是服务模式时,store 是 QVA 用户的远程存储信息;QVS 是调试模式时,store 是调试者的远程存储信息。

type:存储服务商的类别(S3、GCS、nfs、azure、hdfs、oss、mount)。标签之间的内容是 QVS 的远程存储用户相关信息,示例中是 S3 用户的信息格式。需配置成用户自己的远程存储地址。

第七步:QVA 配置

配置文件:【集算器安装目录】/esProc/q-server/webapps/qva/WEB-INF/home/qvaConfig.xml(type和 {} 属性为需要配置的内容)

<?xml version="1.0" encoding="UTF-8"?>
<qva>
<runMode>1</runMode>
<locale language="en" country=""/>
<vmConfig protocol="http" port="8081" type="EC2">
<!—设置服务器地址,私有模式时可忽略 -->
{"region":"us-east-2","accessKey":"AKIAVSPDUYZ7O7WTX3C2","secretKey":"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","endPoint":"https://s3.us-east-2.amazonaws.com"}
</vmConfig>
<vmMonitor interval="30" minQvmNum="0" maxIdleTime="300" connectPackingRatio="50" />

<store type="S3">
{"region":"us-east-2","accessKey":"AKIAVSPDUYZ7O7WTX3C2","secretKey":"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","endPoint":"https://s3.us-east-2.amazonaws.com"}
</store>
<waitVMTime>30</waitVMTime>
<onlineMonitor interval="10" maxIdleTime="120" manageTimeout="1200"/>
<checkVMStatus timeout="1500"/>
<sendMail user=" " pwd=" " smtp=" " from=""/>
</qva>

属性说明
runMode:QVA 的运行模式,0 是公有(自动启停 QVM),1 是私有(手动启停 QVM)。可以根据需要设置为 0 或者 1,企业版安装包中默认设置为 1(私有)。
locale:QVA 应用程序的语言。
vmConfig:VM 属性配置,用于匹配 VM 实例。

protocol:访问 QVM 实例的协议,http 或 https;
port:访问 QVM 实例的端口;
type:QVM 实例的服务器类型(EC2、local、GCE),大小写无关。企业版安装包内置的 QVM 默认的 type 类型为“local”, 代表本地服务器。
私有模式时服务器地址 {} 无效,可忽略

vmMonitor:VM 监控器设置,私有模式时不用配置。

interval:QVM 监控程序进行监测的时间间隔,单位秒;
minQvmNum:保持开机的 QVM 最少台数;
maxIdleTime:QVM 最长闲置时间,超过将自动关机,单位秒;
connectPackingRatio:排队请求数 / 已开机 QVM 数量,请求堆积率超过某个阈值时则自动开启 QVM,直到所有配置的 QVM 都开机为止。

store:为管理员配置远程存储信息。用于任务日志和 VM 使用日志的备份。

type:存储服务商的类别(S3、GCS、nfs、azure、hdfs、oss、mount)。标签之间的内容是 QVA 管理员的远程存储用户相关信息,示例中是 S3 用户的信息格式。需配置成管理员自己的远程存储地址,可与 QVS 共用远程存储。

waitVMTime:用户连接 QVA 时,若所有 QVM 都被其他用户占用,当前用户将进入排队等待,此为等待的默认时间,超过此时间系统就返回超时错误。

onlineMonitor: 在线监测设置。

interval:在线连接监控器运行的时间间隔,默认 10 秒;
maxIdleTime:默认的 QVM 连接最大闲置时间,当 Qconnect 函数中没有指定 lt 参数值时,将使用此默认值,默认 120 秒;
manageTimeout:用户在 WEB 页面登录后,超过此时间未有任何操作,将自动退出登录,默认 1200 秒;

checkVMStatus: QVA 检测 QVM 实例状态。

timeout:获取检测结果的超时时间,单位毫秒,默认值 1500 毫秒;

sendMail: 重设密码时使用邮件激活。用户在登录页面点击“忘记密码”按钮,系统给用户注册邮箱中发一封激活邮件,用户点击邮件中的 url 即可登录管理页面设置新的密码。

user:发送邮件的用户名;
pwd:发送邮件的密码;
smtp:发送邮件的服务器地址;
from:发送邮件地址的显示名称;

第八步:启动 QVS/QVA 服务器

QVS:启动 192.168.1.6 中企业版集算器的内置 tomcat 服务器,启动文件位于【集算器安装目录】\esProc\bin 下的 StartQVS.bat(linux 下为 StartQVS.sh)。集成部署时对应启动所使用的服务器即可。
QVA:启动 192.168.1.5 中企业版集算器的内置 tomcat 服务器,启动文件位于【集算器安装目录】\esProc\bin 下的 StartQVA.bat(linux 下为 StartQVA.sh)。集成部署时对应启动所使用的服务器即可。

第九步:部署 QVM 应用

每个 QVA 可以管理一批 QVM,这里仅以部署一台 QVM 为例,让您快速了解 QVM 的部署。部署多台 QVM 时,同一个 QVA 下 QVM 的 vmConfig 配置需保持一致。
企业版集算器安装包中提供了 QVM 项目,位于【集算器安装目录】\esProc\qvm,因此想要快速部署 QVM,可直接在服务器安装企业版集算器即可。
qvm 应用目录

conf.properties:QVM 配置文件
StartQVM.bat /StartQVM.sh:启动 QVM
StopQVM.bat /StopQVM.sh:关闭 QVM
raqsoftConfig.xml:数据源和主目录配置文件
lib:QVM 加载的包文件,需将【集算器安装目录】\esProc\lib 目录下除 javax.servlet-api*.jar 之外的其他 jar 复制到【集算器安装目录】\esProc\qvm\lib 目录。如读取远程存储数据文件或脚本文件,还需将远程存储类型对应的第三方 jar 复制到【集算器安装目录】\esProc\qvm\lib,本步我们需将【集算器安装目录】\esProc\q-extlib 下 s3 目录中 jar 放至 QVM 的 lib 目录。

第十步:配置 QVM 的集算器系列号

为 QVM 配置系列号。
QVM 配置文件:【集算器安装目录】/esProc/qvm/raqsoftConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<Config Version="3">
    <Runtime>
        ...
        <Esproc>
          ...
			<serialNo>CAKSXV8GUK66X</serialNo>
          ...
        </Esproc>
        ...
    </Runtime>

</Config>

第十一步:QVM 配置

配置文件:【集算器安装目录】/esProc/qvm/conf.properties

#[customer]
cloud.start.home=
cloud.qvs.url=none
cloud.qva.url=http://192.168.1.5:8090/qva
server.port=8081
cloud.qvm.store.cachepath=
cloud.qvm.store.blocksize=
cloud.qvm.store.minfreespace=
#[system]
… …
… …

属性说明

cloud.start.home:QVM 工作目录,缺省为【集算器安装目录】/esProc/qvm。
cloud.qva.url:QVA 应用的访问地址。
server.port:QVA 监控 QVM 时用的端口号,需与 QVA 配置中的 vmConfig 中的端口一致。
cloud.qvm.store.cachepath:记录从远程存储服务商下载用户文件的缓存目录。
cloud.qvm.store.blocksize:指定下载块的大小。
cloud.qvm.store.minfreespace:存放下载文件目录的最小空闲空间,当服务器剩余空间小于最小空闲空间时,会自动删除下载目录下的缓存文件。

第十二步:启动 QVM

启动位于【集算器安装目录】\esProc\qvm 下的 StartQVM.bat(linux 下为 StopQVM.sh)。

第十三步:QVA 中添加 QVM 实例

进入 QVA 管理页面:http://192.168.1.5:8090/qva/login.jsp

这里我们使用管理员 admin(admin 管理员默认管理密码:88888888)登录,进入 QVA 管理页面,点击实例管理,添加实例,并可通过刷新列表查看实例运行状态:

Instance ID:QVM 实例名称,QVM 实例的服务器类型为云平台虚拟机时,需将 Instance ID 与云平台实例 ID 保持一致。
External IP:外网 IP。【第七步:QVA 配置】中 type 为 local 时外部 IP 有效,其他云平台类型时可忽略本属性设置。
Inner IP:内网 IP

输入【第十二步:启动 QVM】中启动的 qvm 实例,点击“Submit”。

公有云模式时会动态启停 QVM,保持一定比例闲置 QVM,QVM 的启停比例设置可参考【第七步:QVA 配置】中的 vmMonitor 说明。
私有云模式时不需要动态启停,所有 QVM 处于启动状态。

更多关于 QVA 管理页面的菜单使用可参考以下介绍,如不需要则可直接跳至【第十四步 执行远程存储脚本文件】:
Using Instance Detail:使用中实例详情。

All Task Logs:查看所有任务日志。用于查看 admin 和其他用户的所有任务日志。

My Task Logs:查看我的任务日志。用于查看当前登录用户的任务日志。

All Instance Logs:查看所有实例日志。用于查看 admin 和其他用户的所有实例日志。

My Instance Logs:查看我的实例日志。用于查看当前登录用户的实例日志。

New Key Pair:管理员生成新秘钥。

Modify User Information:修改用户信息。

如果修改的是【第六步 QVS 配置】中连接 QVA 用到的用户,那么 qvsConfig.xml 配置文件需要同步修改。
注册普通用户,可在登录页面点击 Register 按钮:

Username: 用户名
Email: 邮箱
Manage password: 管理密码
Confirm password: 确认密码
Execute password: 执行密码。可用于 qvsConfig.xml 中配置 QVA 密码。
Confirm password: 确认密码
Date format:日期格式,需与当前 QVA 应用中显示的日期控件格式保持一致。用于实例管理中的日期显示和解析。

忘记用户密码,可在登录页面点击 Forget password 按钮,系统自动给用户注册邮箱(qvaConfig.xml 中设置的 sendMail)中发一封激活邮件,激活链接有效期为 15 分钟,用户点击邮件中的 url 登录进管理页面,点击修改用户信息重新设置密码。

第十四步:执行远程存储脚本文件

通过上述步骤已完成 QVS、QVA 和 QVM 部署,接下来我们通过在 IDE 中调用远程存储脚本文件,由 QVS 向 QVA 发送计算任务,QVA 响应任务后分配 QVM 实现云计算。
(1)使用远程调试将脚本文件(totalScore.splx)、数据文件(score.ctx)上传至 S3 远程存储的 slntest1 存储桶中,远程存储的配置可参考 qvsConfig.xml。
脚本文件内容如下:
totalScore.splx:

计算每个学生的总分,返回查询结果。
score.ctx:

(2)配置数据源
将【集算器安装目录】\common\jdbc 下的 hsqldb-***.jar 数据源驱动 jar 拷贝到 QVM 应用的【项目目录】\lib 中。
在 QVM 应用的【项目目录】\raqsoftConfig.xml 中配置数据源如下:

<DBList>
<DB name="demo">
<property name="url" value="jdbc:hsqldb:hsql://127.0.0.1/demo" ></property> 
<property name="driver" value="org.hsqldb.jdbcDriver" ></property> 
<property name="type" value="13" ></property> 
<property name="user" value="sa" ></property> 
<property name="password" ></property> 
<property name="batchSize" value="1000" ></property>
<property name="autoConnect" value="true" ></property>
<property name="useSchema" value="false" ></property>
<property name="addTilde" value="false" ></property>
<property name="dbCharset" value="UTF-8" ></property>
<property name="clientCharset" value="UTF-8" ></property>
<property name="needTransContent" value="false" ></property>
<property name="needTransSentence" value="false" ></property>
<property name="caseSentence" value="false" ></property>
</DB>
</DBList>

如果需要设置其他数据库,也可以参考以上两个操作进行配置。
注意: 连接数据源时需将对应的数据库驱动包放在 QVM 能够加载到的类路径下。集算器安装包中自带的 demo 数据源所连的内置数据库类型为 HSQL,驱动为 hsqldb-2.7.3-jdk8.jar,驱动存放位置为:【集算器安装根目录】\common\jdbc,该目录下默认带有 Oracle、MySQL、SQL Server 等常用类型数据库驱动,用户可以根据实际需要自己放置对应的驱动。

(3)启动数据库
在 QVM 服务器的【集算器安装目录】\esProc\bin 中启动 startDataBase.bat(linux 下启动 startDataBase.sh)。
(4)打开企业版集算器 IDE,调用远程存储脚本文件。



A

B

1

=Qconnect("http://192.168.1.6:8090/qvs":"demoqvs",10,30)

通过第八步启动的 QVS 向 QVA 申请 QVM

2

=A1.exec@x("slntest1/totalScore.splx",100)

执行 slntest1 存储桶中的 totalScore.splx 脚本,获取返回值

可登录 QVA 管理页面,查看任务进程和完成状态。
任务执行日志:

执行过程中可点击 Using Instance Detail 查看实例任务进程。
在云服务中使用函数不仅能对远程存储中的文件做上传、下载、删除等操作,还可以在 QVS 设置全局变量或者通过 QVS 实现全局锁,更多关于函数的用法请参考集算器在线文档【函数参考】。

云平台特殊配置

Google Computer Engine

1,服务器类型:GCE,地址书写格式:
{“credentials”:“scudata-891de5fb1bc3.json”,“project”:“scudata”,“zone”:“us-west2-a”}

2,存储服务商类别:GCS,地址书写格式:
{“credentials”:"scudata-891de5fb1bc3.json"}

注:json 文件是注册 Google 账号时生成的, 文件内容是连接 Google cloud storage 的信息。如需使用 GCS 远程存储,则需要在云服务中部署 json 文件,支持绝对路径、相对路径。QVS 使用远程存储时,credentials 配置相对路径时相对 qvs\WEB-INF\home;QVA 使用远程存储时,credentials 配置相对路径时相对 qva\WEB-INF\home 目录。

Network File System

1,存储服务商类别:nfs,地址书写格式:
{“hostName”:“192.168.1.3”,“rootPath”:“/mnt/share” ,“bCacheEnable”:true }

bCacheEnable:启用缓存,缺省为 false 无缓存,仅支持私有模式

Microsoft Azure

1,存储服务商类别:azure,地址书写格式:
{“accountName”:“test1”,“accountKey”:“MSU9nLvFd+uasww8EtB45GzJ8eeg2FzFXhBb6lfaJ8l5kk0PVsgrc1KUyQN+tj3JyazSkutHuxKL+AStMuU3UA==”,“endPoint”:“core.windows.net”,“protocol”:“https”}

Hadoop Distributed File System

1,存储服务商类别:hdfs,地址书写格式:
{“urlName”:“hdfs://192.168.1.23:9000/”,“userName”:“root”, “rootPath”:“/hdfs”,“bCacheEnable”:true}

urlName/userName:hdfs url/ 用户名
rootPath:设置根目录,方便读取远程存储文件时使用相对路径
bCacheEnable:启用缓存,缺省为 false 无缓存,仅支持私有模式

Object Storage Service

1,存储服务商类别:oss,地址书写格式:
{“accessKey”:“LTII5tRgzS8Ns2arNpjU73Wt”,“secretKey”:“4dSAtbejF6arKpfJjUAxhO26JGaytM”,“endPoint”:“http://oss-cn-beijing.aliyuncs.com”}

Mount

1,存储服务类别:Mount,地址书写格式:
{“rootPath”:“/mnt”}
rootPath:设置根目录,读取远程存储文件时使用的路径