杜龙少(sdvdxl)

以分布式方式运行Spring-XD

字数统计: 1.3k阅读时长: 5 min
2016/03/09 Share
(文章比较久了可能已经过时)

主要以官方文档说明进行配置

简介

Spring XD分布式运行环境(DIRT)支持以分布式方式运行多个跨节点的任务。参见Getting Started获取以单个节点运行方式的信息。

XD的分布式运行架构主要由以下组件构成:

  • Admin 主要用于管理Stream,Job的发布,用户操作,和提供运行时相关的状态,系统统计和分析的REST服务
  • Container 托管发布的模块(Stream处理任务)和批量任务
  • ZooKeeper 提供所有XD运行时的信息。追踪Container信息,如:modules,jobs发布情况,steam定义,发布状态等。
  • Spring Batch Job Repository Database –这个要求要配置一个关系型数据库。XD包含了HSQLDB,但是不推荐用在生产环境中。XD支持任何JDBC型数据库。
  • A Message Broker –用于数据传输。XD的数据传输模块设计成了插拔式。当前XD版本支持Rabbit MQRedis,这两个都支持stream和job过程产生的数据的传输,Kafka仅支持steam产生的数据传输。请注意:job使用Kafka作为数据传输是不稳定的。这个项目必须要配置一个作为数据传输的插件(推荐Redis)。
  • Analytics Repository – XD目前用Redis作为counters和gauges分析的存储方式。
    XD的分布式运行环境概览如下:
    distributed-runtime-overview

Server Configuration

默认查找$XD_HOME/config/servers.yml文件,作为配置文件。
但是可以使用XD_CONFIG_LOCATION环境变量改变配置文件夹,使用XD_CONFIG_NAME改变配置文件位置,如:

1
2
export XD_CONFIG_LOCATION=file:/xd/config/
export XD_CONFIG_NAME=region1-servers
  • 注意,XD_CONFIG_LOCATION最后的/是必须的。

Database Configuration

MySQL,PostGresql选其中一个配置即可,当然还有Oracle也可以配置,但是在这里没有列出,可以[]参考官方文档](http://docs.spring.io/spring-xd/docs/1.3.1.RELEASE/reference/html/#_database_configuration)
xd-singlenode模式是使用了一个嵌入式HSQLDB数据库,运行分布式模式的时候,可以使用独立的HSQLDB,但是仅仅推荐在学习和开发的时候使用它,正式环境最好使用其他比如MySQLPostgres等等数据库。

  • 注意:如果在stream模块中使用除了PostgresHSQLDB数据库,那么需要把对应的驱动放到$XD_HOME/lib目录。
    servers.yml文件中已经注释了一部分jdbc配置信息,可以按需更改。

MySQL配置

1
2
3
4
5
6
spring:
datasource:
url: jdbc:mysql://yourDBhost:3306/yourDB
username: yourUsername
password: yourPassword
driverClassName: com.mysql.jdbc.Driver

Postgresql配置

1
2
3
4
5
6
spring:
datasource:
url: jdbc:postgresql://yourDBhost:5432/yourDB
username: yourUsername
password: yourPassword
driverClassName: org.postgresql.Driver

Redis

stream和job的数据传输需要用到(Rabbit MQ也可以)(当用作数据分析时候也需要),这里推荐统一使用redis作为配置,

1
2
3
4
5
6
7
8
9
spring:
redis:
port: 6379
host: localhost
pool:
maxIdle: 8 # max idle connections in the pool
minIdle: 0 # min idle connections in the pool
maxActive: -1 # no limit to the number of active connections
maxWait: 30000 # time limit to get a connection - only applies if maxActive is finite

安装redis

官网下载最新的redis,然后解压,进入redis根目录,

1
2
3
4
cd deps
make hiredis jemalloc linenoise lua
cd ..
make install

注意:依赖于gcc和make(Ubuntu系列如果没有安装 apt-get install gcc make)

开启页面登录密码保护

默认ui管理界面是没有安全配置的,不需密码即可访问,为了安全起见,我们可以设置登录用户和密码。

1
2
3
4
5
6
7
8
9
10
spring:
profiles: admin (1)
security:
basic:
enabled: true (2)
realm: SpringXD
user:
name: yourAdminUsername
password: yourAdminPassword
role: ADMIN, VIEW, CREATE

注意:spring.batch.initializer.enabled默认是true,会使Spring Bath初始化表结构。

启动admin

admin只会有一个,用来协调container和管理相关stream,job等。
xd/bin/xd-admin

启动container

container可以启动多个,也就是组成多个节点,由此构成分布式运行环境。

1
xd/bin/xd-container

创建Stream

进入$XD_HOME/shell/,控制台输入bin/xd-shell,进去xd命令行交互模式,然后输入

1
stream create --name foo --definition 'time | log' --deploy

即可看见admin日志(控制台没关闭的话也可以看到)有时间信息输出。

下面这个stream是从kafka读取信息,然后传输到log里,所以需要配置kafka,请查阅kafka相关资料。

1
stream create --name kafkaDevice --definition 'kafka --outputType=text/plain --zkconnect=10.10.1.20:2181 --topic=kafka_test --offsetStorage=redis | log ' --deploy

最后贴出一份比较完整的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
security:
basic:
enabled: true
realm: SpringXD
user:
name: hekr
password: hekr
# 必须配置角色才会生效
role: ADMIN, VIEW, CREATE
spring:
redis:
port: 6379
host: 127.0.0.1
pool:
maxIdle: 8 # max idle connections in the pool
minIdle: 0 # min idle connections in the pool
maxActive: -1 # no limit to the number of active connections
maxWait: 30000 # time limit to get a connection - only applies if maxActive is finite
#sentinel:
# master: mymaster
# nodes: 127.0.0.1:26379,127.0.0.1:26380,127.0.0.1:26381
batch:
isolationLevel: ISOLATION_SERIALIZABLE
# clobType:
dbType: MYSQL
maxVarcharLength: 2500
tablePrefix: BATCH_
validateTransactionState: true
initializer:
enabled: true
datasource:
url: jdbc:mysql://localhost:3306/xd
username: root
password: hekr
driverClassName: com.mysql.jdbc.Driver
testOnBorrow: true
validationQuery: select 1
zk:
namespace: xd
client:
connect: 10.10.1.20:2181
sessionTimeout: 60000
connectionTimeout: 30000
initialRetryWait: 1000
retryMaxAttempts: 3
xd:
transport: redis

##注意:

  1. 配置权限后,进入xd-shell会显示server-unknown:>, 需要配置一下admin server才能进入交互
1
admin config server --uri http://服务器地址:端口(默认9393) --username 用户名 --password 密码
  1. testOnBorrow默认是true,如果配置为true或者没有配置,则需要配置正确的validationQuery,如果配置不正确则会有类似如下异常出现
    1
    Command failed org.springframework.xd.rest.client.impl.SpringXDException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Failed to validate a newly established connection.

原文作者:杜龙少(sdvdxl)

原文链接:https://todu.top/posts/54199/

发表日期:2016-03-09 14:18:33

更新日期:2021-01-20 23:30:16

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可

CATALOG
  1. 1. 简介
  2. 2. Server Configuration
  3. 3. Database Configuration
    1. 3.1. MySQL配置
    2. 3.2. Postgresql配置
    3. 3.3. Redis
      1. 3.3.1. 安装redis
  4. 4. 开启页面登录密码保护
  5. 5. 启动admin
  6. 6. 启动container
  7. 7. 创建Stream
  8. 8.