数据库系列之SequoiaDB高可用部署实战

SequoiaDB作为存储引擎,支持高并发的HTAP场景。本文总结使用SequoiaDB作为数据存储的高可用部署实战,并接入Kafka进行高并发的更新业务和Spark进行高并发的批量查询业务。


1、SequoiaDB高可用集群架构

1.1 SequoiaDB基本介绍

SequoiaDB巨杉数据库是一款金融级分布式关系型数据库,主要面对高并发联机交易型场景提供高性能、可靠稳定以及无限水平扩展的数据库服务。SequoiaDB作为分布式数据库,由数据库存储引擎和数据库实例两大模块组成,可以将SequoiaDB作为数据存储引擎,在其中创建多种类型的数据库实例。目前支持MySQL、MariaDB、PostgreSQL和SparkSQL四种关系型数据库实例、JSON文档类数据库实例、以及S3对象存储的非结构化数据实例。

数据库系列之SequoiaDB高可用部署实战

1.2 SequoiaDB高可用集群架构
集群模式是启动SequoiaDB的标准模式,至少需要三个节点。在集群环境下,SequoiaDB数据库需要三种角色的节点,分别为:
  • 数据节点,保存用户数据信息

  • 编目节点,保存数据库的元数据信息

  • 协调节点,作为数据请求部分的协调者,本身并不参与数据的匹配与读写操作,而仅仅是将请求分发到所需要处理的数据节点
数据库系列之SequoiaDB高可用部署实战
集群模式的最小配置中,每种角色的节点至少启动一个,才能构成完整的集群模式。集群模式中客户端或应用程序直接连接到协调节点,其余数据节点与编目节点对应用程序完全透明。应用程序本身不需关心数据存放在哪个数据节点,协调节点会对接收到的请求解析,自动将其发送到需要的数据节点上进行处理。在集群模式下,复制组之间的数据无共享,复制组内的节点间进行异步数据复制,保证数据的最终一致性。
1.3 SequoiaDB-MySQL分布式数据库架构

SDB支持创建MySQL实例且完全兼容MySQL。用户可以使用SQL语句访问SequoiaDB数据库,完成对数据的增删查改以及其他MySQL语法操作。

数据库系列之SequoiaDB高可用部署实战

2、SDB高可用集群部署实战

2.1 SDB集群环境规划
2.1.1 高可用部署架构
高可用部署方式适用于对可靠性要求高,但数据量不大、总吞吐要求不高的应用场景。在本次高可用部署实战中采用高可用部署架构,节点分布如下所示:在该部署中,在三台服务器上,都部署有数据节点和编目节点,三个数据节点组成一个副本组,三个编目节点组成副本集群。协调节点部署在业务应用的服务器上,也可以将应用/协调节点合部到数据库服务器上。这种部署方式得优势就是高可靠性,任意一台服务器故障,数据的读写都不会受到影响。但数据容量与单个服务器的容量相同,且硬件成本相对较高。

数据库系列之SequoiaDB高可用部署实战

SDB集群会创建协调节点,编目节点和数据节点,具体配置如下:

数据库系列之SequoiaDB高可用部署实战

2.1.2 读写分离方案
SequoiaDB数据库支持读写分离,以下为例,Kafka消费数据写入到主节点,实时联机查询和批量分析作业访问从节点。

数据库系列之SequoiaDB高可用部署实战

2.1.3 多维分区
SequoiaDB支持多维分区操作,将一些大表划分为主分区和子分区集合,先对子集合做数据库分区,然后再通过表分区将子集合挂载到主集合上。当需要访问某一范围内的数据时,既可以将数据访问集中在若干个子集合中,又能同时发挥不同复制组并行计算的能力,从而提高处理速度和性能。

数据库系列之SequoiaDB高可用部署实战

2.2 系统环境配置
2.2.1 配置主机名hostname
  1. 打开/etc/hostname文件,输入hostname名称

[root@tango-centos01 ~]# vi /etc/hostname
tango-centos01
  1. 确认hostname修改成功

[root@tango-centos01 ~]# hostname
tango-centos01
  1. 在其它服务器tango-centos02和tango-centos03进行同样的修改

[root@tango-centos02 ~]$ hostname
tango-centos02
[root@tango-centos03 ~]$ hostname
tango-centos03
2.2.2 配置主机名IP地址映射
  1. 修改/etc/hosts,将服务器节点的主机名与IP映射关系配置到该文件中

192.168.112.101 tango-centos01
192.168.112.102 tango-centos02
192.168.112.103 tango-centos03
  1. 在其它服务器tango-centos02~tango-centos03进行同样的修改

2.2.3 关闭防火墙

确认防火墙已关闭

[root@tango-centos01 ~]# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
2.2.4 关闭SELinux

确认SELinux已关闭

[root@tango-centos01 ~]# sestatus
SELinux status: disabled
2.2.5 调整ulimit

在配置文件/etc/security/limits.conf中设置:

#<domain>      <type>    <item>        <value>
* soft core 0
* soft data unlimited
* soft fsize unlimited
* soft rss unlimited
* soft as unlimited
2.2.6 调整内核参数
  1. 添加下列参数至/etc/sysctl.conf文件调整内核参数

vm.swappiness = 0
vm.dirty_ratio = 100
vm.dirty_background_ratio = 40
vm.dirty_expire_centisecs = 3000
vm.vfs_cache_pressure = 200
vm.min_free_kbytes = 800
vm.overcommit_memory = 2
vm.overcommit_ratio = 85
  1. 动态生效

[root@tango-centos01 vm]# sysctl -p
2.2.7 关闭transparent_hugepage
  1. 编辑/etc/rc.local,在第一行“#!/bin/sh”的下一行添加如下两行内容:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
  1. 执行如下命令,使配置生效:

source /etc/rc.local
  1. 检查是否成功关闭transparent_hugepage。分别执行如下两条命令,输出结果中都有 “[never]” 则表示成功关闭了transparent_hugepage,如果是 “never” 并且有 “[always]” 或者 “[madvise]” 则关闭失败:

[root@tango-centos01 transparent_hugepage]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
[root@tango-centos01 transparent_hugepage]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
2.2.8 关闭NUMA

检查NUMA是否关闭,shell执行如下命令:

[root@tango-centos01 ~]# numastat
node0
numa_hit 942223
numa_miss 0
numa_foreign 0
interleave_hit 14648
local_node 942223
other_node 0

如果输出结果中只有node0,则表示成功禁用了NUMA,如果有node1出现则失败。

2.3 安装部署
  1. 以root 用户登陆目标主机,解压 SequoiaDB 巨杉数据库产品包

tar -xzvf sequoiadb-3.4-linux_x86_64.tar.gz
  1. 为解压得到的sequoiadb-3.4-linux_x86_64-installer.run安装包赋可执行权限

chmod u+x sequoiadb-3.4-linux_x86_64-installer.run
  1. 使用root用户运行sequoiadb-3.4-linux_x86_64-installer.run包

./sequoiadb-3.4-linux_x86_64-installer.run  --mode text --SMS false
  1. 使用 root 用户运行sequoiadb-3.2-linux_x86_64-installer.run包

./sequoiadb-3.4-linux_x86_64-enterprise-installer.run --mode text --SMS false
  1. 提示选择向导语言,可根据需要输入1选择英文,或者输入2选择中文

Language Selection
Please select the installation language
[1] English - English
[2] Simplified Chinese - 简体中文
Please choose an option [1] : 2
  1. 显示安装协议,输入1表示忽略阅读并同意协议,输入2表示读取完整协议内容

----------------------------------------------------------------------------
重要信息:请仔细阅读
下面提供了两个许可协议。
1. SequoiaDB 评估程序的最终用户许可协议
2. SequoiaDB 最终用户许可协议
如果被许可方为了生产性使用目的(而不是为了评估、测试、试用“先试后买”或演示)获得本程序,单击下面的“接受”按钮即表示被许可方接受 SequoiaDB 最终用户许可协议,且不作任何修改。
如果被许可方为了评估、测试、试用“先试后买”或演示(统称为“评估”)目的获得本程序:单击下面的“接受”按钮即表示被许可方同时接受(iSequoiaDB 评估程序的最终用户许可协议(“评估许可”),且不作任何修改;和(iiSequoiaDB 最终用户程序许可协议(SELA),且不作任何修改。
在被许可方的评估期间将适用“评估许可”。
如果被许可方通过签署采购协议在评估之后选择保留本程序(或者获得附加的本程序副本供评估之后使用),SequoiaDB 评估程序的最终用户许可协议将自动适用。
“评估许可”和 SequoiaDB 最终用户许可协议不能同时有效;两者之间不能互相修改,并且彼此独立。
这两个许可协议中每个协议的完整文本如下。
评估程序的最终用户许可协议
[1] 同意以上协议: 了解更多的协议内容,可以在安装后查看协议文件
[2] 查看详细的协议内容
请选择一个选项 [1] : 1
  1. 指定 SequoiaDB 安装路径,输入完毕后按回车。若没有输入直接回车,将使用默认的安装路径(/opt/sequoiadb)

----------------------------------------------------------------------------
请指定 SequoiaDB Server 将会被安装到的目录
安装目录 [/opt/sequoiadb]: /usr/local/sequoiadb
  1. 询问是否强制安装,y 表示强制安装,安装时发现有相关进程存在则会尝试停止进程,N 表示非强制安装,安装时发现有相关进程存在,就会报错退出。默认为非强制安装

----------------------------------------------------------------------------
是否强制安装?强制安装时可能会强杀残留进程
是否强制安装 [y/N]: n
  1. 提示配置 Linux 用户名和用户组,输入完毕后按回车。若没有输入直接回车,将会创建默认的用户名(sdbadmin)和用户组(sdbadmin_group)。该用户名用于运行 SequoiaDB 服务

数据库管理用户配置
配置用于启动SequoiaDB的用户名、用户组和密码
用户名 [sdbadmin]:
用户组 [sdbadmin_group]:
密码 [********] :
确认密码 [********] :
  1. 提示配置服务端口,输入完毕后按回车。若没有输入直接回车,将使用默认的服务端口号(11790)

集群管理服务端口配置
配置SequoiaDB集群管理服务端口,集群管理用于远程启动添加和启停数据库节点
集群管理服务端口 [11790]:
  1. 询问是否允许 SequoiaDB 巨杉数据库相关进程开机自启动,Y 表示允许,n 表示不允许。默认为允许

是否允许Sequoiadb相关进程开机自启动?
Sequoiadb相关进程开机自启动 [Y/n]: y
  1. 询问是否继续安装,Y 表示继续,n 表示不继续。默认为继续

设定现在已经准备将 SequoiaDB Server 安装到您的电脑.
您确定要继续? [Y/n]: y
  1. 当屏幕上显示以下信息,表示 SequoiaDB 已经安装完成

----------------------------------------------------------------------------
正在安装 SequoiaDB Server 于您的电脑中,请稍候.
安装
0% ______________ 50% ______________ 100%
#########################################
----------------------------------------------------------------------------
安装程序已经完成安装 SequoiaDB Server 于你的电脑中.
  1. 切换到 sdbadmin 用户,进行安装检查。使用如下命令如能正常查到 SequoiaDB 的版本信息,说明 SequoiaDB 安装成功。

[sdbadmin@tango-centos01 ~]$ sequoiadb --version
SequoiaDB version: 3.4
Release: 32435
Git version: 485380326b0177244669df7906454a753a7fb900
2019-11-14-23.37.58
  1. 在其它服务器tango-centos02~ tango-centos03安装SequoiaDB

2.4 高可用部署架构配置和启动
2.4.1 检查SDB配置服务状态
  1. 切换到sdbadmin用户

#su - sdbadmin
  1. 检查SequoiaDB的配置服务状态

#service sdbcm status
[sdbadmin@tango-centos01 ~]$ service sdbcm status
Redirecting to /bin/systemctl status sdbcm.service
sdbcm.service - SequoiaDB Daemon
Loaded: loaded (/usr/lib/systemd/system/sdbcm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2021-12-25 15:30:25 CST; 14min ago
Process: 3746 ExecStart=/usr/local/sequoiadb/bin/sdbcmart (code=exited, status=0/SUCCESS)
Main PID: 3749 (sdbcm)
Memory: 28.6M
CGroup: /system.slice/sdbcm.service
├─3747 sdbcmd
└─3749 sdbcm(11790)

确认系统提示“sdbcm is running”表示服务正在运行,否则请执行命令“service sdbcm start”重新配置服务程序:

2.4.2 启动临时协调节点
  1. 在任意一台数据库服务器上(以下步骤都只需要在这台服务器上操作),启动SequoiaDB Shell控制台

[sdbadmin@tango-centos01 ~]$ cd /usr/local/sequoiadb/ 
[sdbadmin@tango-centos01 sequoiadb]$ ./bin/sdb

  1. 连接到本地的集群管理服务进程sdbcm

> var oma = new Oma("localhost", 11790)
  1. 创建临时协调节点

> oma.createCoord(18800, "/usr/local/sequoiadb/database/coord/18800")
  1. 启动临时协调节点

> oma.startNode(18800)
2.4.3 通过命令配置和启动编目节点
  1. 连接到临时协调节点,在 shell 命令中输入:

> var db = new Sdb("localhost",18800)

其中18800为协调节点端口号

  1. 创建一个编目节点组

> db.createCataRG("tango-centos01", 11800, "/usr/local/sequoiadb/database/cata/11800")
  • tango-centos01:第一台服务器主机名

  • 11800:为编目节点服务端口

  • /usr/local/sequoiadb/database/cata/11800:为编目节点的数据文件存放路径

  1. 添加另外两个编目节点

> var cataRG = db.getRG("SYSCatalogGroup");
> var node1 = cataRG.createNode("tango-centos02", 11800,"/usr/local/sequoiadb/database/cata/11800")
> var node2 = cataRG.createNode("tango-centos03", 11800,"/usr/local/sequoiadb/database/cata/11800")
  1. 启动编目节点组

> node1.start()
> node2.start()
2.4.4 通过命令配置和启动数据节点
  1. 创建数据节点组

> var dataRG = db.createRG("datagroup1")
  1. 添加数据节点

> dataRG.createNode("tango-centos01", 11820, "/usr/local/sequoiadb/database/data/11820")
> dataRG.createNode("tango-centos02", 11820, "/usr/local/sequoiadb/database/data/11820")
> dataRG.createNode("tango-centos03", 11820, "/usr/local/sequoiadb/database/data/11820")
  1. 启动数据节点组

> dataRG.start()
2.4.5 部署启动协调节点
  1. 创建协调节点组

> var rg = db.createCoordRG()
  1. 创建协调节点

> rg.createNode("tango-centos02", 11810, "/usr/local/sequoiadb/database/coord/11810")
  1. 启动协调节点

> rg.start()
2.4.6 删除临时协调节点
  1. 连接到本地的集群管理服务进程 sdbcm

> var oma = new Oma("localhost", 11790)
  1. 删除临时协调节点

> oma.removeCoord(18800)

数据库配置启动完成

2.4.7 检查节点信息
[sdbadmin@tango-centos01 ~]$ sdblist
sequoiadb(11800) (4953) C
sequoiadb(11820) (5889) D
Total: 2
#sdblist -t all l m local
[sdbadmin@tango-centos02 ~]$ sdblist
sequoiadb(11800) (2065) C
sequoiadb(11820) (2122) D
sequoiadb(11810) (2167) S
Total: 3
[sdbadmin@tango-centos03 ~]$ sdblist
sequoiadb(11800) (1955) C
sequoiadb(11820) (2013) D
Total: 2
2.4.8 创建集合空间和集合
[sdbadmin@tango-centos02 ~]$ sdb
Welcome to SequoiaDB shell!
help() for help, Ctrl+c or quit to exit
> var db=new Sdb("localhost",11810);
Takes 0.022171s.
> db.createCS("cs01");
localhost:11810.cs01
Takes 0.844069s.
> db.cs01.createCL("cl01");
localhost:11810.cs01.cl01
Takes 0.668449s.
> db.listCollections();
{
"Name": "cs01.cl01"
}
Return 1 row(s).
Takes 0.133876s.
>
2.5 MySQL引擎部署
2.5.1 安装MySQL实例
  1. 为解压得到的sequoiasql-mysql-3.4-linux_x86_64-installer.run安装包赋可执行权限

chmod u+x sequoiasql-mysql-3.4-linux_x86_64-installer.run
  1. 使用 root 用户运行sequoiasql-mysql-3.4-linux_x86_64-enterprise-installer.run包

./sequoiasql-mysql-3.4-linux_x86_64-installer.run --mode text
  1. 程序提示选择向导语言,输入2,选择中文

Language Selection
Please select the installation language
[1] English - English
[2] Simplified Chinese - 简体中文
Please choose an option [1] : 2
  1. 显示安装协议,输入1表示忽略阅读并同意协议,输入2表示读取完整协议内容

BitRock InstallBuilder评估本所建立
欢迎来到 SequoiaSQL MySQL Server 安装程序
----------------------------------------------------------------------------
GNU 通用公共授权
第二版, 19916
著作权所有 (C) 19891991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
允许每个人复制和发布本授权文件的完整副本,但不允许对它进行任何修改。

[1] 同意以上协议: 了解更多的协议内容,可以在安装后查看协议文件
[2] 查看详细的协议内容
请选择一个选项 [1] : 1
  1. 输入安装路径后按回车,使用/usr/local/sequoiasql/mysql

请指定 SequoiaSQL MySQL Server 将会被安装到的目录
安装目录 [/usr/local/sequoiadb]: /usr/local/sequoiasql/mysql
  1. 提示输入用户名和用户组和用户密码(默认创建 sdbadmin 用户和 sdbadmin_group 用户组,默认密码为 sdbadmin)

数据库管理用户配置
配置用于启动SequoiaSQL-MySql的用户名、用户组和密码
用户名 [sdbadmin]:
用户组 [sdbadmin_group]:
密码 [********] :
确认密码 [********] :
  1. 系统提示开始安装,需要用户确认

设定现在已经准备将 SequoiaSQL MySQL Server 安装到您的电脑.
您确定要继续? [Y/n]: y
  1. 安装完成

正在安装 SequoiaSQL MySQL Server 于您的电脑中,请稍候.
安装中
0% ______________ 50% ______________ 100%
#########################################
----------------------------------------------------------------------------
安装程序已经完成安装 SequoiaSQL MySQL Server 于你的电脑中.
2.5.2 部署MySQL实例组件
  1. 切换用户及目录

[root@tango-centos03 sequoiadb-3.4]# su - sdbadmin 
[sdbadmin@tango-centos01 ~]$ cd /usr/local/sequoiasql/mysql
  1. 添加实例

bin/sdb_sql_ctl addinst myinst -D database/3306/

如果3306端口被占用,可以使用-p参数指定实例端口

bin/sdb_sql_ctl addinst myinst -D database/3316/ -p 3316

如以下运行结果

[sdbadmin@tango-centos03 mysql]$ bin/sdb_sql_ctl addinst myinst -D database/3306/
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Adding instance myinst ...
Start instance myinst ...
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
ok
  1. 查看实例

[sdbadmin@tango-centos03 mysql]$ bin/sdb_sql_ctl listinst
NAME SQLDATA SQLLOG
myinst /usr/local/sequoiasql/mysql/database/3306/ /usr/local/sequoiasql/mysql/myinst.log
Total: 1
  1. 启动实例

[sdbadmin@tango-centos01 mysql]$ bin/sdb_sql_ctl start myinst
Check port is available ...
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Starting instance myinst ...
ok (PID: 7785)
[sdbadmin@tango-centos03 mysql]$ bin/sdb_sql_ctl status
INSTANCE
PID SVCNAME SQLDATA SQLLOG
myinst 7785 3306 /usr/local/sequoiasql/mysql/database/3306/ /usr/local/sequoiasql/mysql/myinst.log
Total: 1; Run: 1
  1. 停止实例

[sdbadmin@tango-centos03 mysql]$ bin/sdb_sql_ctl stop myinst
Stoping instance myinst (PID: 7785) ...
2.5.3 使用MySQL
  1. 配置SequoiaDB连接地址。默认的SequoiaDB连接地址为“localhost:11810”,如需修改可以参考以下两种方式:

  • 通过bin/sdb_sql_ctl指定实例名修改

#sdb_sql_ctl chconf myinst --sdb-conn-addr=192.168.112.102:11810,xxxx:11810
[sdbadmin@tango-centos01 ~]$ sdb_sql_ctl chconf myinst --sdb-conn-addr=192.168.112.102:11810
Changing configure of instance myinst ...
Enter password:
ok
  • 通过配置文件修改:在database目录修改auto.cnf,添加参数sequoiadb_conn_addr

[sdbadmin@tango-centos03 3306]$ cd /usr/local/sequoiasql/mysql/database/3306
[sdbadmin@tango-centos03 3306]$ vi auto.cnf
# SequoiaDB addresses.
sequoiadb_conn_addr="192.168.112.102:11810"

重启MySQL服务后生效

  1. 登陆到MySQL

[sdbadmin@tango-centos01 ~]$ mysql -h 127.0.0.1 -P 3306 -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.7.25 Source distribution

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql>
  1. 创建database和表

mysql> create database cs;
mysql> create table cl(a int,b int,c text,primary key(a,b));
2.6 SDB集群操作
2.6.1 SDB集群启停

1)启动整个集群

#切换到sdbadmin用户
sdbstart t all

2)关闭整个集群

#切换到sdbadmin用户
sdbstop t all

3)查看SDB集群信息

[sdbadmin@tango-centos01 ~]$ sdblist
sequoiadb(11800) (4953) C
sequoiadb(11820) (5889) D
Total: 2
#sdblist -t all l m local

4)手动启动SDB特定节点

#切换到sdbadmin用户:su  sdbadmin
#连接到协调节点
$ /opt/sequoiadb/bin/sdb
> var db = new Sdb( "localhost", 11810 )
#得到分区组
> dataRG = db.getRG( "<datagroup1>" )
#得到数据节点
> dataNode = dataRG.getNode( "<hostname1>", "<servicename1>" )
#启动节点
> dataNode.start()

5)手动停止SDB集群

#连接到协调节点
$ /opt/sequoiadb/bin/sdb
> var db = new Sdb( "localhost", 11810 )
#得到分区组
> dataRG = db.getRG( "<datagroup1>" )
#得到数据节点
> dataNode = dataRG.getNode( "<hostname1>", "<servicename1>" )
#停止节点
> dataNode.stop()
2.6.2 SDB集合操作

1)进入SDB集群,创建逻辑域CS_DOMAIN_1

[sdbadmin@tango-centos02 bin]$ sdb
> var db = new Sdb("localhost",11810);
> db.createDomain("CS_DOMAIN_1",["datagroup1",],{AutoSplit:true});
CS_DOMAIN_1
Takes 0.006933s.

2)创建集合空间CS01

> db.createCS("CS01",{Domain:"CS_DOMAIN_1"});
localhost:11810. CS01

3)创建数据域

>db.createDomain("CS_DOMAIN_1",["datagroup1"],{AutoSplit:true});

4)创建主表

db.getCS(mainCSName).createCL("CL01",{"ShardingKey":{"DATE":1,"TIME":1},"ShardingType":"range","IsMainCL":true});

5)创建每天子表

db.createCS("CS_D1", {"Domain":domainName}).createCL("CL01",{"ShardingKey":{"DATE":1,"TIME":1,"ID":1},"ShardingType":"hash","Compressed":true,"CompressionType":"lzw","EnsureShardingIndex": false, "AutoSplit": true, ReplSize:2});

6)将子表挂载到主表上

db.getCS(mainCSName).getCL("CL01").attachCL("CS_D1.CL01",{"LowBound":{"DATE":"2021-12-26","TIME":"00:00:00"},"UpBound":{"DATE":"2021-12-26","TIME":"09:59:59"}});

7)从主表上卸载子表

db.getCS(mainCSName).getCL("CL01").detachCL("CS_D1.CL01")

8)创建主键索引

db. CS01.CL01.createIndex("CL01_PriIdx",{"DATE":1,"TIME":1},true);

9)集合空间和集合查询

#查看集合空间
db.listCollectionSpacespaces();
#查看集合空间中有哪些集合
db.snapshot( SDB_SNAP_COLLECTIONSPACES,{"Name":"CS_D1"},{"Collection":{}})
#查看子表信息
db.snapshot(SDB_SNAP_CATALOG,{"CataInfo.SubCLName":"CS_D1.CL01"})
#查看某个集合空间下有哪些子表
db.snapshot(SDB_SNAP_CATALOG,{"CataInfo.SubCLName":{"$regex":"^CS_D1 [.].*"}})
#获取集合空间的空间使用信息
db.snapshot(5,{Name:"CS_D1"},{Name:"",PageSize:"",TotalSize:"",FreeSize:"",TotalDataSize:"",FreeDataSize:"",TotalIndexSize:"",FreeIndexSize:""})

3、Kafka数据入库SDB

3.1 Kafka与SDB连接架构
在Kafka的消费端,SDB数据库集群通过Java接口将Kafka订阅的数据存储到数据库中,每个Topic会关联一个集合。

数据库系列之SequoiaDB高可用部署实战

3.2 SDB配置

Kafka主题、SequoiaDB集合、消息分区配置文件如下:

config.json
[{
topicName:'SYSLOG',
sdbCLName:'SYSLOG ',
partitionNum:4,
topicGroupName:SYSLOG-consumer-group',
pollTimeout:5000
}]

消费者的业务逻辑是采用一线程一主题的方式进行消息的消费,在Kafka的配置中可以指定多个topic和collection集合。在实际的联调测试中,会存在多个Topics并行运行的场景。

3.3 Kafka和SDB对接功能实现
Kafka数据写入到SDB功能组件如下图所示:
  • 配置信息java实体类KafkaConsumerConfig

  • 配置信息获取工具类Configuration

  • 消费者业务逻辑主程序入口KafkaSdb采用一线程一主题的方式进行消息的消费

  • ConsumerThread线程类负责具体的消息的消费,并且将消息数据写入到SequoiaDB中

数据库系列之SequoiaDB高可用部署实战

4、Spark-SDB对接配置

4.1 Spark与SDB连接架构
性能数据通过Kafka集群保存到SDB集群后,Spark计算集群会根据以下场景访问数据:
  1. 定时批量任务对性能数据进行加工计算,并将结果保存到MySQL结构化数据库中,与报表平台衔接

  2. 对于UI端动态的SQL查询任务,通过PySpark解析SQL并访问SDB集群数据,加工计算后将结果集返回查询接口

数据库系列之SequoiaDB高可用部署实战

4.2 Spark与SDB对接测试
  1. Spark与SDB对接使用到驱动程序spark-sequoiadb_2.11-3.4.jar

  2. 创建映射表

    mappingSql = 
"CREATE temporary view SYSLOG" +
"USING com.sequoiadb.spark " +
"OPTIONS( " +
"host '192.168.112.102:11810', " +
"collectionspace 'CS01', " +
"collection ' SYSLOG', " +
"preferredinstance 'S', " +
"partitionblocknum 16, " +
"partitionmode auto, " +
"partitionmaxnum 100000, " +
"user 'sdbadmin'," +
"passwordtype 'file'," +
"password '/usr/local/spark/sdbpasswd/passwd'" +
")";
  1. 使用SparkSQL进行查询

    #Query SDB
queryTable = "SELECT * FROM SYSLOG limit 20";
query_sdb = ctx.sql(queryTable)
  1. 运行Spark程序

spark-submit --master yarn --deploy-mode client --jars jars/spark-sequoiadb_2.11-3.4.jar spark2sdb-01.py

以上是SequoiaDB数据库高可用部署实战,并使用SequoiaDB作为数据存储实现Kafka数据消费和Spark接入查询分析功能。实际项目运行中,通过多维分区子表实现每天超过1亿条数据的并发写操作和单个批量作业2000w的查询业务。


参考资料:

  1. https://doc.sequoiadb.com/cn

  2. 大数据系列之日志数据实时分析

原文始发于微信公众号(牧羊人的方向):数据库系列之SequoiaDB高可用部署实战

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/65221.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!