杜龙少(sdvdxl)

SpringXD HA 配置

Word count: 1,055 / Reading time: 4 min
2016/06/29 Share

SpringXD官方文档 上说的不是很清楚而且有些配置如 配置 hadoop namenode ha 并没有在上面说明只是简单的说明了怎么配置namenode如果没有ha配置那么在生产环境中会令人头痛

XD Admin HA

说明

官方文档有说如何配置就是通过启动多个admin然后通过 zookeeper 管理
Spring XD 要求只有一个主节点来和 Container 交互例如 Stream 发布等同时这些操作都是按顺序处理的假如只有一个admin那么就存在单点失败的风险因此在生产环境中推荐做法是启动 2 个或者多admin注意在有多个 admin 节点的时候每个 admin 都可以处理 REST 请求但是只有一个实例会作为 Leader 处理请求并更新运行时的状态如果 Leader 宕掉另一个可用的admin就会成为新的 Leader 来接管任务当然Spring XD 的HA不只是他自身要求ha还需要依赖外部服务zookeeperMessageBus 等 HA 配置

配置信息

如果要配置 admin 的 ha那么启动多个 admin 即可但是请注意如果是在同一台机器上部署多个admin需要在启动时候添加如下参数以防止和默认的端口9393冲突
--httpPort 用来指定rest api端口
--mgmtPort 用来指定管理端口
如果在不同机器上启动只需配置相同的配置文件然后启动即可

XD Container HA

当添加 Container 的时候Spring XD 可以动态水平扩展也就是说不需要额外什么操作只需像第一次启动 Container 一样输入命令 bin/xd-container 启动即可

XD Hadoop namenode HA

如果 xd 中创建 stream 或者其他任务是用到了 hdfs 的功能那么要配置 hadoopnamenode要在 xd/config/servers.xml中的 spring.hadoop.fsUri 的配置项中配置注意这个地方只允许配置一个host如果有备用namenode是不允许配置在这个地方的但是这样配置是有问题的就是存在 hadoopnamenode 主从切换后 xd 的 stream 无法写入 hdfs 或者读取 hdfs 的故障要解决这个问题我们要再 xd/config/hadoop.properties 中配置如下配置项

1
2
3
4
5
dfs.nameservices=MyCluster
dfs.ha.namenodes.MyCluster=nn1,nn2
dfs.namenode.rpc-address.MyCluster.nn2=hadoop-master1-host:8020
dfs.namenode.rpc-address.MyCluster.nn1=hadoop-master2-host:8020
dfs.client.failover.proxy.provider.MyCluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

其中配置项中所有的 MyCluster 要换成自己项目中 hadoop 集群的名字然后在 xd/config/servers.xmlspring.hadoop.fsUri 值配置成 hdfs://MyCluster:8020注意8020端口换成自己配置的hadoop-master1-hosthadoop-master1-host 换成自己集群的 hadoop的 master 的主机名字或者ip这样配置后重新启动 admincontainer 就会自动检测 hadoop 的 namenode 主从并自行切换
如果要在 xd-shell中使用需要登录shell之后如果有安全设置还需要先用密码登录成功输入一下命令

1
2
3
4
5
6
hadoop config props set --property dfs.nameservices=MyCluster
hadoop config props set --property dfs.ha.namenodes.MyCluster=nn1,nn2
hadoop config props set --property dfs.namenode.rpc-address.MyCluster.nn1=hadoop-master1-host:8020
hadoop config props set --property dfs.namenode.rpc-address.MyCluster.nn2=hadoop-master2-host:8020
hadoop config props set --property dfs.client.failover.proxy.provider.MyCluster=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
hadoop config fs --namenode hdfs://MyCluster

MyClusterhadoop-master1-hosthadoop-master2-host 同上配置对于 shell 来说单纯配置 hadoop 的主 namenode也是可以的因为这个配置只是对 shell 起作用如果觉得每次打开shell都要输入上面几行配置太繁琐的话可以将 xd/config/hadoop.properties 中配置的项目添加一份到shell/config/hadoop.properties 即可这样在shell中操作hdfs只需配置 hadoop config fs --namenode hdfs://MyCluster:8020 即可

附言

对于如何在xd中使用hadoopnamenode ha配置xd 官方文档中并未见说明而是百般Goole之后得到的结果而且由于xd资料尚少搜索结果不佳最后通过搜索关键词 xd namenode fail 才找到解决方案请参见这里

CATALOG
  1. 1. XD Admin HA
    1. 1.1. 说明
    2. 1.2. 配置信息
  2. 2. XD Container HA
  3. 3. XD Hadoop namenode HA
    1. 3.1. 附言