【Flink系列】部署篇(二):独立部署高可用Flink集群实战

news2024/11/18 18:42:59
  • 服务器操作系统:centos7
  • 本机操作系统:Mac
  • Flink version: 1.15
  • JDK version: java11
  • HA service: Zookeeper
  • File System: NFS

资源分配:

iphostnamerole
10.250.0.1main0JM
10.250.0.2main1JM
10.250.0.3main2JM
10.250.0.4worker1TM
10.250.0.5worker2TM

环境准备

远程登录工具:iTerm

远程登录5台服务器,⌘(command) + ⇧(shift) + i快捷键同时操作它们。若登录账号非root账号,建议切换为root账号

关闭SeLinux

$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
$ reboot
$ sestatus

配置hostname

$ hostnamectl set-hostname main0 #main1,main2,worker1~2
$ hostnamectl status
$ vi /etc/hosts 
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.250.0.1: main0
10.250.0.2: main1
10.250.0.3: main2
10.250.0.4: worker1
10.250.0.5: worker2

同步时间

$ yum install ntp -y
$ crontab -e
$ crontab -l
0 * * * * /usr/sbin/ntpdate cn.pool.ntp.org

配置ssh免密登录

# 1. 生成密钥
$ ssh-keygen
# 2. 复制各自的公钥到其它服务器的authorized_key
$ ssh-copy-id -i ~/.ssh/id_rsa.pub main0 #main1,main2,worker1~2

关于复制公钥涉及到服务器之间的相互访问,可能会要求你输入root账号的密码,如果不知道可以通过手工复制粘贴代替ssh-copy-id命令。

详情可参考:
ssh免密登录遇到过的坑

安装Java11

安装flink之前需要装好java,1.15之后的版本只支持java11,不再支持java8.

$ yum search java|grep jdk
$ yum install -y java-11-openjdk
$ yum install java-11-openjdk-devel -y
$ java -version

Zookeeper HA 服务环境准备

Zookeeper集群搭建

Standalone部署模式下的flink集群只支持zookeeper高可用服务,所以若要部署Jobmanager高可用,必须部署zookeeper。

我选择将所有安装包都安装在/opt目录下。zookeeper只涉及到前三台服务器,因此以下操作仅用于前三台服务器(main0,main1,main2)

$ cd /opt

$ wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz --no-check-certificate
$ tar -xzf apache-zookeeper-3.7.1-bin.tar.gz'
# 重命名
$ mv apache-zookeeper-3.7.1 zookeeper

进入解压后的目录,修改配置文件zoo.cfg(默认只有zoo_sample.cfg,zoo.cfg需要自建)

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
server.1=10.250.0.1:2888:3888
server.2=10.250.0.2:2888:3888
server.3=10.250.0.3:2888:3888

进入配置文件中定义的dataDir目录,创建myid文件,在myid文件中写入各自的id。配置文件中server.1=10.250.0.1:2888:3888里面的server.1 1就是id号。因此myid文件分别写入1,2,3即可。

$ cd /opt/zookeeper/data
$ vi myid
  1  # 三台机器不一样,其它为2,3
$ nohup bin/zkServer.sh start >> /dev/null 2>&1 &

启动后可通过 ps -aux|grep zkServer 命令查看进程是否启动成功。也可以通过jps命令查看是否有QuorumPeerMain进程

启动失败可以进入/opt/zookeeper/logs查看对应的log。我这边的失败原因有:myid配置目录和zoo.cfg文件中的dataDir不一致;端口被占用。

NFS 配置

之所以配置NFS是因为配置Flink的zookeeper HA 服务需要配置可共享的文件存储(High-availability.storageDir must be a durable file system that is accessible from all nodes)官方示例给的hdfs,但是考虑到hdfs太笨重,我们的任务量也不大,我选择了更轻量的NFS。我的NFS服务是直接向同事申请的,同事提供了远程目录,我直接挂载到我的三台jobmanager服务器的/mnt/flink/ha/位置,之后这个目录就将配置为flink中的High-availability.storageDir

$ rpm -qa|grep nfs
$ rpm -qa|grep rpc
# if not installed, install nfs
$ yum -y install nfs-utils rpcbind
# verify
$ rpm -qa nfs-utils rpcbind

# moutn local dir to remote dir
mount -t nfs -o nolock 远程目录 /mnt/flink/ha/

Flink集群部署与配置

下面操作对象为所有服务器

下载并解压

$ cd /opt
$ wget https://dlcdn.apache.org/flink/flink-1.15.2/flink-1.15.2-bin-scala_2.12.tgz --no-check-certificate
$ tar -xzf flink-*.tgz

Configure masters in conf/masters:

main0:8081
main1:8081
main2:8081

Configure workers in conf/workers:

worker1
worker2

配置 conf/flink-conf.yaml

完整文件太长,不同机器不完全一样,下面仅列出worker1的配置项(去除了注释)

jobmanager.rpc.address: localhost
jobmanager.rpc.port: 6123
jobmanager.bind-host: 0.0.0.0
jobmanager.memory.process.size: 1600m
taskmanager.bind-host: 0.0.0.0
taskmanager.host: worker1(服务器worker2上写worker2)
taskmanager.memory.process.size: 8192m
taskmanager.memory.managed.size: 0m
taskmanager.numberOfTaskSlots: 8
parallelism.default: 1
high-availability: zookeeper
high-availability.storageDir: file:///mnt/flink/ha/
high-availability.zookeeper.quorum: main0:2181,main1:2181,main2:2181
high-availability.zookeeper.path.root: /opt/flink-1.15.2/cluster_nodes
high-availability.cluster-id: /cluster_one
jobmanager.execution.failover-strategy: region
rest.address: localhost
rest.bind-address: 0.0.0.0

启动和关闭集群

# start cluster
$ bin/start-cluster.sh
# close cluster
$ bin/stop-cluster.sh

开启集群后可以在10.250.0.1:8081上看到UI界面
在这里插入图片描述

启动集群后也可以关闭具体的某个taskmanager

$ bin/taskmanager.sh stop

同一台机器可以启动多个taskmanager(前提是资源够)

$ bin/taskmanager.sh start

Flink集群功能测试

关掉或kill掉一个taskmanager,可以看到运行的任务重启在另一个taskmanager上。

关掉或kill掉当前的jobmanager leader,可以在另一个jobmanager的 UI界面上监测到任务从恢复点恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud Eureka的使用

Spring Cloud Eureka 🐻 一个服务注册与发现的组件 🐻🐻🐻🐻🐻🐻ZT😄🐻🐻🐻🐻🐻🐻🐻🐻…

SAP S/4HANA 采购订单处理操作详解

SAP S 4HANA Cloud 被 IDC 评为全球 SaaS 和云 ERP 系统领导者。SAP S4HANA Cloud是一套接近于零配置的系统,基于最佳业务实践的配置已经内嵌在标准版本中,可以让购买企业在第一时间内获得最全面的解决方案。本文就以其中最为常见的采购订单创建及处理流…

一页PPT自动生成短视频的研究

希望通过一些技术,将以前自己讲过的PPT转换成有解说的短视频,从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS,这其中我也是用了各式各样的TTS,发现发音电子音非常强,听听起来很不舒服。后来发现…

Spring 事务和事务的传播机制

1.Spring 中事务的实现方式Spring 中的操作主要分为两类: 编程式事务 (了解)声明式事务编程式事务就是手写代码操作事务, 而声明式事务是利用注解来自动开启和提交事务. 并且编程式事务用几乎不怎么用. 这就好比汽车的手动挡和自动挡, 如果有足够的的钱, 大部分人应该都会选择自…

NPDP认证|如何实现产品的组合管理?

随着企业中研发项目类型和数量的增多,涉及的范围越来越宽广,内容越来越复杂,时效性也越来越强,传统的分散式的项目管理思想已经很难满足企业的需求。 为了使技术和资源能够得到有限的配置和利用,企业就需要把各种类型的研发项日进行有机的结合。 组合管理很重要吗? 答案是勿庸…

Vue知识点

Vue基础语法 插值操作 Mustache语法 可以直接写变量&#xff0c;也可以写简单的表达式 {{firstName lastName}}’ {{firstName lastName}} {{firstName}} {{lastName}} 其他指令使用 v-noce&#xff1a; <h2 v-once>{{message}}</h2> 某些情况下&#xff…

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份

shell 脚本实现 k8s 集群环境下指定 ns 资源的 yaml 文件备份需求说明功能实现shell 脚本实现shell 使用方式前置工具环境安装dump-k8s-yaml.sh 使用方式输入命令 bash ./dump-k8s-yaml.shdump-k8s-yaml.sh 应用举例dump-k8s-yaml.sh 输出日志信息参考文档需求说明 在基于 k8s…

【Java寒假打卡】Java基础-字符流

【Java寒假打卡】Java基础-字符流编码表字符串中的编码和解码问题字节流读取文本文件出现乱码的原因字符流读取中文的过程字符流写出数据字符流输出数据注意事项flush和close方法字符流读取数据案例-保存键盘录入的数据字符缓冲输入流字符缓冲输出流缓冲流的特有方法案例-读取文…

【算法】广度优先遍历 (BFS)

目录1.概述2.代码实现3.应用1.概述 &#xff08;1&#xff09;广度优先遍历 (Breadth First Search)&#xff0c;又称宽度优先遍历&#xff0c;是最简便的图的搜索算法之一。 &#xff08;2&#xff09;已知图 G (V, E) 和一个源顶点 start&#xff0c;宽度优先搜索以一种系…

让我用Python自制软件,看视频畅通无阻

前言 一个账号只能登录一台设备&#xff1f;涨价就涨价&#xff0c;至少还能借借朋友的&#xff0c;谁还没几个朋友&#xff0c;搞限制登录这一出&#xff0c;瞬间不稀罕了 这个年头谁还不会点技术了&#xff0c;直接拿python自制一个可以看视频的软件… 话不多说&#xff0…

终于弄懂了 非极大抑制 NMS

NMS的作用就是有效地剔除目标检测结果中多余的检测框&#xff0c;保留最合适的检测框。 以YOLOv5为例&#xff0c;yolov5模型的输入三个feature map的集合&#xff0c;加上batch的维度&#xff0c;也就是三维张量&#xff0c;即[batch&#xff0c;(p0∗p0p1∗p1p2∗p2)∗3&…

SWC步骤

纲要&#xff1a; SWC属于AUTOSAR的Component文件夹下&#xff0c;而Composition属于Composition文件夹下。 目录 1. Import "Data Type" and "Interface" information 2. Creat Software Component(SWC) 3. Create "Port" for this SWC 4.…

nexus raw 仓库代理(node-sass离线安装node-sass: Command failed)

问题背景 内网环境中使用 node 构建项目&#xff0c;项目中依赖了 node-sass&#xff0c;环境自动下载 node-saas 失败&#xff08;内网&#xff09;。 下面是构建 node-sass 的错误代码&#xff1a; [5/5] Building fresh packages... error /workspace/node_modules/node-…

nuxt概念

文章目录前言nuxt项目结构介绍网页导航文字显示&#xff08;商标&#xff09;package.jsonnuxt.config.js路由固定路由动态路由总结前言 首先了解下B2C模式&#xff0c;分前后台&#xff0c;后台一般为管理系统&#xff0c;不需要展示给过多的用户&#xff0c;而前台需要展示给…

2023年有哪些具备潜力的加密投资标的?

随着2022年一系列的黑天鹅事件&#xff08;Terra、Luna的暴雷、FTX、Three Arrows Capital等知名加密机构的破产&#xff09;&#xff0c;加密货币总市值已经从最高点的2.9万亿美元&#xff08;2021年的11月&#xff09;&#xff0c;下降到8500亿美元&#xff08;与2021年1月的…

NKOJ P7842 疫情防控

分析 这道题的本质就是找可以使得每座城市有且仅有一条道单行路进入该市的图有什么特点; 首先,我们假设图联通,则由于每个城市只有一条单行道可以进入,即一个城市必须有且仅有一条单行道与之配对,所以这个图至少要有nnn条边,即图中必须要有环才可以满足要求! 那如果图不连通…

Java多线程之读写锁ReentrantReadWriteLock类使用

在JDK中提供了一种读写锁ReentrantReadWriteLock类&#xff0c;相比ReentrantLock类&#xff0c;使用前者可以加快运行效率。ReentrantLock类是具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()方法后面的任务&#xff0c;这样做虽然保证了…

【UE4 第一人称射击游戏】40-改变武器的可见性

上一篇&#xff1a;【UE4 第一人称射击游戏】39-“M4A1”武器设置本篇效果&#xff1a;步骤&#xff1a;打开“Weapon_M4A1”&#xff0c;删除带有“AK47”的那个骨架网格体打开事件图表&#xff0c;将“SkeletalMesh1”拖入打开“ThirdPersonCharacter”&#xff0c;在事件图表…

Docker:独具魅力的开源容器引擎

Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux 或 Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#…

MATLAB-控制系统模型之间的转换

系统的线性时不变&#xff08;LTI&#xff09;模型有传递函数&#xff08;tf&#xff09;模型、零极点增益&#xff08;zpk)模型和状态空间(ss&#xff09;模型,它们之间可以相互转换。模型之间的转换函数可以分为以下两类。第一类是把其他类型的模型转换为函数表示的模型自身&…