资讯专栏INFORMATION COLUMN

国产数据系列之万里数据库GreatDB整体架构和快速部署

IT那活儿 / 1069人阅读
国产数据系列之万里数据库GreatDB整体架构和快速部署

GreatDB作为一款国产化分布式数据库产品,在金融、运营商、能源等行业已有广泛应用。其在Mysql8.0MGR的基础之上做了大量的优化,在分布式可扩展性、数据库兼容性以及集群高可用层面有自己的优势,本文将简单介绍GreatDB的基本架构,并测试快速部署计算存储分离集群环境。


 一. GreatDB基本架构

 GreatDB整体架构

GreatDB整体架构如下图所示包括计算层和存储层、其中计算层部分实现分布式数据库架构下的整个集群元数据、数据节点和计算节点的管理和维护。

  • 架构特点

  1. 计算层和存储层可以独立弹性扩展。

  2. 计算层和存储层之间没有强耦合性,实现计算与存储的分离。

  3. 计算和存储层的特性重点不⼀样,可以针对性的进行开发迭代。


  • SQL节点(计算层)

SQL节点之间使⽤MGR的多主模式,组成了⼀个全同步集群,也作为数据库集群暴露给应⽤程序的节点。每个SQL节点 都可以接收⽤户的读写请求。SQL节点主要负责实现了⾃研的GreatDB引擎,其功能如下:

  1. 维护集群的元数据信息

  2. 维护表的分布信息

  3. 与数据节点通信,将数据存取任务下发到数据节点

SQL节点扩充了MySQL系统表,会将集群元数据写⼊到系统表中,⽤户操作任何⼀个节点改变了集群的元数据,都会通过全同步复制同步到集群其它节点,从⽽达到元数据强一致的效果。

  • 数据节点(存储层)

数据节点按照shard进⾏划分,⼀个shard内的数据节点构成⼀个MGR单主集群,负责存储集群的一个分⽚的数据,⼀个 shard内保证副本数据的强一致性。所有shard共同构成集群的完整数据。数据节点主要负责如下功能:

  1. 接收SQL节点的SQL命令并执⾏。

  2. 组建MGR集群,⾃动故障恢复。数据节点不⽌具有存储功能,数据节点⼀样具有计算能⼒,可以进⾏复杂计算,SQL节点可以将部分计算逻辑下推到计算节点进⾏计算。

  • 连接方式

应用客户端可以通过JDBC或者ODBC直接连接到计算节点,也可以经过负载均衡F5或loadbalance或LVS或HAProxy的方式连接到计算节点,达到流量均衡的目的。


二. GreatDB集群环境快速部署

环境准备

GreatDB集群计算存储分离环境部署至少需要三台计算节点、三台数据节点,服务器与端口配置设计如下:

服务器列表

拓扑图和端口

 GreatDB快速安装部署
  • 赖库安装

依赖库安装 GreatDB Cluster服务器程序依赖libaio库,用户可以通过如下命令进⾏安装。

## Yum-based systems
shell> yum search libaio # search for info
shell> yum install libaio-devel # install library

GreatDB Cluster客户端程序依赖libncurses库,用户可以通过如下命令进⾏安装:

## Yum-based systems
shell> yum search ncurses # search for info
shell> yum install ncurses-devel # install library
  • 安装包准备
  1. 将greatdb-cluster-5.0.6-2e6cda47fea-Linux-glibc2.17-x86_64.tar.gz软件安装包上传至所有服务器

  2. 在所有服务器解压软件安装包至目录/usr/local/greatdb-cluster

按照下⾯的指令进⾏软件包的安装:

shell> groupadd greatdb
shell> useradd -r -g greatdb -s /bin/false greatdb
shell> cd /usr/local
shell> tar -xzvf greatdb-cluster-5.0.6-2e6cda47fea-Linux-glibc2.17-x86_64.tar.gz
shell> ln -s greatdb-cluster-5.0.6-2e6cda47fea-Linux-glibc2.17-x86_64 greatdb-cluster
shell> cd greatdb-cluster
shell> chown greatdb:greatdb -R
  • 配置文件与数据

为了⽅便管理,统⼀将配置⽂件设置在 /etc/greatdb-cluster ⽬录下,数据⽬录设置 在 /var/lib/greatdb-cluster ⽬录下。

shell> mkdir /var/lib/greatdb-cluster
shell> mkdir /etc/greatdb-cluster

每个节点和⽂件及⽬录的对应关系如下:

配置⽂件模板 SQLNode和DataNode的配置⽂件模板与MySQL配置方式⼀致,为了简化⽣成配置⽂件的复杂度,针对单机快速部署提供如下bash脚本create_config.sh ,内容如下:

#!/bin/bash
set -ex
ip=$1
port=$2
echo "[mysqld]
datadir=/var/lib/greatdb-cluster/$port
socket=/var/lib/greatdb-cluster/$port/greatdb.sock
user=greatdb
port=$2
server_id=$RANDOM
max_connections=1000
report-host=$1
## group replication configuration
binlog-checksum=NONE
enforce-gtid-consistency
gtid-mode=ON
loose-group_replication_start_on_boot=OFF
loose_group_replication_recovery_get_public_key=ON
loose-group_replication_local_address= "$1:1$2""

此模板接收两个参数,node名称和端⼝号,这⾥使⽤ create_config.sh创建不同节点的配置⽂件。

# 在sqlnode1上⽣成计算实例的配置⽂件
bash create_config.sh 172.16.134.133 3306 > /etc/greatdb-cluster/3306.cnf
# 在sqlnode2上⽣成计算实例的配置⽂件
bash create_config.sh 172.16.134.134 3306 > /etc/greatdb-cluster/3306.cnf
# 在sqlnode3上⽣成计算实例的配置⽂件
bash create_config.sh 172.16.134.135 3306 > /etc/greatdb-cluster/3306.cnf
## 在datanode1上⽣成数据节点的配置⽂件
bash create_config.sh 172.16.134.136 3307 > /etc/greatdb-cluster/3307.cnf
bash create_config.sh 172.16.134.136 3308 > /etc/greatdb-cluster/3308.cnf
## 在datanode2上⽣成数据节点的配置⽂件
bash create_config.sh 172.16.134.137 3307 > /etc/greatdb-cluster/3307.cnf
bash create_config.sh 172.16.134.137 3308 > /etc/greatdb-cluster/3308.cnf
## 在datanode3上⽣成数据节点的配置⽂件
bash create_config.sh 172.16.134.138 3307 > /etc/greatdb-cluster/3307.cnf
bash create_config.sh 172.16.134.138 3308 > /etc/greatdb-cluster/3308.cnf
  • 初始启动节点

创建好各⾃的配置⽂件后,直接使⽤greatdb_init初始化各个节点,greatdb_init会⾃动初始化数据库节点 实例,并启动实例。

初始启动SQLNode

在sqlnode1,sqlnode2,sqlnode3上,分别进⼊ /usr/local/greatdb-cluster ⽬录,使⽤greatdb_init初始 并启动SQLNode。

## 在sqlnode1上初始化计算实例的数据⽬录
[root@sqlnode1]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3306.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=sqlnode
## 在sqlnode2上初始化计算实例的数据⽬录
[root@sqlnode2]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3306.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=sqlnode
## 在sqlnode3上初始化计算实例的数据⽬录
[root@sqlnode3]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3306.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=sqlnode
初始启动DataNode

在datanode1,datanode2,datanode3上,分别进⼊ /usr/local/greatdb-cluster ⽬录,使⽤greatdbd初始 化DataNode的数据⽬录。

## 在datanode1上初始化数据节点的数据⽬录
[root@datanode1]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3307.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
[root@datanode1]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3308.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
## 在datanode2上初始化数据节点的数据⽬录
[root@datanode2]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3307.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
[root@datanode2]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3308.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
## 在datanode3上初始化数据节点的数据⽬录
[root@datanode3]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3307.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
[root@datanode3]# bin/greatdb_init --defaults-file=/etc/greatdb-cluster/3308.cnf --cluster_user=greatdb --cluster-host=% --cluster-password=greatdb --node-type=datanode
  • 创建集群

使⽤ root 登陆任意⼀个SQLNode,进⾏初始化集群操作,随后进⾏添加SQLNode和DataNode的操 作,这⾥以sqlnode1作为初始化节点。

## 登陆sqlnode1
[root@localhost greatdb-cluster]# bin/greatsql -h127.0.0.1 -P3306 -uroot
## 初始化集群
GreatDB Cluster> call mysql.greatdb_init_cluster(greatdb_cluster, greatdb, greatdb);
Query OK, 1 row affected (4.24 sec)
## 添加SQLNodesqlnode2
GreatDB Cluster> call mysql.greatdb_add_sqlnode(172.16.134.134, 3306);
Query OK, 1 row affected (4.24 sec)
## 添加SQLNodesqlnode3
GreatDB Cluster> call mysql.greatdb_add_sqlnode(172.16.134.135, 3307);
Query OK, 1 row affected (4.24 sec)
## 添加shard1的数据节点并初始化
GreatDB Cluster> call mysql.greatdb_add_datanode(shard1, sd1_dn1, 172.16.134.136, 3307, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_add_datanode(shard1, sd1_dn2, 172.16.134.137, 3307, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_add_datanode(shard1, sd1_dn3, 172.16.134.138, 3307, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_init_shard(shard1);
Query OK, 1 row affected (4.24 sec)
## 添加shard2的数据节点并初始化
GreatDB Cluster> call mysql.greatdb_add_datanode(shard2, sd2_dn2, 172.16.134.136, 3308, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_add_datanode(shard2, sd2_dn3, 172.16.134.137, 3308, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_add_datanode(shard2, sd2_dn1, 172.16.134.138, 3308, NODE_MGR);
Query OK, 1 row affected (0.03 sec)
GreatDB Cluster> call mysql.greatdb_init_shard(shard2);
Query OK, 1 row affected (4.24 sec)

创建完成查看SQL节点状态:

查看数据节点状态:

至此,完成了GreatDB快速部署流程,⽤户可以通过连接SQLNode,把整个集群当成单机MySQL使⽤。其中在配置脚本执行过程如果出现异常可以对/etc/host进行修改,并且需要准备好yum源。
END


更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129852.html

相关文章

  • 2021年8月国产数据库大事记

    摘要:本文整理了年月国产数据库大事件和重要产品发布消息。柏睿数据库加速安全卡面向全球重磅发布。月日,在全球数字经济大会成果发布会上,中国移动北京分公司与国产数据库领域新锐企业柏睿数据签署战略合作协议。本次大赛主要面向全国爱好数据库的高校学生。 本文整理了2021年8月国产数据库大事件和重要产品发布消息。目录8月国产数据库大事记TOP108月国产数据库大事记时间线产品/版本发布兼容认证8月排行榜新增...

    Scorpion 评论0 收藏0
  • 2021年9月国产数据库大事记

    .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body...

    suemi 评论0 收藏0
  • 2021年10月国产数据库大事记

    摘要:月日消息,近日,中国信息通信研究院大数据产品能力评测数据库方向的测评结果陆续出炉。月日消息,国家工业信息安全发展研究中心发布电信行业数据库产品第一期测评结果,前三名分别是阿里云数据库柏睿数据企业级交易型数据库信创版云和恩墨企业级数据库。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-si...

    elva 评论0 收藏0
  • 2021年11月国产数据库排行榜:openGauss闯入前三,Kingbase流行度与日俱增,TDe

    摘要:年月国产数据库流行度排行榜前名达梦本月分数下跌,总分,位于榜单第二位。人大金仓保持增长态势,本月分数大幅上涨,总分,位于榜单第九位。达梦入选其中,位列总榜第国产数据库第。月日,人大金仓与天津科大正式签订联合人才培养协议。2021年11月国产数据库流行度排行榜前15名   达梦本月分数下跌10.88,总分467.45,位于榜单第二位。作为具有完全自主知识产权的国产数据库厂商,今年达梦的...

    waruqi 评论0 收藏0
  • 2021年10月国产数据库排行榜:达梦反超OceanBase夺榜眼,TDSQL实现“四连增”,数据

    摘要:年月国产数据库流行度排行榜前名连续三个月的分数下跌让名次下降一位,以分的总分来到榜单第三。国产数据库流行度排行榜与趋势变化本月分数下跌,总分,位于榜单第五。 2021年10月国产数据库流行度排行榜前15名 连续三个月的分数下跌让OceanBase名次下降一位,以424.83分的总分来到榜单第三。本月,OceanBase有几个重要事件,如亮相2021中国国际服务贸易交流会,参与HICOO...

    vpants 评论0 收藏0
  • 国产品牌领跑高端服务器市场 云计算重塑行业竞争格局

    摘要:长久以来,惠普戴尔都是服务器市场的老三样,但云计算时代的到来,使得服务器行业的竞争格局发生了翻天覆地的变化,国产品牌正从追赶者转变为引领者。国产品牌正在全球高端服务器领域发挥着越来越重要的作用。长久以来,惠普、戴尔、IBM都是服务器市场的老三样,但云计算时代的到来,使得服务器行业的竞争格局发生了翻天覆地的变化,国产品牌正从追赶者转变为引领者。国产品牌正在全球高端服务器领域发挥着越来越重要的作...

    fevin 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<