巨杉数据库linux,【巨杉数据库SequoiaDB】巨杉Tech |巨杉数据库的HTAP场景实践
01
背景
由于業務形式的發展,越來越多的需求需要對交易數據進行實時分析,例如推薦、決策、監控等,傳統的處理辦法是使用ETL的方式把OLTP業務產生的數據同步到OLAP的數據數據庫,導致了數據需要在不同的數據庫之間流轉,耗費時間成本的同時需要耗費人力成本運維多套數據庫產品。
近年來業界開始興起HTAP的概念,對于數據庫,HTAP代表一個數據庫既能支持OLTP(在線事務處理),又能支持OLAP(在線分析處理),從而滿足大部分企業級應用的需求。相比傳統使用多款數據庫進行不同的業務處理方式,HTAP數據庫能夠避免傳統復雜的ETL過程,省去數據在不同數據庫之間的流轉時間;同時避免維護多一套用于分析的數據庫,從而節省人力和時間的成本,提高數據的價值。
SequoiaDB巨杉數據庫采用“計算存儲分離”架構,支持MySQL、PostgreSQL與SparkSQL三種關系型數據庫實例、類MongoDB的JSON文檔類數據庫實例、以及S3對象存儲與Posix文件系統的非結構化數據實例。在事務場景可以利用SDBAPI、MySQL和PGSQL實例對數據進行操作,在分析場景借助分布式計算框架Spark的并發計算性能,提高計算效率,從而實現HTAP功能
02
技術特性
巨杉數據庫作為一款優秀的分布式數據庫有著許多技術優勢:分布式多節點、支持索引、基于代價的優化器、對應用透明的數據分片、高性能與無限水平彈性擴展能力、分布式事務與 ACID 能力、標準SQL兼容、多種物理與邏輯的資源隔離能力。OLTP業務關注的是實時在線業務,要求是支持事務、低延時、高吞吐量。而OLAP業務主要是報表分析等大規模數據分析場景,所以更關注的是數據庫的存儲和計算能力。巨杉數據庫使用計算-存儲分離的架構能夠同時搭配多種不同的SQL實例。例如面向聯機事務的交易型的MySQL和PostgreSQL實例,面向復雜聯機分析的SparkSQL實例。
?
因此,針對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
拷貝驅動到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)流水類數據選擇混合分區的方式創建多維分區表進行存放,把不同時間段的數據分布在不同的數據組。多維分區表的好處有:1、當訪問某時間范圍的數據能夠直接定位到子分區,避免掃描全表數據從而降低IO。2、在集群擴容時,把擴展的子表創建在新的機器,無需執行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針對不同業務的性能表現沒有受到影響,保證業務的正常高效。
總結
以上是生活随笔為你收集整理的巨杉数据库linux,【巨杉数据库SequoiaDB】巨杉Tech |巨杉数据库的HTAP场景实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tengine监控
- 下一篇: HDU-6203 ping ping p