基于Docker的容器平台业务集群的设计与实现
2023-09-21内蒙古广播电视台夏丽娟内蒙古农业大学计算机与信息工程学院白戈力李建华刘岩
■内蒙古广播电视台:夏丽娟;内蒙古农业大学计算机与信息工程学院:白戈力 李建华 刘岩
传统的云计算平台是通过调整IaaS层管理计算机资源等基础设施,将服务器和存储器进行虚拟化处理,提高数据库并发访问能力。采用读写分离等技术实现共享资源虚拟化,从而实现基础设施资源的统一管理。对物理层面的虚拟化,每个虚拟机在启动时都会加载操作系统,系统本身就会占用几个GB的磁盘空间,因此会加大系统本身的消耗,从而导致整体网站的反应速度缓慢。而Docker容器共用宿主的内核,只需安装应用与基础类库,非常轻量。当今出现的一种更为先进的云计算平台是基于Docker的容器虚拟化平台,Docker因其部署应用的便捷性与灵活性,可以让开发者将应用以及依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux系统中,从而实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理,方便快捷是Docker最大的优势,过去需要数天乃至数周的任务,在Docker容器的处理下,只需要数秒就能完成。云计算时代的到来,Docker一方面能节省开支,使开发者不必为了追求效果而配置高额的硬件,改变了高性能必然高价格的思维定式;另一方面,Docker与云的结合,让云空间得到了更加充分的利用,不仅解决了硬件管理的问题,也改变了虚拟化的方式。
本文使用了Docker技术来构建容器集群,从高并发流量动态负载均衡、容器化集群弹性伸缩以及容器资源并行调度等方面,设计高并发Web系统架构,并使用Prometheus与Grafana来实时监控集群,实现系统性能监控、高吞吐量、低延时、高性能以及提升系统资源利用率等功能,从而实现保障Web系统的高效运行和管理。
1. 基于Docker的容器业务集群的设计
1.1 总体部署架构
基于Docker的容器业务集群架构如图1所示。
图1 容器平台业务集群架构图
(1)Node01节点为网站负载均衡集群,通过HAProxy专业负载均衡软件将用户的请求通过RR或者SH调度算法,转发到后端两个相同的服务器,来实现网站的负载均衡,最后再对HAProxy调度器做高可用。
(2)Node02节点为MyCAT读写分离集群,通过MyCAT中间键来对数据请求进行读写分离,读操作转发到从服务器,写操作转发到主服务器,从而降低集群负载,最后通过Keepalived实现两个MyCAT的高可用。
(3)Node03节点为数据库集群,采用了一主两从复制架构,同时对从服务器部署Keepalived来实现从服务的高可用,当其中某一个容器异常或宕机时会将服务转移,从而达到高可用。
1.2 Node01-LNMP平台高可用架构的设计
通过搭建两个相同的HAProxy,配置相同的调度算法,为后端的Nginx网站服务器做负载均衡,再在两个HAProxy容器上安装Keepalived做调度器的高可用,为客户端提供一个虚拟IP,通过iptables将容器的服务做DNAT地址转换进行发布。
1.3 Node02-MyCAT读写分离高负载架构的设计
在整个Web集群中,响应速度最慢的就是后端的数据库,因为涉及到硬盘的读写操作,所以影响网站的整体速度,为了避免这种情况的出现,引入了MyCAT数据库中间件,实现对数据库做读写分离。在客户端请求中大量的读操作转交给Slave(从)服务器,较少的写操作交给Master(主)服务器,这样既做到了数据的分流,也做到了读操作的负载均衡。最后再对MyCAT做高可用,最大化地保证网站数据的安全性。
1.4 Node03-MySQL集群架构的设计
为了避免数据库的单点故障,造成数据的丢失,这里采用了数据库的主从复制架构,Master(主)服务器将写操作保存到本地二进制文件中,通过网络将事件发送给Slave(从)服务器,Slave服务器产生I/O thread线程接受二进制日志事件,并将该事件写入到本地的中继日志Relay Log,同时产生SQL Thread线程从中继日志中读取执行操作,以确保数据同步。
1.5 集群节点状态监控
将集群中的Node01作为主节点,部署Prometheus Server主服务器负责将采集到的数据进行整合,再搭配Grafana图形监控界面,来负责展示Prometheus的采集数据监控界面,并在每台机器节点上部署NodeEXporter与cAdvisor,cAdvisor负责收集集群三个Node节点上运行的容器信息,NodeEXporter负责收集三个Node节点的硬件信息。
2. 基于Docker的容器业务集群的实现
2.1 容器网络环境搭建
Flannel提供了一个巨大的虚拟网络,再配合Etcd来提供某个IP在哪个物理机的哪个容器上,从而避免跨主机容器通信IP冲突的问题,通过在每个节点上安装Flannel,生成一个叫Flannel0的网卡,每个机器上的Flannel网卡都是这个虚拟网络的子网,最后再由flannel来接管docker0这个网卡,为这个虚拟机上的所有容器来动态地分配IP。
《通知》强调,乡村就业创业促进行动要坚持自主就业创业,坚持人才优先培养,坚持特色产业带动,坚持产业融合发展。一是培育主体促进就业创业,二是打造园区促进就业创业,三是发展特色产业促进就业创业,四是推动产业融合促进就业创业。
2.2 MySQL集群搭建
整个MySQL 集群以Centos7 为镜像模板,编写Dockerfile文件通过RUN指令安装Mariadb与Keepalived软件,采用一主两从复制架构,通过Keepalived来为两个Slave服务器做高可用。
MySQL集群搭建完毕之后,采用Mycat中间件来降低数据库的负载压力,编写Mycat的Dockerfile,使用原始Centos 7的镜像,在镜像的基础上安装高可用等必要软件,将MyCAT用到的环境变量JDK、与安装包解压到容器内部并应用环境变量。
2.3 容器动态应用网站与实时监控的搭建
架设的网站选择了基于LNMP平台的Wordpress模板,获取Dockerhub的Wordpress的镜像,设置固定容器启动参数。
实时监测平台选择Prometheus 与Grafana,Prometheus中的Node-EXporter组件来监视收集主机的硬件与操作系统信息,cAdvisor负责收集每个机器节点上的所有容器信息,Grafana负责将收集到的信息可视化。
3. 测试
3.1 容器高并发测试
将网站的wordpress的80端口暴露到宿主机的80端口,此时可以通过浏览器直接访问:http://192.168.152.16在其他节点安装httpd进行压力测试//模拟100个用户,每人请求100次,一共10000次请求。
#ab-c100-n10000 http://192.168.152.16/index.php
Server Hostname:192.168.152.16 //测试主机
Server Port:80 //测试端口
Concurrency Level:100 //100个并发数
Time taken for tests:179.105 seconds //压力测试消耗总时间
Complete requests:10000 //总次数,均未失败
Total transferred:2480000 bytes //网络传输总数据量
Requests per second:55.83 [#/sec] //服务器每秒吞吐量
Time per request:1791.050 [ms] (mean) //用户请求消耗时间
Time per request:17.911 [ms] (mean,across all concurrent requests)
具体结果分析可通过实时监控平台查看,在浏览器输入“http://192.168.152.16:3000”,就会看到容器CPU平均使用率效果图,如图2所示,横坐标代表17个容器,纵坐标为每个容器的使用率。一个用户请求一次消耗时间为17.99ms,本设计受物理机本身资源限制,数据本身已达到服务器最大值,在第一次接收到请求时,wp01与wp02的CPU使用率瞬间达到126%与176%(红色箭头所指),随后两个HAProxy将用户大量的请求负载均衡地转发到两个WP网站,网站再进行数据的读写分离,从而降低网站的负载,具体信息如图2所示。
图2 容器CPU平均使用率示意图
3.2 容器高性能测试
查看容器集群内存平均使用率,如图3所示,横坐标代表时间,纵坐标为内存大小。压力测试开始后,MyCAT01作为读写分离的Master,占用了较大的内存来处理网站的读写请求,再将读写请求交付给MySQL服务器,来实现数据的持久化存储,这也占据了较大部分的内存,压测开始之前与开始之后,容器的内存使用率并无太大波动,由此可知,在高性能方面容器化技术具有较大优势,具体信息如图3所示。
图3 容器集群内存平均使用率示意图
4. 结束语
本次容器平台业务集群主要实现了以Docker容器技术作为服务载体,设计了一个完整的高性能、高可靠的Web网站集群架构,通过Flannel与Etcd,为容器提供快速接入,采用可靠性和稳定性兼容的HAProxy作为网站负载均衡调度器,再通过Keepalived对集群中的每个关键节点做高可用,真正实现了网站的高可用、高并发、高性能、低延时,同时提升了系统的资源利用率,从而保障了Web系统的高效管理与运行。