1概述
1.1目标
主要的目标是在鲲鹏服务器(aarch64)的机器上基于Java/Python等相关技术栈,完成微服务、监控、大数据、容器、IOT、CI/CD等方案适配实践,积累相关经验。
主要的应用方案适配如下图所示:
1.2适配思路
迁移适配策略选择:
步骤包括:
1)在鲲鹏机器上安装合适的操作系统,如CentOS、Ubuntu等;
2)安装应用编译运行环境、中间件、数据库等,并解决安装过程中出现的问题,做适当记录;
3)应用的部署、运行,并解决这一过程中出现的问题,做适当记录;
4)总结并将记录归档;
软硬件技术迁移适配整体策略:
1.3方案中的适配组件列表
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | InfluxDB | 1.7.6 | Docker | CentOS7.6 |
2 | Mysql | 5.6/5.7 | Package (tar) | CentOS7.7 |
3 | Mariadb | 5.5.56 | YUM | CentOS7.5 |
4 | Nginx | 1.16.0 | Source | CentOS7.5 |
5 | Docker | ce 19.03.8 | Package | CentOS7.5 |
6 | Docker-Compose | 1.22.0 | Source | CentOS7.7 |
7 | K8S集群(master): Kubelet Kubectl Kubeadm kubernetes-cni |
docker-ce 18.06.3-ce kubelet=1.15.1-00 kubeadm=1.15.1-00 kubectl=1.15.1-00 kubernetes-cni |
apt-get install | Ubuntu 18.04.4 LTS |
8 | K8S集群(master) – 镜像 | kube-apiserver-arm64:v1.15.1 kube-controller-manager-arm64:v1.15.1 kube-scheduler-arm64:v1.15.1 kube-proxy-arm64:v1.15.1 pause-arm64:3.1 etcd-arm64:3.3.10 coredns:1.3.1 |
Docker pull | Ubuntu 18.04.4 LTS |
9 | Elasticsearch | 7.4.2 | Package | CentOS7.5 |
10 | Filebeat | 7.4.2 | Package | CentOS7.5 |
11 | Kibana | 7.4.2 | Package | CentOS7.5 |
12 | Logstash | 7.4.2 | Package | CentOS7.5 |
13 | Go | 1.13.9.linux-arm64 | Package | CentOS7.5 |
14 | Openjdk | 1.8.0-222-ea-b03 | Package | CentOS7.5 |
15 | Nodejs | 10.16.0-linux-arm64 | Package | CentOS7.5 |
16 | Php-fpm | 7.2.20 | Source | CentOS7.5 |
17 | Python | 3.7.3 | Source | CentOS7.7 |
18 | yarn | 1.15.0 | Package | CentOS7.7 |
19 | Gitlab | 1.12.x | Docker | CentOS7.7 |
20 | Jekins | 2.x | Docker | CentOS7.7 |
21 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
22 | maven | 3.2 | Package | CentOS7.7 |
23 | Grafana | 6.7.2 | Rpm | CentOS7.5 |
24 | Zabbix | 4.0.0 | Source | CentOS7.5 |
25 | Prometheus | 2.16.0.linux-arm64 | Package | CentOS7.7 |
26 | Node_exporter | 0.18.1.linux-arm64 | Package | CentOS7.7 |
27 | Ambari | 2.7.3 | Package | CentOS7.7 |
28 | HDP | 3.1 | Package | CentOS7.7 |
29 | Spark | 2.3.1.0 | Package | CentOS7.7 |
30 | Anaconda | 4.5.12 | Package | CentOS7.7 |
31 | Kettle | 9.0 | Package | CentOS7.7 |
32 | Rancher(server/client) | 2.4.3-rc2 | Package | Ubuntu 18.04.4 LTS |
33 | Docker portainer | 1.23.2 | Docker | CentOS7.5 |
注:后续有适配软件安装,将持续补充该表
2 基础组件适配
2.1 编译运行环境适配
2.1.1 java环境
JDK(Java Development Kit)是 Java 开发者进行 Java 开发所必须的软件包,包含 JRE(Java Runtime Environment)和编译、调测工具。openEuler在OpenJDK 的基础上进行了 GC 优化、并发稳定性增强、安全性增强等,提高了 Java 应用程序在 ARM 上的性能和稳定性。
有些操作系统中比如Centos7里可能自带JRE环境,通过java -version可以看到版本号,但没有编译工具,需要安装JDK但没必要做JRE的卸载,只需做环境变量设置即可,相关步骤如下:
1)将tar包(jdk-8u232-linux-aarch64.tar.gz)拷贝至想要安装的目录;
2)解压缩软件包;
3)设置JAVA_HOME;
4)设置环境变量并使之生效;
5)检查版本:java -version
2.1.2 python环境
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议。
有些操作系统可能自带Python,比如CentOS7会自带Python 2.7.5。如果需要Python 3.7.X则需自行安装,相关步骤如下:
1)下载tar包(Python-3.7.3.tgz)解压安装包;
2)安装依赖和C编译器;
3)编译安装并创建软连接(可选);
4)检查版本:python -V
2.1.3 go环境
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
安装步骤如下:
将安装文件包(go1.13.9.linux-arm64.tar.gz)下载至目录指定目录;
解压缩安装文件包;
创建gopath目录;
设置go的环境变量并使之生效;
5, 检查版本:go version
2.1.4 NodeJS环境
简单的说 Node.js 就是运行在服务端的 JavaScript。
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。
Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。
而npm是Node.js的包管理工具,用来安装各种Node.js的扩展程序。
安装步骤如下:
1)获取软件包(node-v10.16.0-linux-arm64.tar.xz);
2)解压软件包;
3)为node和npm建立软链接,方便在任意目录下执行该命令,并设置环境变量;
4)检测版本号:node -v, npm -v
2.2数据库适配
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | InfluxDB | 1.7.6 | Docker | CentOS7.6 |
2 | InfluxDB | 2.x | Package(tar) | CentOS7.7 |
3 | Mysql | 5.6/5.7 | Package (tar) | CentOS7.7 |
4 | Mariadb | 5.5.56 | YUM | CentOS7.5 |
2.3中间件适配
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | Nginx | 1.16.0 | Source | CentOS7.5 |
2 | Elasticsearch | 7.4.2 | Package | CentOS7.5 |
3 | Filebeat | 7.4.2 | Package | CentOS7.5 |
4 | Kibana | 7.4.2 | Package | CentOS7.5 |
5 | Logstash | 7.4.2 | Package | CentOS7.5 |
6 | Php-fpm | 7.2.20 | Source | CentOS7.5 |
7 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
2.4容器适配
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | Docker | ce 19.03.8 | Package | CentOS7.5 |
2 | Docker-Compose | 1.22.0 | Source | CentOS7.7 |
3 | Docker portainer | 1.23.2 | Docker | CentOS7.5 |
4 | K8S集群(master): Kubelet Kubectl Kubeadm kubernetes-cni |
docker-ce 18.06.3-ce kubelet=1.15.1-00 kubeadm=1.15.1-00 kubectl=1.15.1-00 kubernetes-cni |
apt-get install | Ubuntu 18.04.4 LTS |
5 | K8S集群(master) – 镜像 | kube-apiserver-arm64:v1.15.1 kube-controller-manager-arm64:v1.15.1 kube-scheduler-arm64:v1.15.1 kube-proxy-arm64:v1.15.1 pause-arm64:3.1 etcd-arm64:3.3.10 coredns:1.3.1 |
Docker pull | Ubuntu 18.04.4 LTS |
6 | Rancher(server/client) | 2.4.3-rc2 | Package | Ubuntu 18.04.4 LTS |
2.4集成工具适配
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | Gitlab | 1.12.x | Docker | CentOS7.7 |
2 | Jekins | 2.x | Docker | CentOS7.7 |
3 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
4 | maven | 3.2 | Package | CentOS7.7 |
2.5其它适配
编号 | 名字 | 版本 | 安装类型 | 操作系统(鲲鹏) |
1 | yarn | 1.15.0 | Package | CentOS7.7 |
2 | Grafana | 6.7.2 | Rpm | CentOS7.5 |
3 | Zabbix | 4.0.0 | Source | CentOS7.5 |
4 | Prometheus | 2.16.0.linux-arm64 | Package | CentOS7.7 |
5 | Node_exporter | 0.18.1.linux-arm64 | Package | CentOS7.7 |
6 | Ambari | 2.7.3 | Package | CentOS7.7 |
7 | HDP | 3.1 | Package | CentOS7.7 |
8 | Spark | 2.3.1.0 | Package | CentOS7.7 |
9 | Anaconda | 4.5.12 | Package | CentOS7.7 |
10 | Kettle | 9.0 | Package | CentOS7.7 |
3适配方案
3.1 微服务应用方案适配
3.1.1 sop应用环境/场景
应用名 | 应用角色 | 应用组件 | 组件角色 | 组件版本 |
sop-eureka | 注册中心 | spring-boot-core | 框架载体 | spring-boot-2.x spring-cloud-2.x |
spring-cloud-eureka-server | 注册中心服务端 | |||
spring-boot-admin-client | 监控客户端 | |||
sop-gateway | 应用网关 | spring-boot-core | 框架载体 | |
spring-cloud-eureka-client | 注册中心客户端 | |||
spring-boot-admin-client | 监控客户端 | |||
spring-cloud-feign | REST集群服务调用 | |||
spring-cloud-zuul | 集群网关 | |||
spring-cloud-ribbon | 集群LB | |||
spring-cloud-hystrix | 集群断路器 | |||
sop-admin | 应用后台 | spring-boot-core | 框架载体 | |
spring-cloud-eureka-client | 注册中心客户端 | |||
spring-boot-admin-client | 监控客户端 | |||
spring-cloud-feign | REST集群服务调用 | |||
spring-cloud-ribbon | 集群LB | |||
sop-story | service-A | spring-boot-core | 框架载体 | |
spring-cloud-eureka-client | 注册中心客户端 | |||
spring-boot-admin-client | 监控客户端 | |||
spring-cloud-feign | REST集群服务调用 | |||
spring-cloud-ribbon | 集群LB | |||
sop-website | service-B | spring-boot-core | 框架载体 | |
spring-cloud-eureka-client | 注册中心客户端 | |||
spring-boot-admin-client | 监控客户端 | |||
spring-cloud-feign | REST集群服务调用 | |||
spring-cloud-ribbon | 集群LB | |||
admin-server | 系统监控 | spring-boot-core | 框架载体 | |
spring-cloud-eureka-client | 注册中心客户端 | |||
spring-boot-admin-server | 监控服务端 | |||
spring-cloud-feign | REST集群服务调用 | |||
spring-cloud-ribbon | 集群LB |
SOP是一个开放平台的解决方案样例项目,它基于Spring Boot与Spring Cloud实现,目的是为了让用户快速搭建自己的开放平台,它提供了两种接口调用方式,分别是:支付宝开放平台的调用方式和淘宝开放平台的调用方式。 该项目只需要通过简单的配置,就可以让现有的项目集成进入开放平台环境,同时也封装了开放平台大部分功能包括:签名验证、统一异常处理、统一返回内容 、业务参数验证(JSR-303)、秘钥管理等。
SOP的架构松耦合,业务代码实现在各自微服务上,SOP不参与业务实现,这也是Spring Cloud微服务体系带来的好处,同时它的接入方式也十分简单,与老项目不冲突,老项目注册到注册中心,然后在对应方法上加上注解即可。
主要服务于以下的需求/用户/场景:
1、有现成的项目,想改造成开放平台供他人调用;
2、有现成的项目,想暴露其中几个接口并通过开放平台供他人调用;
3、想搭一个开放平台新项目,并结合微服务的方式去维护;
4、对开放平台感兴趣的朋友。
3.1.2 sop应用结构
3.1.3 sop部署
组件 | 说明 |
sop-common | 公共模块,封装常用功能,包含签名校验、错误处理、限流等功能 |
sop-gateway | 网关,统一访问入口 |
sop-example | 微服务示例 |
sop-website | 开放平台对应网站,提供文档API、沙箱测试等内容 |
sop-auth | 应用授权服务 |
sop-admin | 后台管理 |
sop-sdk | 基础sdk |
sop-test | 接口调用测试用例 |
3.1.4 sop运行
3.1.5 sop性能对比测试
// TODO
3.2 监控应用方案适配
为什么要监控?简单的说主要有以下3点:
1)业务安全性的保障;
2)系统的保障;
3)产品持续性的运行;
对于监控的分类,主要分为硬件、系统、程序的监控,如下所示:
3.2.1 Zabbix + Grafana应用环境
为什么要选择Zabbix呢?
1)纯命令监控比较局限性;
2)可及时发现故障,并在故障恢复的第一时间得到通知;
3)灵活运用,包括Zabbix的阈值定义,自动发现,API接口,触发动作等功能;
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
Zabbix能监视各种网络参数,保证服务器系统的安全运行;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix由2部分构成,Zabbix server与可选组件Zabbix agent。
Zabbix server可以通过SNMP,Zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上
Zabbix的工作组件及告警流程如下图所示:
1)数据采集:Zabbix 通过 SNMP、Agent、ICMP、SSH、IPMI 等对系统进行数据采集。
2)数据存储: Zabbix存储在MySQL上,也可以存储在其他数据库服务。
3)数据分析:当我们事后需要复盘分析故障时,zabbix能给我们提供图形以及时间等相关信息,方面我们确定故障所在。
4)数据展示:web界面展示、(移动APP、java_php开发一个web界面也可以)。
5)监控报警:电话报警、邮件报警、微信报警、短信报警、报警升级机制等(无论什么报警都可以)。
6)报警处理:当接收到报警,我们需要根据故障的级别进行处理,比如:重要紧急、重要不紧急,等。根据故障的级别,配合相关的人员进行快速处理。
Zabbix + Grafana架构图如下:
Zabbix + Grafana适配组件如下:
No. | 组件 | 启动命令 | 说明 |
1 | gcc version 4.8.5 | - | yum安装: yum install gcc* -y |
2 | mariadb.aarch64 1:5.5.56-2.el7 | systemctl start mariadb.service | 包安装,也可以选mysql5.6 /5.7 |
3 | nginx-1.16.0 | systemctl start nginx.service | 源码编译安装 |
4 | PHP 7.2.20 | systemctl start php-fpm | 编译源码安装 |
5 | openjdk1.8.0_232 | - | 可能OS自带JRE环境,但是需要安装JDK |
6 | zabbix-4.0.0 | /etc/init.d/zabbix_server start /etc/init.d/zabbix_agentd start |
编译源码安装 |
7 | Grafana-6.7.2 | service grafana-server start / stop | 官方提供arm64的rpm文件,rpm安装 |
3.2.2 Prometheus+ Grafana应用环境
Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的。它是一个独立的开放源码项目,并且独立于任何公司。不同于传统的运维监控工具,Prometheus是面向容器和微服务的监控系统,采用基于时间序列的存储方式,监控采集更加精确,监控频率更高,和容器和微服务兼容性更好。随着目前容器和微服务的使用日趋广泛,Prometheus的应用范围将会越来越广。
Prometheus是面向容器和微服务的监控系统,对容器和微服务的兼容性好。
服务器通过Pull模型以http协议监控数据,监控精确,监控频率高。
图形数据化展示通过Grafana展示,采用专业的数据函数和公式,将数据以更精准和可读的方式展现出来。
报警方式通过AlertManager输出,兼容目前市场是主流的报警方式,例如微信,电话,邮件等。
下面这张图说明了Prometheus的整体架构,以及生态中的一些组件作用:
Prometheus的主要特征有:
● 多维度数据模型
● 灵活的查询语言
● 不依赖分布式存储,单个服务器节点是自主的
● 以HTTP方式,通过pull模型拉去时间序列数据
● 也通过中间网关支持push模型
● 通过服务发现或者静态配置,来发现目标服务对象
● 支持多种多样的图表和界面展示,grafana也支持它
Prometheus相对比其他监控的优势:
● 监控数据的精细程度高,采集精度可以达到1~5s
● 集群部署速度和监控脚本制作快,大大缩短监控搭建的时间成本
● 开源软件更新快,bug修复快,周边插件丰富,到手即用,支持多种客户端开发语言
● 本身基于数学计算模型,直接使用数学公式和数学函数,可以实现很复杂的业务逻辑监控(例如QPA曲线的弯曲、凸起,下跌的比例等模糊概念)
● 结合Grafana展示图形,效果美观实用
● 特别针对目前流行容器监控适配,采集深度大
Prometheus生态包括了很多组件,它们中的一些是可选的:
● 主服务Prometheus Server负责抓取和存储时间序列数据
● 客户库负责检测应用程序代码
● 支持短生命周期的PUSH网关
● 基于Rails/SQL仪表盘构建器的GUI
● 多种导出工具,可以支持Prometheus存储数据转化为HAProxy、StatsD、Graphite等工具所需要的数据存储格式
● 警告管理器
● 命令行查询工具
● 其他各种支撑工具
● 多数Prometheus组件是Go语言写的,这使得这些组件很容易编译和部署
Zabbix + Grafana适配组件如下:
No. | 组件 | 启动命令 | 说明 |
1 | Prometheus-2.16 | systemctl start / stop prometheus.service | Arm64包安装 |
2 | node_exporter-0.18.1 | systemctl start/stop node_exporter.service | Arm64包安装 |
3 | Grafana-6.7.2 | service grafana-server start / stop | 官方提供arm64的rpm文件,rpm安装 |
3.2.3 监控应用部署
本监控方案选用Zabbix和Prometheus作为物理设备及应用的核心监控软件,通过python脚本发送Email/SMS/Ding ding告警信息,Grafana作为可视化监控大屏解决方案,集成Zabbix和Prometheus监控系统,通过定制化dashboard可视化展示监控数据信息。
该监控方案的核心软件应用,Zabbix、Prometheus、Grafana以及运行的Python脚本均部署在鲲鹏服务器上。整体部署架构图如下所示:
3.2.4 监控应用运行
3.2.4.1 Zabbix + Grafana运行
在鲲鹏服务器上Zabbix 4.0.10监控主机页面如下图所示:
Grafana大屏如下:
告警 – 邮件:
告警-企业微信:
告警- Dingding:
3.2.4.2 Prometheus + Grafana运行
Prometheus-2.16监控主机页面如下图所示:
Prometheus配合Grafana和AlertManager实现数据展示和多渠道报警:
邮件告警:
3.2.5 监控应用性能对比测试
// TODO
3.3 农业IOT应用方案适配
智慧农业物联网IoT主要包含两层意思:1. 核心基础仍是农业互联网,是在农业互联网基础上的延伸和扩展。2. 用户端延伸到物品与物品之间, 物品之间通过物联网进行信息交换和通信。
智慧农业物联网技术的应用:
1. 农业智能监测与培育系统
负责监测温度、湿度、光强等农情信息采集,在农作物上方安放光照强度传感器实时监测环境光照强度,能及时掌握农作物生长环境的光照强度;环境温度的高低直接影响农作物生长速度与发育情况,空气湿度也是影响农作物生长发育的重要因素,所以要在农作物周围安放空气温湿度传感器。通过自适应切换功能接入传输网络,将数据传送至控制中心。控制中心将接收到的数据经处理后存入数据库,根据采集到的信息进行汇总分析,结合专家决策系统发出反馈控制指令,及时、准确地发现问题和解决问题,指导农业生产。
通过网络,生产者和技术研究人员就可以随时随地监测所采集到的农情信息,对作物生长情况进行实时跟踪。负责农作物生产的技术人员将根据其作物的生长实况和实际需求制定合理的培育策略(比如增加温度、增加湿度、浇灌),通过将集成有嵌入式TCP/IP协议的培育设备连接到网络,通过远程执行所制定的策略,远程节点收到信息后会做出响应,例如调节光照强度、灌溉时间、除草剂浓度等等。
2. 农产品运输管理与控制系统
通过在运输车辆上的无线终端设备,无线远程发送回该车辆当前的经纬度、车速、海拔高度、卫星授时时间到远程控制中心,控制中心再将远程传回的GPS数据与电子地图建立函数对应关系,将运输车辆拟化为地图上的一个运动点,就可以对该点的行车路线、行车车速、行车状况进行透明无误地监控,从而实现智能控制和管理。通过装载农作物产品箱体中的传感器可以监测到农产品在运输中的温湿度等信息。控制中心有GSM(全球移动通信系统)、GPRS(移动通信技术)组成的即时语音通信平台,可以通过中心计算机控制软件与工作中的运输车辆取得联系,对于排除紧急事件和实际难题具有非常明显的意义。
3. 农产品销售和分配管理系统
在箱体上集成了4种技术用来识别和验收货物:125 kHz频段下和13.56 MHz频段下的RFID(自动识别技术)射频识别、一维条码识别、二维码。农产品质量追溯物联网由读写传感器和电子标签、读写器和查询的网络接入与控制数据中心组成。通过电子标签记录农产品在培育、运输和销售环节的所有信息,并通过网络系统传输到数据中心保存。用户可以在农产品溯源系统平台或者超市商品溯源机上,通过查询农产品的编号获取该农产品的所有的销售信息。
农业物联网是现代农业发展的必经之路,运用先进的农业物联网技术是一个国家农业生产力的良好体现。
3.3.1应用环境架构
本次智慧农业IOT技术的应用环境主要在农业智能监测上。
基于阿里云的技术架构图如下所示:
涉及到的应用组件如下表所示:
No. | 组件 | 运行环境 | 说明 |
1 | IOT server java | 阿里云ECS | 阿里云服务器端运行的Java代码(打成jar包),作用是接受阿里云的消息通信上报,并将上报的传感器数据存储到influxdb数据库。 |
2 | allapi.js | 阿里云ECS | 作用:grafana按钮控制调用的API 包括所有的开关,和获取开关状态。放在阿里云ecs上运行。 |
3 | darknet.py | 边缘设备 | 深度学习识别代码。作用:拍摄照片后,通过深度学习识别里面的物品。 |
4 | iot_beaglebone.js | 边缘设备 | beaglebone设备端的js代码,作用:连接阿里云,上传所有传感器信息;响应阿里云请求,控制传感器开关(包括除了摄像头的所有传感器)。 |
5 | iotsdk.py | 边缘设备 | 树莓派上的控制代码,作用:连接摄像头拍照。连接阿里云,上传收取阿里云传来的信息,控制连接在树莓派上的摄像头以及图片物品识别功能。 |
6 | model.json和tsl.jsom | 边缘设备 | 阿里云导出的物模型文件。物模型文件备份,防止丢失。 |
7 | Grafana | 阿里云 | 监控大屏,鲲鹏服务器上是以docker容器的形式运行 |
8 | InfluxDB | 阿里云 | 时序数据库,鲲鹏服务器上是以docker容器的形式运行 |
3.3.2应用部署
对于应用的部署,基本上还是基于阿里云的技术架构,在鲲鹏服务器上主要以docker容器的形式部署了用于前端大屏展示的Grafana和时序数据库InfluxDB,如下图所示:
3.3.3应用运行
对于设备位置、温度、湿度、风向等相关指标的采集,数字化大屏展示如下图所示:
对于温度变化、湿度变化、土壤温度变化的相关监控大屏如下图所示:
另外,该方案的告警媒介是Ding ding,告警信息展示如下:
3.3.4应用性能对比测试
// TODO
3.4 大数据应用方案适配
3.4.1应用环境
组件 | 版本号 | 应用场景 |
Ambari | 2.7.3 | Ambari是 Apache Software Foundation 中的一个顶级项目,它可以创建、管理、监视 Hadoop 整个生态圈(例如 Hive,Hbase,Sqoop,Zookeeper 等)的集群,使得Hadoop 以及相关的大数据软件更容易使用。 |
HDP | 3.1 | Hadoop及其生态环境组件,包括HDFS、Zookeeper、Ambari Metrics、Yarn+Mapreduce2、HBASE、Hive、TEZ、Spark2等。 大数据解决方案支持包括离线分析、实时检索、实时流处理等多个场景。 |
OpenJDK | 1.8 | JDK(Java Development Kit)是 Java 开发者进行 Java 开发所必须的软件包,包含 JRE(Java Runtime Environment)和编译、调测工具。 |
Anaconda | 4.5.12 | python很多工具包,如果没有专门为aarch64编译过,那么就需要自己手动编译甚至是彻底无法使用了。 Anaconda是一个包管理工具,这个工具的强大之处在于,甚至不止跨越了Python,还能在某种程度上完全隔离出一个底层环境。甚至是让很多原本会冲突的包共存。 |
Ketle | 9.0 | Kettle是免费开源的、可视化的、功能强大的ETL工具 |
大数据解决方案支持包括离线分析、实时检索、实时流处理等多个场景。如离线分析,通常是指对海量数据进分析和处理,形成结果数据,供下一步数据应用使用。离线分析以HDFS分布式存储软件为数据底座,计算引擎以基于MapReduce的Hive和基于Spark的SparkSQL为主。
3.4.2应用结构
大数据离线计算场景架构
3.4.3应用部署
组件 | 部署说明 |
Ambari | Ambari管理hadoop集群 |
HDP | HDP集群及其生态系统组件,包括HDFS、Spark计算等组件 |
Kettle | ETL数据抽取、转换、加载工具 |
3.4.4 应用运行
3.4.5 应用性能对比测试
// TODO
3.5 日志搜索方案适配
3.5.1ELKB应用环境
应用名 | 应用角色 | 应用组件 | 组件角色 | 组件版本 |
elasticsearch | 全文搜索引擎 | docker- elasticsearch | elasticsearch程序服务 | 7.3.2 |
filebeat | 日志数据采集器 | filebeat | filebeat程序服务 | 7.4.2 |
kibana | 日志分析平台 | docker- kibana | kibana程序服务 | 7.3.2 |
logstash | 日志管理平台 | logstash | Logstash程序服务 | 7.4.2 |
3.5.2应用结构
ELK 不是一款软件,而是 Elasticsearch、Logstash 和 Kibana 三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于 Elastic.co 公司名下,所以被简称为 ELK Stack。根据 Google Trend 的信息显示,ELK Stack 已经成为目前最流行的集中式日志解决方案。
Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
Logstash:数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;
Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析。
3.5.3应用部署
1、Filebeat负责收集应用写到磁盘上的日志,并将日志发送给logstash
2、logstash处理来自filebeat的日志,并将处理后的日志保存elasticsearch索引库。
3、elasticsearch存储来自logstash的日志。
4、kibana从elasticsearch搜索日志,并展示到页面。
3.5.4应用运行
对接Grafana,制作大屏连接Elastic search:
3.5.5应用性能对比测试
//TODO
3.6 K8S + Docker方案适配
3.6.1应用环境
应用名 | 应用角色 | 应用组件 | 组件角色 | 组件版本 |
kubernetes | 容器编排托管服务 | kubelet | 容器生命周期管理者 | 1.15.1 |
kubeadm | k8s集群部署管理工具 | |||
kubectl | k8s集群命令行工具 | |||
kube-apiserver | 集群资源监听/分发 | 1.15.0 | ||
kube-controller-manager | 集群事件管理器 | |||
kube-scheduler | 集群pods总调度 | |||
kube-proxy | 集群pods总路由 | |||
etcd | 集群数据持久化 | 3.3.10 | ||
coredns | k8s内部dns | 1.3.1 | ||
docker | 容器基础服务 | docker-ce | docker开源基础组件 | 19.03.8 |
rancher | 容器编排托管可视化管理/插件集成服务 | rancher-server | rancher主服务 | 2.4.3-rc2 |
Rancher-client | rancher主服务监听代理 |
k8s是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本,主要功能包括:
1:基本容器的应用部署、维护和滚动升级;
2:负载均衡和服务发现;
3:跨机器和跨地区的集群调度;
4:自动伸缩;
5:无状态服务和有状态服务;
6:广泛的Volume支持;
7:插件机制保证扩展性。
k8s提供了很多的功能,它可以简化应用程序的工作流,加快开发速度。通常,一个成功的应用编排系统需要有较强的自动化能力,这也是为什么 k8s被设计作为构建组件和工具的生态系统平台,以便更轻松地部署、扩展和管理基于docker构建的应用程序。
docker-container(docker容器)是一种便捷式、轻量级的操作系统级虚拟化技术。它使用namespace隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,从而使得容器可以很方便的在任何地方运行。
由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,不需要与外部的基础架构环境绑定,因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。
容器同比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是由容器内的进程对外隐藏时更是如此。最后,每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。
在k8s必须使用pod管理容器,k8s中的每个pod可以包含一个或多个容器。
rancher对k8s进行了功能的拓展与实现了和k8s集群交互的一些便捷工具,包括执行命令行、可视化界面,可以管理多个 k8s集群,查看k8s集群节点的运行状态等等。基于k8s+docker自建私有云,部署容器集群,rancher是首选工具。
3.6.2应用结构
3.6.3应用部署
同3.6.1
3.6.4 应用运行
3.6.5 应用性能对比测试
// TODO
3.7 CI / CD方案适配
3.7.1应用环境
应用名 | 应用角色 | 应用组件 | 组件角色 | 组件版本 |
gitlab | 项目管理/代码托管 | docker-gitlab | gitlab程序服务 | 1.12.x |
jenkins | 持续集成工具 | docker-tomcat | jenkins的web容器 | 9.x |
jenkins.war | jenkins程序服务 | 2.x | ||
maven | 程序构建工具 | maven.tar.gz | maven程序服务 | 3.2 |
harbor | 容器镜像仓库 | docker-harbor | docker镜像仓库 | 1.1.0.x |
kubernetes | 容器编排托管服务 | kubelet | 容器生命周期管理者 | 1.15.1 |
kubeadm | k8s集群部署管理工具 | |||
kubectl | k8s集群命令行工具 | |||
kube-apiserver | 集群资源监听/分发 | 1.15.0 | ||
kube-controller-manager | 集群事件管理器 | |||
kube-scheduler | 集群pods总调度 | |||
kube-proxy | 集群pods总路由 | |||
etcd | 集群数据持久化 | 3.3.10 | ||
coredns | k8s内部dns | 1.3.1 |
CI/CD它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
基于gitlab+jenkins+maven+harbor+k8s的环境,可以用以下流程实现CI/CD,首先开发人员将编码上传到gitlab上,使用gitlab的webhook链接到jenkins,让jenkins通过maven编译代码/构建程序,然后自动去制作docker镜像,通过将镜像上传到harbor本地的docker镜像库中,再配置k8s中的具体pod节点去自动下载harbor中的docker镜像,使用k8s控制docker运行服务,最后达到持续交付、开发、测试和运维三方紧密合作的目的。
3.7.2应用结构
3.7.3应用部署
同3.7.1
3.7.4 应用运行
3.7.5 应用性能对比测试
// TODO
3.8 性能测试
3.8.1MySQL性能测试对比
总体上X86和ARM64机器上的Mysql数据库性能相差无几,具体如下:
1.华为ARM64鲲鹏机器MySQL性能测试结果
2.X86机器上MySQL性能测试结果
3.测试工具
使用BenchmarkSQL进行测试
4.数据库模型(TPCC)
5.TPCC交易类型
6.性能衡量指标
7.测试流程