【Flink原理和应用】: Flink Standalone模式的高可用性搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxcaifly/article/details/87892689

1. 前言

Flink的standalone模式的高可用部署,需要依赖于ZooKeeper和Hadoop的hdfs。本次集群部署选用的三台服务器ip为:

10.35.108.81
10.35.108.82
10.35.108.83

前期准备工作:

  1. ZooKeeper的部署工作完成:三台服务器集群,其中81是leader节点。82和83是follower节点。
  2. HDFS安装完成:83节点开启的NameNode和SecondaryNode。81和82开启DataNode。数据块的备份数是2。

搭好这些准备工作之后,我们就开始Flink的集群搭建了。

2. Flink standalone模式的集群搭建

安装目标

  1. 在81,82,83这三台服务器各自开启TaskManager。
  2. 在81,82,83这三台服务器各自开启JobManager。这三个JobManager要支持容错。

2.1. 配置域名

  1. 三台服务器都配置/etc/hosts:
10.35.108.83 master
10.35.108.82 node1
10.35.108.81 node2
  1. 三台服务器都配置./etc/hostname。
    这是每台分别配置。
  • 83配上:master
  • 82配上:node1
  • 81配上:node2

配上之后域名不会直接生效。需要reboot机器。

2.2. Flink安装包下载

官网下载Flink的hadoop版本:flink-1.7.0-bin-hadoop28-scala_2.11.tgz。并且解压:

tar zvxf flink-1.7.0-bin-hadoop28-scala_2.11.tgz
cd flink-1.7.0

三台服务器都要放置安装包

2.3 配置

公共配置说明

三台服务器做相同的配置如下:

  1. 配置安装目录里的conf/masters:
master:8081
node1:8081
node2:8081
  1. 配置安装目录里的conf/slaves:
master
node1
node2

各自配置说明
这里主要是配置下conf/flink-conf.yaml。

  1. 10.35.108.81服务器配置:
#============== 常用配置=========
jobmanager.rpc.address: 10.35.108.81
jobmanager.rpc.port: 6123
jobmanager.heap.mb: 1024
taskmanager.heap.mb: 4096
taskmanager.numberOfTaskSlots: 24
parallelism.default: 24

#================Web端配置========
jobmanager.web.address: 10.35.108.81
web.port: 8081

#===============高可用性配置=========
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/ha
high-availability.zookeeper.quorum: master:2181, node1:2181, node2:2181
high-availability.zookeeper.path.root: ./flink
high-availability.cluster-id: /cluster_one

#===============checkpoint========== 配置
state.backend: filesystem 
state.checkpoints.dir: hdfs:///flink-checkpoints
state.savepoints.dir: hdfs:///flink-savepoints
state.checkpoints.num-retained: 20
  1. 10.35.108.82服务器配置:
#============== 常用配置=========
jobmanager.rpc.address: 10.35.108.82
jobmanager.rpc.port: 6123
jobmanager.heap.mb: 1024
taskmanager.heap.mb: 4096
taskmanager.numberOfTaskSlots: 24
parallelism.default: 24

#================Web端配置========
jobmanager.web.address: 10.35.108.82
web.port: 8081

#===============高可用性配置=========
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/ha
high-availability.zookeeper.quorum: master:2181, node1:2181, node2:2181
high-availability.zookeeper.path.root: ./flink
high-availability.cluster-id: /cluster_one

#===============checkpoint========== 配置
state.backend: filesystem 
state.checkpoints.dir: hdfs:///flink-checkpoints
state.savepoints.dir: hdfs:///flink-savepoints
state.checkpoints.num-retained: 20
  1. 10.35.108.83服务器配置:
#============== 常用配置=========
jobmanager.rpc.address: 10.35.108.83
jobmanager.rpc.port: 6123
jobmanager.heap.mb: 1024
taskmanager.heap.mb: 4096
taskmanager.numberOfTaskSlots: 24
parallelism.default: 24

#================Web端配置========
jobmanager.web.address: 10.35.108.83
web.port: 8081

#===============高可用性配置=========
high-availability: zookeeper
high-availability.storageDir: hdfs:///flink/ha
high-availability.zookeeper.quorum: master:2181, node1:2181, node2:2181
high-availability.zookeeper.path.root: ./flink
high-availability.cluster-id: /cluster_one

#===============checkpoint========== 配置
state.backend: filesystem 
state.checkpoints.dir: hdfs:///flink-checkpoints
state.savepoints.dir: hdfs:///flink-savepoints
state.checkpoints.num-retained: 20

对于flink-conf.yaml文件的配置。除了jobmanager.rpc.addressjobmanager.web.address都各自配置自己的ip之外,其他的配置一模一样。

扫描二维码关注公众号,回复: 5306488 查看本文章

这里特别要注意下对于高可用性配置部分。其中high-availability,high-availability.storageDirhigh-availability.zookeeper.quorum这三项是必须配置的。后两项high-availability.zookeeper.path.roothigh-availability.cluster-id配置是可选的,但是建议最后是配置上固定的值。

2.4. 启动

在83服务器执行:

./bin/start-cluster.sh

打印日志如下:

Starting HA cluster with 3 masters.
Starting standalonesession daemon on host master.
Starting standalonesession daemon on host node1.
Starting standalonesession daemon on host node2.
Starting taskexecutor daemon on host node2.
Starting taskexecutor daemon on host node1.
Starting taskexecutor daemon on host master.

从日志可以清楚地看到,83节点启动flink集群,他会远程操作把82和81的jobmanager和taskmanager都起来。

但是要注意,如果这一步启动失败了,那请配置下免密登录。就是83启动程序时要免密登录到82和81,进行远程操作。

启动完成之后,通过访问Flink WebUI来查看flink的运行状态。

分别访问:http://10.35.108.81:8081, http://10.35.108.82:8081和http://10.35.108.83:8081发现。界面都会自动跳转到http://10.35.108.83:8081, 说明此时83是主节点。 可以发现jobmanager下面管理的3个jobmanager都运行正常。

总结

集群服务的高可用性环境搭建,这里其实还可以优化,那就是域名的优化。这里利用linux服务器自带的/etc/hosts来映射ip和域名。有如下的几点缺陷:

  1. 每台服务器都需要维护域名和ip的映射关系。这其实是一件很麻烦的事情。
  2. flink的jobmanager的主节点宕机之后,虽然备节点可以继续充当主节点的角色。但是对于上面的应用层还是无感知的。当jobmanager的主备发生切换了,上层应用不能通过一个固定的域名来访问flink服务。

对此。笔者,搭建了一套私有域名解析服务,对于构建集群环境大有裨益。可以参考:etcd+skydns构建私有域名解析服务器

有了这套私有域名解析服务之后,一方面,通过公共的域名管理来维护集群环境内的域名IP映射关系非常方便。另一方面,通过etcd的watch机制,可以让flink的jobmanager在主备切换的时候,让flink对外提供服务的域名所指向的ip切换到新的主节点,从而无缝地继续为上层业务提供服务。上层业务只要记住这个固定的flink服务域名即可。

猜你喜欢

转载自blog.csdn.net/hxcaifly/article/details/87892689