前言
随着商业智能的出现,产生了用于数据分析处理的数据库 (Analytic Database),其主要针对某些课题数据进行分析,用于支撑业务发展和管理决策。这类场景的特点是数据量大、数据密集、计算密集、算法复杂。但随着数据量的增涨、业务复杂性的增加,早期的数据仓库支撑能力和数据分析能力变得十分有限,便出现了MPP架构的数据分析型数据库。
EON模式
1、Enterprise模式
VERTICA作为基于MPP架构产生的分布式分析型数据库,可以通过任务并行执行、分布式存储计算、横向扩展、shared Nothing架构等技术,满足海量数据的分析和复杂结构化查询的需求。
Enterprise(企业)模式的VERTIVCA采用标准的shared-nothing架构,采用高效的网络数据交换算法,使得通过廉价的设备也能搭建出高性能的企业级分析型数据库集群。其最大的特点是存储容量大、计算速度快、任务并行执行、列式压缩存储。
2、EON模式
随着大数据时代的到来,一方面数据量呈爆炸式的增长,另一方面企业的经营决策下沉,更多的中、基层管理者通过大数据技术,参与到企业的经营管理中来。为了更好满足市场的迫切需求,新一代基于计算存储分离架构的数据库管理技术应运而生。
EON模式的VERTICA基于X86服务器+新一代MPP架构,在继承了传统MPP高性能并行计算优势的同时,新一代MPP数据库引入了成熟的分布式存储技术,采用了存储和计算分离的架构,使得集群的扩展性与灵活性获得了巨大提升。借助计算存储分离架构,有效解决了计算存储绑定架构在大规模数据量情况下,集群弹性扩展受到限制(基于哈希数据重分布需要消耗更大成本)的问题。
1. 更高的吞吐能力:在存储计算分离模式下,增加节点即可提吞吐能力。
2. 更快的故障恢复速度:当某节点需要故障恢复时,只需要从公共存储区进行重新订阅而不是恢复,无需REPLAY DELETE,恢复速度可由小时级降至分钟级。
3. 更灵活的弹性扩展:添加节点时只需要从公共存储中获取数据即可,不需要进行数据重分布操作,可以更快的对集群进行扩容或缩容,达到弹性伸缩的目标。
4. 工作负载隔离:不同的子集群响应不同任务的请求,从而优化查询工作负载。
5. 快捷的数据共享:所有数据存储的公共存储中,由一个数据库进行管理,不同的子集群或应用需要访问时,只需要进行相应的权限分配即可。
3、总结
大数据不仅仅对数据处理和分析查询的性能带来挑战,对故障恢复时效性、集群弹性伸缩能力、资源重利用的要求也越来越高。传统MPP架构数据库扩展性能不足,集群架构不易调整,因此吞吐量不能得到快速提升,尤其不擅长高并发小数据量查询,造成了传统MPP数据库不敢开放给更多的应用,不敢承担to C业务。
而采用存储和计算分离架构的EON模式VERTICA,使得集群的扩展性与灵活性获得了巨大提升,集群规模能够轻松、快速的伸缩。同时,由于存储与计算分离,使得存储资源和计算资源可以根据需求,进行更灵活的划配,充分提高资源利用率,在相同集群规模下,其并发能力、任务吞吐量也有更大的提升。
4、展望
对于所有MPP解决方案面临的“木桶效应”和并发限制问题。相信未来将推出更厉害的解决方案,譬如MPP+BATCH,慢的节点会分配到更少的任务——“MapReduce的推测执行机制”。
实战:基于MinIO的EON模式集群部署
1、背景
- VERTICA EON模式采用计算和存储资源分离架构,简化了对可变工作负载的管理,可以灵活地将特定计算资源应用于不同的业务场景,为大数据场景下的市场需求提供了新的解决方案。目前EON模式支持的部署选项有:Amazon Webservices S3、Google cloud、Apache Hadoop HDFS、MinIO、Pure Storage。加上VERTICA许可证不区分部署选项,因此VERTICA用户可以根据需求不断地调整部署策略。
▲图片来自Vertica Big Data Conference 2020
- MinIO是高性能基于Apache License v2.0开源协议的对象存储系统,兼容Amazon S3接口,主要用于海量数据存储、人工智能、大数据分析,单个对象最大可达5TB。
2、环境规划
EON模式下的VERTICA使用一个公共存储(communal storage)用于存放data和catalog;同时各节点自行维护一个名为Depot的本地缓存用于存放最近访问过的shards数据(可关闭),以便更快地读取Query所需数据。
本实验使用docker模拟出4台CentOS主机,搭建基于MinIO作为共享存储的EON模式VERTICA社区版集群。
IP Add | 主机名 | 说明 |
---|---|---|
192.xxx.xxx.10 | docker | 实验宿主机 |
172.xxx.xxx.101 | vt01 | VERTICA节点 |
172.xxx.xxx.102 | vt02 | VERTICA节点 |
172.xxx.xxx.103 | vt03 | VERTICA节点 |
172.xxx.xxx.15 | minio | 单节点minio集群 |
3、环境准备
3.1、配置docker网络
为使用固定IP和便于宿主机之外的设备可以访问,自定义docker网络:
[root@docker ~]# docker vnet create --subnet=172.xxx.xxx.0/24 --gateway 172.xxx.xxx.2 vnet dfd1b4c217a928f27c909cd18e700e67e3290d163c6f83d6da14c1fe64697314 [root@docker ~]# [root@docker ~]# docker network ls NETWORK ID NAME DRIVER SCOPE b7c35ecec391 bridge bridge local 02690e842bfd host host local 684add5528e3 none null local dfd1b4c217a9 vnet bridge local [root@docker ~]#
说明:Docker在启动时会开启一个虚拟网桥设备docker0,默认地址为172.17.0.1/16,容器启动后都会被桥接到docker0上并自动分配到一个ip地址。
3.2、配置minio
1. 拉取minio镜像
[root@docker ~]docker search minio [root@docker ~]docker pull minio/minio
2. 启动minio
[root@docker ~]# mkdir -p /data/minio # 创建minio目录 [root@docker ~]# docker run -itd --name minio --restart=always \ --network vnet --ip 172.xxx.xxx.15 \ -e "MINIO_ACCESS_KEY=minio" \ -e "MINIO_SECRET_KEY=minio123456" \ -v /data/minio:/data \ -v /data/minio:/root/.minio \ minio/minio server /data [root@docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9f7bc1649168 minio/minio "/usr/bin/docker-ent…" 2 months ago Up 3 hours 9000/tcp minio
说明:至此单节点minio已部署完成。Access和Secret密钥分别为minio和minio123456。
3. 访问minio
说明:如果涉及防火墙,请为minio开放9000端口。
4. 创建目录
在minio上创建VERTICA所需的共享存储目录,可以使用s3命令或维护界面。
[root@docker ~]# aws s3 mb --endpoint-url=http://172.xxx.xxx.15:9000 s3://vtbucket make_bucket: vtbucket [root@docker ~]# aws --endpoint-url http://172.xxx.xxx.15:9000 s3 ls |grep vtbucket 2021-10-16 08:17:30 vtbucket
3.3、创建VERTICA镜像
说明:最新VERTICA CE版本有一个正式的Docker镜像,带有预安装的VMart测试数据库。在此选择自己创建(便于部署集群模式)。
1. 使用Dockerfile定制镜像
2. 构建镜像imagebuild.sh
[root@docker build_dockerImage]# sh imagebuild.sh Using default tag: latest ...略... Successfully built 7bd143cc1844 Successfully tagged vertica11.0.1-2:latest Config vertica11.0.1-2:latest .... Commit Image vertica11.0.1-2:latest .... [root@docker build_dockerImage]#
说明:至此VERTICA镜像已构建完成,相关配置已满足VERTICA数据库创建要求。
3.4、启动VERTICA节点
4、创建数据库
说明:后续步骤可参照官方手册Installing Eon Mode On-Premises with Communal Storage on MinIO章节
4.1、安装VERTICA
进入VERTICA节点进行install_vertica:
[root@vt01 ~]# /opt/vertica/sbin/install_vertica --license CE --accept-eula \ --hosts vt01,vt02,vt03 \ --dba-user-password-disabled \ --failure-threshold NONE \ --point-to-point --ignore-aws-instance-type
4.2、创建数据库
在创建Eon模式本地数据库之前,必须创建一个授权文件,admintools将使用该文件向MinIO存储群集进行身份验证。
# auth_params.conf
awsauth = MinIO_Access_Key:MinIO_Secret_Key
awsendpoint = MinIOIp:MinIOPort
# create_db
[dbadmin@vt01 ~]$ admintools -t create_db -x auth_params.conf \
--communal-storage-location=s3://vtbucket \
--depot-path=/data --shard-count=3 \
-D /data \
-c /data \
-s vt01,vt02,vt03 -d eon4minio -p 'vertica'
5、总结
最新VERTICA CE版本有一个正式的Docker镜像,带有预安装的VMart测试数据库,开箱即用,能够满足大多数测试场景。本实验通过自己生成docker镜像,部署基于minio的EON模式集群,用于解决官方镜像无法满足的实验场景需求。