【巨杉数据库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_
运⾏安装程序(安装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> ployee.find()
三台服务器均安装MySQL实例后需要进⾏元数据同步配置
请参考巨杉数据库官⽹进⾏配置
doc.sequoiadb/cn/sequoiadb-cat_id-1572505575-edition_id-0
3.4 Spark部署
从spark官⽹下载使⽤(sdbadmin⽤户)
wget mirrors.tuna.tsinghua.edu/apache/spark/spark-2.4.4/spark-2.4.
解压到opt⽬录下
tar -zxvf spark-2.4. -C /opt
进⼊配置⽂件conf⽬录
cd /opt/spark-2.4.4-bin-hadoop2.7/conf
设置spark-env.sh
SPARK_WORKER_INSTANCES=2
设置f
spark.abled  true
设置slaves
sdbserver1
创建设置元数据数据库配置⽂件l
<configuration>
mysql下载jar包拷贝驱动到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 进⼊beeline测试sql

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。