环境准备
JobManager单节点必然会有单节点故障问题的产生,所以我们可以在StandAlone模式下,借助于Zookeeper,将我们的JobManager实现成为高可用的模式,使用Hadoop Hdfs存储文件。
- Java
- Hadoop
- Zookeeper
- Flink
我的配置
机器 | zookeeper:2181 | Hadoop HDFS | Hadoop YARN | Flink |
redis01 | leader | NameNode、SecondaryNameNode、DataNode | NodeManager、ResourceManager | JobManager、TaskManager |
redis02 | follower | DataNode | NodeManager | JobManager、TaskManager |
redis03 | follower | DataNode | NodeManager | TaskManager |
修改配置
- redis01执行以下命令修改Flink的配置文件 redis01修改
flink-conf.yaml
配置文件
root@redis01:/usr/local/flink-standalone/conf# vim flink-conf.yaml
jobmanager.rpc.address: redis01 high-availability: zookeeper high-availability.storageDir: hdfs://redis01:8020/flink high-availability.zookeeper.path.root: /flink high-availability.zookeeper.quorum: redis01:2181,redis02:2181,redis03:2181
- redis01执行以下命令修改master配置文件
# 切换到配置目录 cd /usr/local/flink-standalone/conf # 修复主节点 vim masters redis01:8081 redis02:8081
- redis01 执行以下命令修改slaves配置文件
- 修改workers文件
# 切换到配置目录 cd /usr/local/flink-standalone/conf # 修复节点 vim workers redis01 redis02 redis03
HDFS创建文件夹
hdfs上面创建flink对应的文件夹
root@redis01:/usr/local/hadoop/bin# hdfs dfs -mkdir -p /flink
下载Flink-Hadoop的包
- 下载好放入
/usrl/local/flink-standalone/lib
目录下
分发配置文件
将redis01服务器修改后的配置文件拷贝到其他服务器上面去, redis01执行以下命令拷贝配置文件
root@redis01:/usr/local/flink-standalone/conf# xsync flink-conf.yaml root@redis01:/usr/local/flink-standalone/conf# xsync masters root@redis01:/usr/local/flink-standalone/conf# xsync workers root@redis01:/usr/local/flink-standalone/lib# xsync flink-shaded-hadoop-2-uber-2.8.3-10.0.jar
启动Flink集群
启动顺序:先启动Zookeeper和HDFS,再启动Flink。
root@redis01:/usr/local/flink-standalone# ./bin/start-cluster.sh
页面访问
访问:http://redis02:8081 ,redis02的web界面一直提示错误。因为此时,我们的redis01服务器才是真正的active状态的节点.
模拟故障宕机实现自动切换
将redis01服务器的jobManager进程杀死,然后过一段时间之后查看redis02的jobManager是否能够访问。
sudo kill 235177
访问:http://redis02:8081 ,可以正常访问了。
StandAlone HA模式下提交任务
在HA这种模式下,提交任务与standAlone单节点模式提交任务是一样的,即使JobManager服务器宕机了也没有关系,会自动进行切换 redis01执行以下命令启动socket服务,输入单词。
root@redis01:/usr/local/flink-standalone# nc -lk 9000
root@redis01:/usr/local/flink-standalone# ./bin/flink run examples/streaming/SocketWindowWordCount.jar --hostname redis01 --port 9000
- redis02服务器执行以下命令查看统计结果
root@redis02:/usr/local/flink-standalone/log# tail -200f flink-root-taskexecutor-4-redis02.out
停止
root@redis01:/usr/local/flink-standalone# ./bin/stop-cluster.sh