o点击蓝色“Java极客技术”关注我哟
加个“星标”,一起快乐成长
这是 Java 极客技术的第 277 篇原创文章
1 前言
前面理论性的知识是不是有点太“干货”,所以来点实战性的内容吧,这次记录了如何搭建高可用的 Flink
集群。
在正式配置前,来讲下为何要配置高可用(High Availability
)
目前越来越多公司的线上应用,都采用的是分布式架构(一主多从),从而避免单点故障引起的服务不可用。
而在 Flink
中,同样也有集群保障服务的高可用,任何时候都有一个主 JobManager
和多个备 JobManager
,当前主节点宕机后,立刻会有备 JobManager
当选成为主 JobManager
,接管集群,让每个作业继续正常进行。
出于这样的考虑,在 Flink
应用上线前,需要有这样一个集群来进行保障,下面就来看下该如何进行配置吧。
2 前置工作
2.1 机器准备
在本次搭建前,我通过了本地单机模拟,监听了 8081 和 8082 端口,启动了两个 JobManager
和三个 TaskManager
。
序号 | IP | 启动进程 | UI PORT |
---|---|---|---|
1 | 127.0.0.1 | JobManager、TaskManager | 8081 |
2 | 127.0.0.1 | JobManager、TaskManager | 8082 |
3 | 127.0.0.1 | TaskManager | / |
一般来说,JobManager
任务调度器所在的机器配置可以低一些,而 TaskManager
任务执行者所在的机器配置会高一些,所以基于上述机器的配置,请各位使用时进行合理分配。
2.1.2 机器之间 SSH 免密登录
本质上,我们只需要修改一份配置,然后将修改后的 Flink
包通过 SCP
命令传送到其它机器上。
接着在单台服务器上启动,它会根据 masters
和 slaves
文件找到对应的服务器,登录上去,判断启动 JobManager
、TaskManager
或者两者都启动。
总结一下机器之间 SSH 免密登录的要点:
1. 每台机器生成公私钥:ssh-keygen
命令
2. 将本机生成的公钥(id_rsa.pub
)拷贝到其它机器的认证列表中(authorized_keys
)
使用该命令 ssh-copy-id -i id_rsa.pub root@118.25.xxx.xxx
3. 重复上述命令,将本机的公钥添加到集群中的每一台服务器上
4. 免密登录所在的服务器,就是待会我们启动 ./start_cluster.sh
脚本所在的服务器哟
参考上面的图片,将公钥拷贝到远程服务器后,我们就能通过 ssh root@xxx.xxx.xx.xx
,免密码登录到远程服务器啦。
2.2 安装 Zookeeper
为了启用 JobManager
高可用这个功能,需要在 flink_conf.yaml
中将 高可用模式 设置为 zookeeper
Flink
利用 Zookeeper
管理 JobManager
和 TaskManager
,进行分布式协调(熟悉 Dubbo
系的小伙伴,应该对我们的 Zookeeper
注册中心感到熟悉)。
Zookeeper
是独立于 Flink
的一项服务,该服务通过节点选举和轻量级一致状态存储提供高