前言
????隨著商業智能的出現,產生了用于數據分析處理的數據庫 (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模式集群,用于解決官方鏡像無法滿足的實驗場景需求。




