杜龙少(sdvdxl)

以分布式方式运行Spring-XD

Word count: 1,424 / Reading time: 6 min
2016/03/09 Share

简介

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

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

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

MySQLPostGresql选其中一个配置即可当然还有Oracle也可以配置但是在这里没有列出可以]参考官方文档
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

streamjob的数据传输需要用到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

注意依赖于gccmakeUbuntu系列如果没有安装 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和管理相关streamjob
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.
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.