Speaker
Ms
歌 欧
(高能所)
Description
基于Kubernetes的容器化数据库服务平台
摘 要:提出了一种基于虚拟化容器技术的私有云数据库服务平台的设计方案,能够有效解决使用传统单机数据库面对多用户无法共享资源、按需分配、弹性扩展,使用公有云难于个性化定制、运维困难的问题。平台使用Kubernetes管理Docker集群提供数据库实例,结合域名和代理技术隔离用户与集群,实现无感知运维,将Web控制台与服务器资源集成配置,极大的降低管理难度,组合优化监控软件,从集群、硬件、数据库服务三方面保障服务平台可靠运行。
关键词:数据库;私有云;容器;Docker;DBaaS;
0 引言
云计算技术在近年飞速发展,虚拟化使用软件的方式重新定义划分CPU、内存、网络等硬件资源,可以在一台服务器上提供多个服务而彼此间完全隔离,将单个服务器资源分裂成多个虚拟资源,也可以将多个服务器节点的资源聚合成一个虚拟资源,让资源共享成为可能。容器已经成为云计算的核心技术之一,能提供比虚拟机更小的资源分配粒度,不需要分配单独的操作系统,只提供最基础的运行时环境,因此更轻便、灵活,可以快速部署。
本文基于开源的Docker容器技术设计实现了一套私有的云数据库服务平台,将实体服务器重新分裂、聚合变成可以动态配置和扩展的数据库服务资源提供给用户,同时为了保证平台的可用性,在网络接入、集成调度、监控方面按照实际需求进行了优化配置,提供了完整的平台架构方案,确保多用户下服务的按需分配和稳定运行。
1.平台设计
平台分为四个模块,网络接入,集群,控制台,监控,整体结构如图1所示。所有用户的请求都先到达网络接入模块,通过代理转发给相应的集群资源;集群负责提供数据库实例,由Kubernetes调度分配资源创建,为多用户提供彼此隔离,具有最高ROOT权限,并且互相无感知的数据库服务;控制台是一套控制所有软硬件设备的软件系统,通过Kubernetes的REST API接口远程控制集群,提供Web界面为用户及管理员提供交互功能;监控是整个平台性能及健康状况的保证,确保平台能稳定运行。
1.1网络接入
集群使用Calico动态分配网络,并自动配置内部DNS服务,便于调用及发现服务,但仅限于集群内部访问,外部访问需要通过Service资源定义服务的访问入口地址。外部访问提供三种模式,NodePort模式是在集群每个Node节点上为需要外部访问的Service开启一个对应的TCP监听端口,外部系统使用任意Node的IP+具体的端口号接口访问此服务;第二种模式LoadBalancer是利用公有云申请负载均衡器,每个服务都有自己的IP,所有通往指定端口的流量都会被直接转发,没有过滤,没有路由,价格贵且难于控制;第三种Ingress模式是通过HTTP代理服务器将外部的HTTP请求转发到集群内部的后端服务,这种应用层的网络代理明显不能满足平台在传输层的使用,所以选用NodePort模式。
在NodePort模式基础上,进行了三种设置,让系统更安全可靠。一、使用HAProxy作为多节点的负载均衡器,并利用其代理功能,将Node IP+具体的端口号与真实的服务IP+数据库默认端口绑定,服务IP由本地资源分配,提前设置在服务器上;二、设置DNS域名服务器为每个服务设置域名;三、防火墙设置访问规则,限制访问服务的来源地址。通过上述设置用户可以像使用普通数据库一样访问数据库资源,并确保其性能及安全,结构如下图所示,Pod IP,Cluster IP供集群内部使用,Node IP与Port1形成对外服务入口,服务IP与默认端口提供给用户进行连接。
1.2 集群
集群提供数据库实例,使用生产环境、备用环境两个集群。生产环境使用一个Master主控制节点,两个Node节点,集群对内存要求高,所以采用DellR730:CPU 40 core Intel Xeon @2.20GHz 内存128G,本地数据Raid1备份,生产环境一直保持在线状态,备用环境硬件配置低于生产环境,在生产环境异常时提供服务,二者使用NFS方式共享外部存储,存储使用磁盘阵列。当生产环境某一个节点或数据库实例需要下线运维,可以在备用环境中创建相同名称的数据库实例,新的数据库实例位于不同的集群,使用不同的端口,但是共享相同的数据目录,在网络接入中将用户的请求指向新的数据库实例,则用户看到的是数据完全一样的数据库,整个切换过程只需几分钟,可以做到无感知运维。
Primary author
Ms
歌 欧
(高能所)
Co-author
Ms
HongMei 张红梅
(高能所)