BigInsights分布式数据库
BigInsights入门篇
文章目录
1 前言
随着互联网和大数据技术的发展,企业面临着越来越多的数据存储和处理需求,传统的关系型数据库已经无法满足这些需求。传统的单机数据库在面对大规模数据量和高并发访问时,往往会面临性能瓶颈和可靠性问题。
云原生分布式数据库BigInsights是贝克迈思(https://www.bigmath.com/)根据当前大数据时代的需求开发的新一代高性能分布式数据库。
BigInsights分布式数据库具有如下优点,可以解决传统数据库的问题:
1)将数据分布存储在多台机器上,实现数据的水平扩展,从而提高了系统的整体性能和容量。
2)通过数据复制和容错机制来提高系统的可靠性,即使某一台机器发生故障,整个系统仍然可以继续运行,从而避免了单点故障带来的风险。
3)支持跨地域、跨数据中心的部署,提高了系统的可用性和灾备能力。
因此,BigInsights分布式数据库可以有效解决单点故障和性能瓶颈的问题,提高系统的可靠性、可用性和扩展性。
本文将通过一些简单的步骤和示例,演示BigInsights分布式数据库的基本使用,能让读者快速入门。
2 数据库部署
2.1 环境准备
下面,让我们先做一些环境的准备,搭建3台虚拟机(VM),配置如下:
服务器 | IP | 操作系统 | CPU | 内存 |
---|---|---|---|---|
A | 192.168.1.146 | Ubuntu 22.04.1 | 2核 | 4G |
B | 192.168.1.230 | Ubuntu 22.04.1 | 2核 | 4G |
C | 192.168.1.69 | Ubuntu 22.04.1 | 2核 | 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分布式数据库的认识和理解,如果大家有任何问题和建议,希望可以在评论区留言,谢谢大家的支持!