BigInsights分布式数据库入门篇

BigInsights分布式数据库

BigInsights入门篇



1 前言

随着互联网和大数据技术的发展,企业面临着越来越多的数据存储和处理需求,传统的关系型数据库已经无法满足这些需求。传统的单机数据库在面对大规模数据量和高并发访问时,往往会面临性能瓶颈和可靠性问题。
云原生分布式数据库BigInsights是贝克迈思(https://www.bigmath.com/)根据当前大数据时代的需求开发的新一代高性能分布式数据库。
BigInsights分布式数据库具有如下优点,可以解决传统数据库的问题:
1)将数据分布存储在多台机器上,实现数据的水平扩展,从而提高了系统的整体性能和容量。
2)通过数据复制和容错机制来提高系统的可靠性,即使某一台机器发生故障,整个系统仍然可以继续运行,从而避免了单点故障带来的风险。
3)支持跨地域、跨数据中心的部署,提高了系统的可用性和灾备能力。
因此,BigInsights分布式数据库可以有效解决单点故障和性能瓶颈的问题,提高系统的可靠性、可用性和扩展性。
本文将通过一些简单的步骤和示例,演示BigInsights分布式数据库的基本使用,能让读者快速入门。


2 数据库部署

2.1 环境准备

下面,让我们先做一些环境的准备,搭建3台虚拟机(VM),配置如下:

服务器IP操作系统CPU内存
A192.168.1.146Ubuntu 22.04.12核4G
B192.168.1.230Ubuntu 22.04.12核4G
C192.168.1.69Ubuntu 22.04.12核4G

从上表我们可以看到,BigInsights分布式数据库对于硬件环境的要求并不高,只要CPU达到2核就可以了。
这里,我们使用VMware创建新的三台虚拟机。

2.2 分布式部署

下面开始BigInsights分布式集群的部署,查看其相关的用户手册,发现,如果我们采用手动安装,部署步骤也十分的简单。
另外,为了尽量简化安装部署过程,还提供了整套的自动安装部署工具,通过Web管理台来进行所有的安装部署过程。同时,还提供了完善的监控功能,十分丰富多样的监控图表,从集群的所有主机,到数据库的各种性能指标,再细致化到数据库中的各个执行语句(DDL,DML,DCL等),都做了相应的监控。
接下来,让我们从手动部署方式开始,来仔细了解一下相关的四个部署过程:

2.2.1 解压软件包

仅仅需要在以上三台虚拟机上,均执行如下解压命令,解压软件包即可:

tar -zxf bigmath-0.0.0.1-c2bc5e7f0beac8ff27ae463b3c494fd0bc803541-release-clang15-ubuntu22-x86_64.tar.gz 

2.2.2 安装依赖包

BigInsights分布式数据的服务运行,需要依赖Python3,下面,我们按照要求进行Python3的安装:
需要在以上三台虚拟机上,均执行如下命令:

sudo apt install -y libffi-dev python3 python3-dev python3-venv

sudo ln -s /usr/bin/python3 /usr/bin/python

注:如果遇到安装失败的情况,可能需要先执行如下命令,进行更新软件包列表:

sudo apt-get update

然后再重新执行安装依赖包的命令。

2.2.3 集群配置

1) 在做配置之前,我们需要创建相关的数据存储目录,用于存储Mserver,DBserver的相关数据,日志等。
需要在以上三台虚拟机上,均执行如下命令来创建相应的数据存储目录:

mkdir data/mserverdata -p
mkdir data/dbserverdata -p

操作到这一步,基本的运行环境就差不多了,接下来,我们便要进入最关键的集群配置阶段了。
2)BigInsights分布式集群的相关配置,主要涉及到两个服务(Mserver与DBserver)的相关配置:
假设,我们登录在192.168.1.146上。
我们进入解压后的工作目录下:

cd ~/bigmath-0.0.0.1/bin

为了启动服务简单化,我们将需要启动服务所需要的参数写入配置文件中,例如,写入到mserver.conf中与dbserver.conf中。
我们执行如下命令,编辑mserver.conf,编辑内容如下所示:

vim mserver.conf
--master_addresses=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100 	#指定集群中启动mserver的所有节点的RPC地址逗号分隔列表,格式为IP1:端口,IP2:端口,IP3:端口。端口默认为7100
--rpc_bind_addresses=192.168.1.146:7100							#指定本节点RPC连接绑定到的网络接口地址,格式为IP:端口。端口默认为7100
--fs_data_dirs=/home/bigmath/data/mserverdata								#指定数据存储目录,就是在前面步骤中新建的目录,要求绝对路径
--replication_factor=3										#每个分片要存储的副本或数据副本的数量,又名副本因子,此值应配置与集群的mserver/dbserver的数量相等,此例我们设置3节点组成的集群,需要3节点的每一个节点均需要启动mserver/dbserver服务。
--webserver_port=7000										#mserver启动后,默认启用的Web服务的访问端口

之后,输入:wq,保存退出文件的编辑。

我们继续执行如下命令,编辑dbserver.conf,编辑内容如下所示:

vim dbserver.conf
--tserver_master_addrs=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100	#指定所有mserver RPC地址的逗号分隔列表
--rpc_bind_addresses=192.168.1.146:9100    						#指定本节点RPC连接绑定到的网络接口地址,格式为IP:端口。端口默认为9100
--enable_bsql												#启用BSQL API
--pgsql_proxy_bind_address=0.0.0.0:5433							#指定BSQL API的TCP/IP绑定地址。默认值为0.0.0.0:5433,允许侦听所有IPv4地址访问localhost上的端口5433。
--cql_proxy_bind_address=0.0.0.0:9042								#指定绑定BCQL API的绑定地址。默认值:0.0.0.0:9042
--fs_data_dirs=/home/bigmath/data/dbserverdata								#指定数据存储目录,就是在前面步骤中新建的目录,要求绝对路径
--bsql_enable_auth=true										#启用BSQL身份认证

接下来,我们对另外的两个节点都做类似上述的文件配置操作,相应的配置内容如下所示:
针对192.168.1.230节点的mserver.conf,其内容如下:

--master_addresses=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100 
--rpc_bind_addresses=192.168.1.230:7100                                                       --fs_data_dirs=/home/bigmath/data/mserverdata                                                              --replication_factor=3                                                                          
--webserver_port=7000  

针对192.168.1.230节点的dbserver.conf,其内容如下:

--tserver_master_addrs=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100	
--rpc_bind_addresses=192.168.1.230:9100    						
--enable_bsql												
--pgsql_proxy_bind_address=0.0.0.0:5433							
--cql_proxy_bind_address=0.0.0.0:9042								
--fs_data_dirs=/home/bigmath/data/dbserverdata								
--bsql_enable_auth=true

针对192.168.1.69节点的mserver.conf,其内容如下:

--master_addresses=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100
--rpc_bind_addresses=192.168.1.69:7100                                                       
--fs_data_dirs=/home/bigmath/data/mserverdata                                                              
--replication_factor=3                                                                        
--webserver_port=7000   

针对192.168.1.69节点的dbserver.conf,其内容如下:

--tserver_master_addrs=192.168.1.146:7100,192.168.1.230:7100,192.168.1.69:7100
--rpc_bind_addresses=192.168.1.69:9100
--enable_bsql	
--pgsql_proxy_bind_address=0.0.0.0:5433
--cql_proxy_bind_address=0.0.0.0:9042
--fs_data_dirs=/home/bigmath/data/dbserverdata	
--bsql_enable_auth=true	

从上述的配置过程可以看到,只需要注意RPC绑定的为自己的IP地址,其它的参数值均可以配置为相同的值,就可以了,配置十分的简单。
因为端口是自定义的,如果服务器上已经有其它应用服务占用了该端口,我们也仅仅需要对三节点同步做端口相应的修改即可。

2.2.4 启动集群

当我们完成上面配置步骤后,就可以通过如下命令启动服务(Mserver与DBserver)了。
同样,我们假设登录在192.168.1.146上。
进入到工作目录下:

cd ~/bigmath-0.0.0.1/bin

执行如下命令,启动Mserver服务:

 nohup ./bm-master --flagfile mserver.conf >& ~/data/mserverdata/mserver.out &

启动DBserver服务:

 nohup ./bm-tserver --flagfile dbserver.conf >& ~/data/dbserverdata/dbserver.out &

之后,我们依次在另外两个节点192.168.1.230与192.168.1.69上也执行如上命令,此处不再赘述。

2.2.5 进程检查

在执行上述步骤后,我们简单的检查一下每一个服务器上的两个服务的启动情况:

ps aux | grep bm-

我们可以看到有如下进程:

bigmath     3555  0.3  1.8 411184 73704 pts/0    Sl   03:29   0:00 ./bm-master --flagfile mserver.conf
bigmath     3686  2.8  1.9 1035468 75732 pts/0   Sl   03:31   0:00 ./bm-tserver --flagfile dbserver.conf
bigmath     3769  0.6  1.6 261456 65656 pts/0    S    03:31   0:00 /home/bigmath/bigmath-0.0.0.1/postgres/bin/postgres -D /home/bigmath/data/dbserverdata/pg_data -p 5433 -h 0.0.0.0 -k /tmp/.bm.0.0.0.0:5433 -c unix_socket_permissions=0700 -c logging_collector=on -c log_directory=/home/bigmath/data/dbserverdata/bm-data/tserver/logs -c bm_pg_metrics.node_name=utest:9000 -c bm_pg_metrics.port=13000 -c config_file=/home/bigmath/data/dbserverdata/pg_data/bsql_pg.conf -c hba_file=/home/bigmath/data/dbserverdata/pg_data/bsql_hba.conf
bigmath     3799  0.0  0.0   6480  2308 pts/0    S+   03:31   0:00 grep --color=auto bm-

2.2.6 集群检查

到目前为止,一切都很顺利。最后,我们可以从浏览器访问如下地址,来简单检测集群是否正常。
打开浏览器,输入如下地址:

http://192.168.1.146:7000/

可以看到下面的类似界面:

在这里插入图片描述
到了这里,集群部署就完成了。
从以上的操作可以看到,BigInsights集群的部署实际上十分的简单,仅仅需要几个步骤就部署好了。

3 数据库基本使用

在完成BigInsights分布式集群的部署后,接下来,让我们了解一下如何操作数据库的。BigInsights数据库兼容PostgreSQL的各种语法,在大部分情况下,使用PostgreSQL的语法对BigInsights数据库操作是有效的,但也存在与PostgreSQL不同的地方,它们是BigInsights数据库SQL所特有的语法。

3.1 连接数据库

BigInsights数据库提供了丰富的工具供使用,其中连接数据库的客户端工具./bsqlsh,位于解压后的工作目录~/bigmath-0.0.0.1/bin下。
这里,我们使用它来连接数据库,BigInsights连接数据库的语法完全类似于Postgresql。
使用如下命令连接数据库:

./bsqlsh -h 192.168.1.146 -p 5433 -U bigmath

提示需要输入密码,我们输入密码为:bigmath
在这里插入图片描述
注:BigInsights数据库的默认用户为bigmath,默认密码为:bigmath,默认数据库为:bigmath。

当然,我们也可以使用其它客户端连接数据库,例如Navicat。在Navicat中,选择使用PostgreSQL连接方式。
按照如下内容进行相应的填写:
主机:192.168.1.69
端口:5433
初始数据库:bigmath
用户名:bigmath
密码:bigmath

在这里插入图片描述

填写之后,可以点击【测试连接】,进行测试。

注意:主机的IP地址,我们可以随意连接3个节点的任意一个节点的IP地址,均可以连接到数据库上。

3.2 新建数据库

在连接数据库后,我们可以使用如下脚本,来创建新的数据库:

CREATE DATABASE db_test;

在这里插入图片描述

3.3 查看数据库

bsqlsh命令的使用方法与PostgreSQL的客户端psql命令的使用方法也保持一致,例如:
列举数据库:\l
选择数据库:\c 数据库名
查看该某个库中的所有表:\dt
查看某个库中的某个表结构:\d 表名
退出:\q

我们使用 \l 查看当前的所有数据库信息,显示如下:

在这里插入图片描述

3.4 新建表

首先,我们先切换到新建的数据库中:

\c db_test

在这里插入图片描述
使用如下脚本,我们来创建表t_user:

CREATE TABLE t_user (
  uid int8 NOT NULL,
  uname varchar(20) NOT NULL,
  phone varchar(11),
  PRIMARY KEY (uid)
)
;

在这里插入图片描述

3.5 查看表

使用如下,查看表:

\d t_user; 

在这里插入图片描述
注意:BigInsights使用的索引是lsm,而不是PostgreSQL使用的btree。

3.6 插入数据

使用如下脚本,插入数据:

INSERT INTO t_user VALUES (1,'张三','19136253339'),(2,'王五','13566984785'),(3,'赵二','13147851203');

在这里插入图片描述

3.7 检索数据

使用如下脚本,检索数据:

SELECT * FROM t_user WHERE uid=2; 

在这里插入图片描述

3.8 更新数据

使用如下脚本,针对uid为2的phone字段值做更新:

 UPDATE t_user SET phone='13500001232' WHERE uid=2;

在这里插入图片描述

3.9 删除数据

使用如下脚本,删除uid为3的行:

DELETE FROM t_user WHERE uid=3;

在这里插入图片描述
以上为数据库的基本操作示例,并没有涉及特别的语法介绍,本文将不再过多描述,下一节将介绍一些BigInsights的特定SQL语法。

4 BigInsights的特定SQL语法

在上面的第三部分中介绍的是一些最基本的数据库操作,基本上与PostgreSQL完全相同。但BigInsights的SQL语法也存在有一些特定的语法,以下针对其中一些特有的语法做下简单的介绍,供大家了解。

4.1 创建共址数据库

通常情况下,使用上面的建数据库语法能够满足绝大数需求,该库下的所有对象默认将进行分片处理,针对于本文中的3节点情况,每一张表将被默认分为3个分片。但当整个数据库很小(小于500 GB),或者数据需要按照地理进行分布等情况下,不分片,会有助于提高访问数据的性能,即允许数据一起驻留在一个名为“共址分片”的分片中。特别支持的SQL语法为:

CREATE DATABASE <database_name> with COLOCATION = true;

假设我们需要创建共址数据库db_colocation:

CREATE DATABASE db_colocation with COLOCATION = true;

在这里插入图片描述

4.2 创建共址表

默认情况下,共址数据库中的所有表都是共址的,创建表时无需启用共址,但也可以指定在共址数据库中使用不共址的表。特别支持的SQL语法为:

CREATE TABLE table_name ( [ table_elem [ , ... ] ] )  WITH ( COLOCATION = { 'true' | 'false' } )

注意:这里的SQL语法仅仅特别强调不同而截取,完整的SQL语法请参阅BigInsights的用户手册。
例如:
创建共址表t_config_t,请使用以下命令:

\c db_colocation 

CREATE TABLE t_config_t (cid int,cname char(20)) WITH (COLOCATION = true);

在这里插入图片描述创建非共址表 t_config_f,请使用以下命令:

\c db_colocation 

CREATE TABLE t_config_f (cid int,cname char(20)) WITH (COLOCATION = false);

在这里插入图片描述
单从表面上看,我们无法看到这个语法究竟起到了什么样的作用。下面,让我们从WEB管理平台,了解一下两者的分片区别。
打开浏览器,输入如下地址:
http://192.168.1.146:7000/tables
进入页面之后,分别点击表t_config_t与t_config_f,我们可以看到如下的不同:
表t_config_t,仅仅存在一个分片,如下图所示,所有的数据将被包含在一个区间:

在这里插入图片描述
表t_config_f,存在3个分片,如下图所示,所有的数据将依据Hash算法,分布在3个区间:
在这里插入图片描述

4.3 建表(指定分片数)语法

在默认情况下,集群会依据特定的算法,在创建表时,将数据进行分片存储。针对本文中的3节点集群,默认会分为3分片。但是,建表语法也支持,自定义分片数。特别支持的SQL语法为:

CREATE TABLE table_name ( [ table_elem [ , ... ] ] )  [ SPLIT { INTO positive_int_literal TABLETS  | AT VALUES ( split_row [ , ... ] ) } ] )

注意:这里的SQL语法仅仅特别强调不同而截取,完整的SQL语法请参阅BigInsights的用户手册。
例如:
创建表t_tiles,分片数为5,请使用以下命令:

\c db_test ;

CREATE TABLE t_tiles(tid int,tname char(20)) SPLIT INTO 5 TABLETS ;

在这里插入图片描述
同样,打开浏览器,输入如下地址:
http://192.168.1.146:7000/tables
进入页面之后,点击表t_tiles,可以看到如下图所示的5个分片的信息:

在这里插入图片描述
BigInsights数据库还涉及的其它特定语法,限于篇幅,这里不再一一讲述。

5 总结

本文主要是面向初学者,介绍了BigInsights分布式数据库的部署,数据库的基本操作,以及部分特定SQL语法的使用。本文旨在抛砖引玉,供读者快速了解BigInsights分布式数据库,在阅读后,能初步建立对BigInsights分布式数据库的认识和理解,如果大家有任何问题和建议,希望可以在评论区留言,谢谢大家的支持!

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值