GreatDB Cluster 采⽤了⽆共享(share-nothing)且计算和存储分离的架构设计,计算层由SQL节点 GreatSQL 组成,存储层由数据节点 GreatDB 组成。

SqlNode 节点包含如下模块:
⽤户数据存储在 DataNode 节点,节点间通过 paxos 协议保证⽤户数据的多副本的强⼀致性。GreatDB Cluster 的 DataNode 不仅仅是存储数据,本⾝具有相对完整的计算能⼒,可以进⾏较强的运算,分担计算层的计算压⼒。
GreatDB Cluster可以很好的部署和运⾏在 Intel 架构服务器环境、ARM 架构的服务器环境及主流虚拟化 环境,并⽀持绝⼤多数的主流硬件⽹络。作为⼀款⾼性能数据库系统。⽀持主流的Linux操作系统。
|Linux操作系统|版本|服务器架构| |-|-|-| |Red Hat Enterprise Linux|7.2 及以上|x86_64,ARM_64| |CentOS|7.2 及以上|x86_64,ARM_64| |SUSE Enterprise Linux|12SP3 及以上|x86_64,ARM_64| |Ubuntu|16.04 及以上|x86_64,ARM_64| |Debian|8.3 及以上|x86_64,ARM_64|
|服务器类型|最⼩数量|最低配置| |-|-|-| |SQL节点|3(可和数据节点复⽤)|32C,64G,1TB,千兆⽹卡(可配置多块)| |数据节点|3|32C,64G,1TB SSD存储,千兆⽹卡(可配置多块)| SQL节点最⼩数量为3,最好配置成奇数个,如3,5,7。 数据节点个数建议为3的整数倍。每个shard内3副本。
|服务器类型|最⼩数量|最低配置| |-|-|-| |SQL节点|3|32C,128G,1.5TB,万兆⽹卡(可配置多块)| |数据节点|3|32C,256G,2TB SSD存储,万兆⽹卡(可配置多块)| SQL节点最⼩数量为3,最好配置成奇数个,如3,5,7。SQL节点存储集群元数据,同时承担⼤部分计算任务,有些优化策略会⽣成临时表,故如果⽤户对性能要求很⾼,可以配置SSD。 数据节点最⼩数量为3,⼀个shard内最⼩副本数为3,最⼤副本数为9,推荐⼀个逻辑shard内副本个数为3。
数据库服务器的CPU运⾏模式需要调整到 performance 模式,以追求⽐较稳定的性能。 以 centos7 为例,执⾏以下命令检查和设置 cpu 运⾏模式:
# 检查当前cpu模式,发现是 powersave 模式
[root@greatdb-test-01 ~]# cpupower frequency-info
...
available cpufreq governors: performance powersave
...
# 设置CPU为 performance 模式
[root@greatdb-test-01 ~]# cpupower frequency-set -g "performance"
# performance 模式检查
[root@greatdb-test-01 ~]# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
performance
注:如果该步报文件不存在,则需要安装 kernel-tools
# CentOS 安装 kernel-tools
yum install kernel-tools -y
# Ubuntu 安装 CPU 模式无图形化切换器
apt install cpufrequtils
建议使用xfs高性能文件系统 Linux ext系列的文件系统,应该是文件系统史上非常经典的杰作。在CentOS 7之前都是默认采用的这一系列文件系统。但是从CentOS 7开始默认的文件系统变成了xfs文件系统,在操作系统支持的情况下,选择顺序如下 xfs>ext4>ext3
修改 /sys/block/sda/queue/scheduler 调整io调度配置 如果是机械硬盘建议调整成 deadline 如果是 SSD&PCI-E 建议调整成 noop
最⼩部署拓扑结构⽤于个⼈快速尝试新功能,可以将所有的节点部署在⼀台服务器上,3个SQL节点,2个shard,每个shard内3个数据节点。具体的部署拓扑图如下:

开发及测试环境⽤于团队⻓期开发或者团队内部⻓期进⾏功能测试的场景,不适合⾼性能场景。 下⾯以总共3台服务器,SQL节点与数据节点共⽤的情况,给出部署拓扑图。

下⾯以总共6台服务器,3台计算服务器,3台存储服务器的场景,给出部署架构图。


systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl stop NetworkManager.service
systemctl disable NetworkManager.service
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date -s "20201021 09:43:00"
[root@enmo ~]# timedatectl
Local time: Wed 2020-10-21 09:43:04 CST