数据库系列之SequoiaDB高可用集群部署(二)

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

数据库系列之SequoiaDB高可用集群部署(一)
数据库系列之SequoiaDB高可用集群部署(二)


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 通用公共授权
第二版, 1991年6月
著作权所有 (C) 1989,1991 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会关联一个集合。

在这里插入图片描述

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中

在这里插入图片描述

4、Spark-SDB对接配置
4.1 Spark与SDB连接架构

性能数据通过Kafka集群保存到SDB集群后,Spark计算集群会根据以下场景访问数据:

  1. 定时批量任务对性能数据进行加工计算,并将结果保存到MySQL结构化数据库中,与报表平台衔接
  2. 对于UI端动态的SQL查询任务,通过PySpark解析SQL并访问SDB集群数据,加工计算后将结果集返回查询接口

在这里插入图片描述

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. 大数据系列之日志数据实时分析

转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/122594023
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值