【巨杉數據庫SequoiaDB】巨杉Tech |巨杉數據庫的HTAP場景實踐

01html

背景java

因爲業務形式的發展,愈來愈多的需求須要對交易數據進行實時分析,例如推薦、決策、監控等,傳統的處理辦法是使用ETL的方式把OLTP業務產生的數據同步到OLAP的數據數據庫,致使了數據須要在不一樣的數據庫之間流轉,耗費時間成本的同時須要耗費人力成本運維多套數據庫產品。 mysql

近年來業界開始興起HTAP的概念,對於數據庫,HTAP表明一個數據庫既能支持OLTP(在線事務處理),又能支持OLAP(在線分析處理),從而知足大部分企業級應用的需求。相比傳統使用多款數據庫進行不一樣的業務處理方式,HTAP數據庫可以避免傳統複雜的ETL過程,省去數據在不一樣數據庫之間的流轉時間;同時避免維護多一套用於分析的數據庫,從而節省人力和時間的成本,提升數據的價值。 linux

SequoiaDB巨杉數據庫採用「計算存儲分離」架構,支持MySQL、PostgreSQL與SparkSQL三種關係型數據庫實例、類MongoDB的JSON文檔類數據庫實例、以及S3對象存儲與Posix文件系統的非結構化數據實例。在事務場景能夠利用SDBAPI、MySQL和PGSQL實例對數據進行操做,在分析場景藉助分佈式計算框架Spark的併發計算性能,提升計算效率,從而實現HTAP功能sql

02shell

技術特性 數據庫

巨杉數據庫做爲一款優秀的分佈式數據庫有着許多技術優點:分佈式多節點、支持索引、基於代價的優化器、對應用透明的數據分片、高性能與無限水平彈性擴展能力、分佈式事務與 ACID 能力、標準SQL兼容、多種物理與邏輯的資源隔離能力。OLTP業務關注的是實時在線業務,要求是支持事務、低延時、高吞吐量。而OLAP業務主要是報表分析等大規模數據分析場景,因此更關注的是數據庫的存儲和計算能力。巨杉數據庫使用計算-存儲分離的架構可以同時搭配多種不一樣的SQL實例。例如面向聯機事務的交易型的MySQL和PostgreSQL實例,面向複雜聯機分析的SparkSQL實例。apache

所以,針對HTAP場景,咱們以最簡單的3副本舉例,把SequoiaDB的副本設置爲3,三副本的數據是保持一致的。其中,咱們經過業務域的設置,以及巨杉數據庫讀寫分離的功能,使得聯機交易型業務訪問其中的兩個副本,分析型業務訪問第三副本。這樣,在三副本互相獨立的的基礎上,分別支撐了聯機業務和分析業務的不一樣負載,避免了搶佔資源的狀況,極大下降了OLTP和OLAP業務同時運行形成的性能瓶頸。服務器

03網絡

安裝部署

3.1 部署環境

服務器分佈

服務器

服務名稱

192.168.106.151

sdbserver1

192.168.106.152

sdbserver2

192.168.106.153

sdbserver3

服務器配置

虛擬機數量:3臺

CPU

4CORE

內存

8GB

磁盤

100GB*3

操做系統

Centos 7.4

2) 軟件配置

操做系統:Centos7.4

JDK版本:1.8.0_80 64位

SequoiaDB版本:3.4

MySQL版本:5.7.24

Spark版本:2.3.4

Sysbench版本:1.0.19

TPC-DS_tools版本:2.10.0

3.2 物理架構

本文以三臺虛擬服務器進行實踐,下圖爲部署的物理架構:

本部署架構每臺服務均部署了MySQL和Spark實例。部署多個MySQL可以均衡聯機事務交易請求,同時避免單點故障。Spark計算引擎在每臺機器也部署了計算節點,加強其分析能力。可是須要均衡在線事務處理和在線分析處理進程之間資源。

SequoiaDB巨杉數據庫在每一個磁盤均部署了數據節點,可以充分利用磁盤的讀寫能力,在Spark計算引擎讀寫繁忙的狀況下,會產生較大的網絡傳輸從而侵佔MySQL實例在線事務處理的帶寬資源,因此生產環境下Spark和MySQL實例能夠配置使用不一樣的網卡。

3.3 MySQL部署

解壓mysql安裝包

tar -zxvf sequoiasql-mysql-3.4-linux_x86_64-enterprise-installer.tar.gz

運行安裝程序(安裝MySQL實例須要root用戶),後根據提示設置。

 

./sequoiasql-mysql-3.4-linux_x86_64-enterprise-installer.run --mode text

切換用戶和目錄

 

su - sdbadmin

進入MySQL安裝目錄

 

cd /opt/sequoiasql/mysql

添加實例

​​​​​​​

bin/sdb_sql_ctl addinst myinst -D database/3306/

查看實例狀態

 

bin/sdb_sql_ctl status

配置 SequoiaDB 鏈接地址

 

bin/sdb_sql_ctl chconf myinst --sdb-conn-addr=sdbserver1:11810,sdbserver2:11810,sdbserver3:11810

登陸MySQL Shell

​​​​​​​

bin/mysql -S database/3306/mysqld.sock -u root

設置遠程鏈接

mysql> UPDATE mysql.user SET host='%' WHERE user='root';

設置MySQL的root用戶密碼

 

ALTER USER root@'%' IDENTIFIED BY 'xxxxxx';

從新登陸MySQL Shell

 

bin/mysql -S database/3306/mysqld.sock -u root -p

設置SquoiaDB 存儲引擎的用戶密碼

mysql> SET GLOBAL sequoiadb_user="sdbapp";

建立數據庫實例

mysql> CREATE DATABASE company;

建立表

 

CREATE TABLE employee(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128), age INT);

插入數據

 

mysql> INSERT INTO employee(name, age) VALUES("Jacky", 36);

查詢數據

mysql> SELECT * FROM employee;

使用巨杉數據庫shell模式查詢數據

sdb> db.company.employee.find()

三臺服務器均安裝MySQL實例後須要進行元數據同步配置

請參考巨杉數據庫官網進行配置

http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1572505575-edition_id-0

3.4 Spark部署

從spark官網下載使用(sdbadmin用戶)

 

wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz

解壓到opt目錄下

 

tar -zxvf spark-2.4.4-bin-hadoop2.7.tgz -C /opt

進入配置文件conf目錄

 

cd /opt/spark-2.4.4-bin-hadoop2.7/conf

設置spark-env.sh

SPARK_WORKER_INSTANCES=2

設置spark-defaults.conf

spark.sql.cbo.enabled  true

設置slaves

​​​​​​​

sdbserver1

建立設置元數據數據庫配置文件hive-site.xml

<configuration>

拷貝驅動到spark的jars目錄下

拷貝sequoiadb 和spark的鏈接驅動

 

cp /opt/sequoiadb/spark/spark-sequoiadb_2.11-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/

拷貝mysql驅動(mysql驅動須要到mysql官網下載)

 

cp /home/sdbadmin/mysql-connector-java-5.1.47.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/

拷貝sequoiadb的java驅動

 

cp /opt/sequoiadb/java/sequoiadb-driver-3.4.jar /opt/spark-2.4.4-bin-hadoop2.7/jars/

進入MySQL Shell,建立元數據庫

mysql> CREATE DATABASE metastore CHARACTER SET 'latin1' COLLATE 'latin1_bin';

設置免密

三臺機器均執行ssh-keygen生成公鑰和密鑰

 

ssh-keygen

在sdbserver1機器執行ssh-copy-id,把公鑰拷貝到其餘兩臺機器

ssh-copy-id  sdbadmin@sdbserver1

分發Spark到另外兩臺機器

scp  -r /opt/spark-2.4.4-bin-hadoop2.7  sdbadmin@sdbserver2:/opt/

啓動Spark

 

/opt/spark-2.4.4-bin-hadoop2.7/sbin/start-all.sh

啓動thriftserver

 

/opt/spark-2.4.4-bin-hadoop2.7/sbin/start-thriftserver.sh --master spark://sdbserver1:7077 --executor-cores 2 --total-executor-cores 12 --executor-memory 2g

進入beeline測試sql

 

/opt/spark-2.4.4-bin-hadoop2.7/bin/beeline

鏈接thriftserver

 

beeline> !connect jdbc:hive2://localhost:10000

建立Spark-sql映射表

​​​​​​​

0: jdbc:hive2://localhost:10000> create database company;

運行分析類SQL,測試是否部署對接成功。

​​​​​​​

0: jdbc:hive2://localhost:10000> select avg(age) from company.employee;

04

性能對比

HTAP場景測試

爲了測試 OLTP 和 OLAP 同時運行時對集羣性能的影響,使用 MySQL 基準測試工具 Sysbench 進行測試 MySQL,使用 TPC-DS 決策支持系統測試基準測試 Spark-sql。本次 Sysbench 測試場景有:讀寫(oltp_read_write)、點查(oltp_point_select)、索引更新(oltp_update_index)三個場景。TPC-DS 測試場景選取99條SQL中的前30條進行測試,測試案例包含了較高的 IO 負載和 CPU 計算需求,同時具備利用巨杉數據庫的特性對數據進行優化的特色。

測試結果以下:

 

​ 

經過上面圖表展現的測試結果,能夠看到 OLTP 與 OLAP 和 HTAP 場景下的對比,能夠出 SequoiaDB 巨杉數據庫在 HTAP 混合場景下依然能表現優異性能,對各自場景性能影響較小。

05

相關優化

5.1 數據存儲規劃

根據複製組和域的概念實現的資源隔離與分區方式結合,能夠把不一樣的數據類型使用域的邏輯概念把複製組進行隔離,而後使用適當的分區方式把數據打散到不一樣的複製組。

基於多租戶架構規劃:一個數據庫一般承載着多種業務系統,爲了不不一樣業務之間的性能影響,根據業務系統的存儲量、併發大小、數據生命週期等劃分不一樣的數據域承載相應的數據讀寫。

基於數據分區方式規劃:結合當前表的數據特性選擇合適的分區方式,如:

1)檔案類數據類數據 ,可使用水平分區按ID散列到不一樣的數據組保證數據均衡無熱點。

2)流水類數據選擇混合分區的方式建立多維分區表進行存放,把不一樣時間段的數據分佈在不一樣的數據組。多維分區表的好處有:一、當訪問某時間範圍的數據可以直接定位到子分區,避免掃描全表數據從而下降IO。二、在集羣擴容時,把擴展的子表建立在新的機器,無需執行rebalance的操做便可完成表存儲空間的擴容。

5.2 SequoiaSQL-MySQL優化

1)高可用。集羣的MySQL實例都可以提升讀寫操做,因爲各實例的元數據均只存儲在該實例自己,SequoiaSQL-MySQL 提供了元數據同步工具,用來保證 MySQL 服務的高可用。同步工具及部署操做能夠參考官網。

2)提升MySQL實例最大鏈接數。

3)爲每一個MySQL實例配置多個協調節點,均衡協調節點壓力,防止單個協調節點失效,引起MySQL實例單點故障。

4)其餘優化項詳細可參照巨杉數據庫官網的配置項列表。

5.3 Spark計算引擎優化

1)Spark開啓CBO基於代價的優化,根據數據的特色選擇代價最小的物理執行計劃,決定是否進行廣播優化。

2)適當增大WORKER的數量,設置合理的WORKER核數和內存。

3)選擇高效的序列化方式。默認爲org.apache.spark.serializer.JavaSerializer,可是爲了提高性能,應該選擇org.apache.spark.serializer.KryoSerializer 序列化。

4)設置合理的shuffle分區數,使shuffle後的數據可以加入更多的的task數量,從而提升SQL執行的並行度。

5)設置Spark讀取數的節點爲從節點,避免從主節點讀取大量數據形成壓力。

06

小結

SequoiaDB巨杉數據庫採用計算存儲分離架構,在計算層能夠建立多種實例以知足同一集羣不一樣場景的業務須要。本文講述了MySQL和SparkSQL實例的部署和SequoiaDB巨杉數據庫進行對接操做,並利用Sysbench和TPC-DS工具分別在OLTP、OLAP和HTAP場景下進行性能測試,咱們能夠看到在HTAP場景下,SequoiaDB針對不一樣業務的性能表現沒有受到影響,保證業務的正常高效。

相關文章
相關標籤/搜索