GBASE南大通用-小内存单机安装GBase 8c分布式数据库实践

这种小内存部署方式仅用于分布式数据库个人学习使用,不建议用于其他用途。

随着数据高并发复杂场景业务需求不断增多,信息数据呈现出爆炸式增长、多源多维、数据类型繁复等特征。在这一趋势下,目前分布式数据库因其架构的天然优势,成为这类特征业务场景的最佳解决方案。

2022年7月,南大通用GBase 8c于openGauss Developer Day 2022峰会正式亮相发布。GBase 8c是业内首个基于openGauss3.0发布的多模多态的分布式数据库,支持行存、列存、内存等多种存储模式和单机、主备与分布式等多种部署形态。GBase 8c数据库分布式形态采用share nothing的分布式架构,计算节点和存储节点分离。节点间通过高速网络进行通信,所有节点都有主从互备,确保系统的极致高可用。

部署一套GBase 8c单机分布式环境至少需要以下节点:

1个 GHA_SERVER 节点

1个 DCS 节点

1个 GTM 节点

1个 CN 节点

1个 DN 节点(2个 DN 节点才能体验到数据分布式特性)

为了保证系统的正常部署和流畅运行,推荐的最小物理内存大小为12GB,如果部署2个DN节点,则所需的内存要更多。一旦用户可投入资源有限,比如仅以学习为目的需要在个人PC上部署虚拟机的方式搭建8c分布式数据库环境,可能会面临内存无法满足12GB的要求。

让我们来看看如何在4GB的环境中部署一套2DN的8c分布式数据库。

一、部署前环境准备

1、准备虚拟机环境

需要用户自行在个人PC的虚拟机管理软件上安装一个Linux操作系统(以CentOS 7.6为例),建议:

虚拟机不使用GHOME图形桌面环境。

虚拟机只用来安装数据库,不安装/启动其他软件做其他用途。

磁盘空间不能太小,需要用一部分空间用来做swap分区,例如使用100 GB。

2、安装前准备

以下准备操作为安装部署数据库的常规准备工作:

(1)修改主机名

安装好一个虚拟机环境后,我们最好调整一下默认的主机名。推荐直接设置为 gbase8c(或自行修改)。

[root@locahost~]$ hostnamectl set-hostname gbase8c

同步修改 hosts 文件,执行命令:

[root@gbase8c ~]$ vi /etc/hosts

按键“i”编辑文件,在文件末尾增加“IP  hostname”,这里的IP和hostname根据实际情况做相应修改。按键“:wq!”保存并退出。

例如,在hosts文件中添加一行(红框标注内容):

图片

注意,在修改主机名后需要执行reboot重启生效。

(2)创建数据库操作系统用户和配置sudoer

创建用户组和用户

在所有节点服务器上创建gbase用户组和用户。命令如下:

[root@gbase8c ~]$ groupadd gbase

[root@gbase8c ~]$ useradd -m -d /home/gbase gbase -g gbase

[root@gbase8c ~]$ passwd gbase

返回并设置密码,请牢记密码。

添加普通用户至sudoer列表

执行visudo命令,打开配置文件。

[root@gbase8c ~]$ visudo

按键“i”进入编辑模式,在打开文件如下位置,增加gbase用户及权限:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

gbase ALL=(ALL) NOPASSWD:ALL

最后按键“:wq!”保存并退出。

(3)关闭防火墙

执行如下命令,关闭并禁止开机自启动:

[root@gbase8c ~]$ sudo systemctl stop firewalld.service

[root@gbase8c ~]$ sudo systemctl disable firewalld.service

建议在关闭防火墙后,再次检查确认防火墙状态:

[root@gbase8c ~]$ sudo systemctl status firewalld.service

返回状态显示inactive,表示已经关闭。

图片

(4)关闭SELINUX

root用户下使用vi(或gbase用户下使用sudo vi)编辑/etc/selinux/config文件

[root@gbase8c ~]$ vim /etc/selinux/config

按键“i”进入编辑模式,在打开文件如下位置,设置 SELINUX值为disabled:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of three values:

# targeted - Targeted processes are protected,

# minimum - Modification of targeted policy. Only selected processes are protected.

# mls - Multi Level Security protection.

SELINUXTYPE=targeted

按键“:wq!”保存并退出。注意,执行这步操作后,需要重启服务器(reboot)生效。

(5)配置系统内核信号量参数

配置系统内核参数,避免信号量不足无法初始化。编辑系统内核的配置文件,修改参数:

[root@gbase8c ~]$ echo "kernel.sem = 40960 2048000 40960 20480" >> /etc/sysctl.conf

并执行sysctl -p使配置生效

[root@gbase8c ~]$ sysctl -p

(6)配置ssh免密互信

当前分布式版本中,虽然我们部署在一台服务器上,但因为部署安装包的过程中默认会使用 ssh 协议进行安装,因此我们仍需要配置单台服务器的ssh免密互信。

gbase 用户下生成密钥文件,ssh-keygen 过程默认回车即可:

[root@gbase8c ~]$ su gbase

[gbase@gbase8c ~]$ mkdir ~/.ssh

[gbase@gbase8c ~]$ chmod 700 ~/.ssh

[gbase@gbase8c ~]$ ssh-keygen -t rsa

将公钥文件上传至本机(此操作需输入gbase用户密码),本机IP请根据实际情况修改。

[gbase@gbase8c ~]$ ssh-copy-id gbase@IP

例如,在IP为192.168.141.160的虚拟机上操作,返回“Number of key(s) added: 1”即为密钥上传成功。

图片

3、增加 swap 空间

当进程申请的内存大小超过服务器物理内存容量大小的时候,由两个关键因素影响申请内存的成功与否:

虚拟内存空间大小

进程申请的大小在虚拟内存范围内(64位下为128T),则总能申请成功,只有进程访问这些虚拟内存时才会使用物理内存建立映射。

物理内存空间大小 + swap 空间大小

总的可使用的物理空间大小,可以简单计算为物理内存空间大小 + swap 空间大小,swap 空间其实就是把一块磁盘空间当成内存来用。通常使用LRU、LFU等算法对该空间的数据进行换入换出,当物理空间严重不足时,会导致内存数据块频繁的置换到磁盘,从而产生大量IO,导致系统卡顿。也因此我们只推荐此种小内存部署方式只用来进行个人学习环境的搭建。

此处我们需要扩展swap分区,来弥补物理内存不足的问题。在学习环境,我们可以使用创建一个文件并格式化成swap文件系统格式的方式对swap空间进行扩展:

(1)    扩展前内存情况。假设原来已经有8G大小的swap空间,返回信息如下:

[gbase@gbase8c ~]$ su root

[root@gbase8c ~]$ free -h

              total        used        free      shared  buff/cache   available

Mem:           3.7G        281M        3.2G        3.1M        243M        3.3G

Swap:          7.9G         48M        7.8G

(2)    创建一个25GB大小左右的文件

[root@gbase8c ~] touch /var/swapfile

[root@gbase8c ~] dd if=/dev/zero bs=512M count=50 of=/var/swapfile

(3)    执行 mkswap 命令进行格式化

[root@gbase8c ~] mkswap /var/swapfile

(4)    修改 /var/swapfile 权限为 600

[root@gbase8c ~] chmod 600 /var/swapfile

(5)    执行 swapon 命令扩展 swap 分区

[root@gbase8c ~] swapon /var/swapfile

(6)    再次观察此时内存情况:

[root@gbase8c ~]$ free -h

              total        used        free      shared  buff/cache   available

Mem:           3.7G        281M        3.2G        3.1M        243M        3.3G

Swap:           31G        301M         31G

(7)    将挂载信息写入到 /etc/fstab 文件末尾,防止挂载信息重启丢失:

[root@gbase8c ~]$ vi /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Apr 21 01:11:10 2020

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

UUID=0de95310-c8f6-4642-9465-cf8f004c0ec4 /                       xfs     defaults        0 0

UUID=25065ca2-7ec6-48b3-b6e1-8f48bea28972 /boot                   xfs     defaults        0 0

UUID=9650d3b7-9879-405c-8d89-cfce54b2b0bf swap                    swap    defaults        0 0

/var/swapfile swap                    swap    defaults        0 0

4、调整 overcommit 参数

Overcommit指的是进程能够申请到的内存,可能比实际可用内存大。这是Linux为了提高内存的利用率,以便能够运行更多的程序。在这种情况下,有的进程分配内存可能会失败,而有的进程则可能被操作系统kill掉。此处机制是由 vm.overcommit_memory参数进行控制,该参数有3个可选值:

vm.overcommit_memory = 0:允许 overcommit,申请内存的时候根据⼀定的算法估算可用的内存量, 拒绝明显无效的请求(比如⼀次malloc的内存超过了系统总内存)

vm.overcommit_memory = 1:允许 overcommit,申请内存的时候不进行限制

vm.overcommit_memory = 2:不允许 overcommit

一般默认的vm.overcommit_memory参数为0。在个人学习环境,我们可以将此值调节成1,来设定总是允许申请的内存超过物理内存大小。调整方式:

[root@gbase8c ~]$ echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

[root@gbase8c ~]$ sysctl -p

二、部署分布式数据库

1、上传安装包并解压

创建目录用于存放安装包

[root@gbase8c ~]$ su - gbase

[gbaset@gbase8c ~]$ mkdir /home/gbase/gbase_package

上传安装包到/home/gbase/gbase_package 目录下,并进行解压。

注意上传后安装包的权限是否为gbase用户,如果不是,需要使sudo chown 命令修改权限:

[gbaset@gbase8c ~]$ cd /home/gbase/gbase_package

[gbase@gbase8c gbase_package]$ sudo chown gbase:gbase GBase8cV5_S3.0.0B60_centos7.8_x86_64.tar.gz

解压缩:

[gbase@gbase8c gbase_package]$ tar xvf GBase8cV5_S3.0.0B60_centos7.8_x86_64.tar.gz

[gbase@gbase8c gbase_package]$ tar xvf GBase8cV5_S3.0.0B60_CentOS_x86_64_om.tar.gz

2、编辑 yml 配置文件

将安装目录下的gbase.yml模板配置文件复制一份到其他gbase用户所拥有的目录,进行编辑。

[gbase@gbase8c gbase_package]$ cp /home/gbase/gbase_package/gbase.yml /home/gbase

[gbase@gbase8c gbase_package]$ vim /home/gbase/gbase.yml

例如,我们在一台服务器上部署1个GTM、1个CN、2个DN节点以及其他高可用相关节点,根据安装环境修改配置文件中的host参数等信息。配置文件内容如下:

gha_server:

  - gha_server1:

      host: 192.168.141.160

      port: 20001

dcs:

  - host: 192.168.141.160

    port: 2379

gtm:

  - gtm1:

      host: 192.168.141.160

      agent_host: 192.168.141.160

      role: primary

      port: 6666

      agent_port: 8001

      work_dir: /home/gbase/data/gtm/gtm1

coordinator:

  - cn1:

      host: 192.168.141.160

      agent_host: 192.168.141.160

      role: primary

      port: 5432

      agent_port: 8003

      work_dir: /home/gbase/data/coord/cn1

datanode:

  - dn1:

      - dn1_1:

          host: 192.168.141.160

          agent_host: 192.168.141.160

          role: primary

          port: 15432

          agent_port: 8005

          work_dir: /home/gbase/data/dn1/dn1_1

  - dn2:

      - dn2_1:

          host: 192.168.141.160

          agent_host: 192.168.141.160

          role: primary

          port: 15442

          agent_port: 8006

          work_dir: /home/gbase/data/dn1/dn2_1

env:

  cluster_type: multiple-nodes

  pkg_path: /home/gbase/gbase_package

  prefix: /home/gbase/gbase_db

  version: V5_S3.0.0B60

  user: gbase

  port: 22

按键“:wq!”保存并退出。

3、部署分布式数据库

通过安装目录script工具库下的gha_ctl工具进行安装部署,执行命令:

[gbase@gbase8c ~]$ /home/gbase/gbase_package/script/gha_ctl install -c gbase -p /home/gbase/

在部署过程中,我们可以打开另一个终端,查看内存使用情况,输入 top 后,按M键可查看内存使用情况:

[root@gbase8c ~]$ top

top - 18:46:15 up  2:40,  5 users,  load average: 9.20, 4.82, 2.17

Tasks: 212 total,   1 running, 211 sleeping,   0 stopped,   0 zombie

%Cpu(s):  9.9 us,  2.4 sy,  0.0 ni, 87.4 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem : 95.6/3861484  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||    ]

KiB Swap: 11.1/33258552 [||||||||||| 

也可以随时观察内存commit 情况:

[gbase@gbase8c ~]$ cat /proc/meminfo | grep -i commit

CommitLimit:    35189292 kB

Committed_AS:   22111340 kB

(1)    部署成功后,使用gha_ctl monitor查看节点运行情况:

[gbase@gbase8c ~]$ gha_ctl monitor -c gbase -l http://192.168.141.160:2379 -H

+----+-------------+----------------+-------+---------+--------+

| No |     name    |      host      |  port |  state  | leader |

+----+-------------+----------------+-------+---------+--------+

| 0  | gha_server1 | 192.168.141.160 | 20001 | running |  True  |

+----+-------------+----------------+-------+---------+--------+

+----+------+----------------+------+---------------------------+---------+---------+

| No | name |      host      | port |          work_dir         |  state  |   role  |

+----+------+----------------+------+---------------------------+---------+---------+

| 0  | gtm1 | 192.168.141.160 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |

+----+------+----------------+------+---------------------------+---------+---------+

+----+------+----------------+------+----------------------------+---------+---------+

| No | name |      host      | port |          work_dir          |  state  |   role  |

+----+------+----------------+------+----------------------------+---------+---------+

| 0  | cn1  | 192.168.141.160 | 5432 | /home/gbase/data/coord/cn1 | running | primary |

+----+------+----------------+------+----------------------------+---------+---------+

+----+-------+-------+----------------+-------+----------------------------+---------+---------+

| No | group |  name |      host      |  port |          work_dir          |  state  |   role  |

+----+-------+-------+----------------+-------+----------------------------+---------+---------+

| 0  |  dn1  | dn1_1 | 192.168.141.160 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |

| 1  |  dn2  | dn2_1 | 192.168.141.160 | 15442 | /home/gbase/data/dn1/dn2_1 | running | primary |

+----+-------+-------+----------------+-------+----------------------------+---------+---------+

+----+----------------------------+--------+---------+----------+

| No |            url             |  name  |  state  | isLeader |

+----+----------------------------+--------+---------+----------+

| 0  | http://192.168.141.160:2379 | node_0 | healthy |   True   |

+----+----------------------------+--------+---------+----------+

至此,单机小内存环境搭建一个GBase 8c 分布式数据库的过程完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2662151.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】数据库之小题练习(完全备份和增量备份的数据恢复,以及断点恢复)

目录 先创建库,创建表,完成三次数据的录入以及第一次的完全备份,第二次和第三次的增量备份; 第一次完全备份操作 第二次插入后做增量备份操作 第三次 插入后做增量备份操作 1、完全备份恢复,获取一班的人的成绩 …

SAP问题 OPEN SQL 取不到值

关键:数据库中有数据,但是open sql取不到数据 背景: 标准程序在测试环境正常执行,在生产环境报错。 解决过程: 第一步:分析执行结果不一致可能的原因: 1.测试数据问题,可能性小&…

甄知猪齿鱼2.6版本来了,自动化助手帮你轻松提升生产力!

年末之际,我们带来了猪齿鱼V2.6.0的新版本大礼包!在这次更新中,我们进行了自动化功能的升级和优化,助您轻松提升生产力,更好地应对各种项目管理挑战。 自动化助手 自动化助手是由触发器、条件、动作3个元素组成&#x…

打开3d模型时显示不匹配怎么办---模大狮模型网

当3d模型打开时,显示不匹配的情况可能有以下几个原因和解决方法: 文件格式不匹配:检查您所使用的3D软件是否支持打开该模型文件格式。不同的软件支持不同的文件格式,如果文件格式不匹配,可能无法正确加载和显示模型。尝…

反射讲解(有图有真相)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、反射是什么?二、反射有啥好处?1. 没反射2. 有反射 三、反射的常用方法1. 获取 Class 对象:2. 获取类的构造方法&#xf…

5214手持式千兆网络质量测试仪

5214手持式千兆网络质量测试仪 简述: 5214 手持式千兆网络质量测试仪是中电科思仪科技股份有限公司研发的综合性网络测 试仪器。此仪器具有网络故障的排查,网络设备的现场维护,网络性能的测试和分析,协议 仿真、解码、统计等功能…

目标检测 YOLOv5 - 推理时的数据增强

目标检测 YOLOv5 - 推理时的数据增强 flyfish 版本 YOLOv5 6.2 参考地址 https://github.com/ultralytics/yolov5/issues/303在训练时可以使用数据增强,在推理阶段也可以使用数据增强 在测试使用数据增强有个名字叫做Test-Time Augmentation (TTA) 实际使用中使…

Arduino驱动VL6180X光学测距传感器(OLED显示)

Arduino驱动VL6180X光学测距传感器(OLED显示) 简介原理模块参数接线图代码结果 简介 VL6108X三合一光电模块,芯片内集成了IR VSEL(vertical-cavity surface-emitting laser)红外垂直腔面发射激光器光源、接近传感器、环境光传感器&#xff0…

Java创建线程执行任务的方法(一)

目录 1.继承Thread类 2.实现Runnab类 2.1实现Runnable类 2.2使用Lambda表达式 3.实现Callable类 3.1返回Integer类型数据 3.2返回String类型数据 3.3返回Object类型数据 4.匿名内部类 创建线程的方法:继承Thread类;实现Runnab类;匿名…

Apipost一键压测参数化功能详解

最近更新中Apipost对UI页面进行了一些调整,另外一键压测功能支持参数化!本篇文章将详细介绍这些改动! API调试页面的细节改动 在请求区填入请求参数或脚本时会有相应的标识 如在Query中填入多个参数时上方会展示数量 在预、后执行脚本中写…

基于Java车间工时管理系统(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

海外社媒营销避坑指南:盘点最容易被人忽视的7大坑!

在全球数字化浪潮的推动下,海外社媒营销成为企业推广品牌、产品和服务的重要途径。然而,与其诱人的前景相对应的是众多的坑,需要企业精心规划和巧妙应对。本文Nox聚星将和大家盘一盘企业在海外社媒营销之路上最容易忽视的7个大坑,…

一面“短刀”出鞘,一面撤回IPO,蜂巢能源决定求稳

刚刚在12月12日的第四届电池日上全球首发蜂速超快充磷酸铁锂短刀电池,10天之后便主动撤回已经过上交所两次问询的IPO申请,终止了自己奔赴科创板的上市之旅。动力电池新贵蜂巢能源这套动作,让市场颇为遗憾——虽然当前国内资本市场环境确实不同…

AI赋能金融创新:技术驱动的未来金融革命

人工智能(AI)作为一种技术手段,正逐渐改变金融行业的方方面面。从风险管理到客户体验,从交易执行到反欺诈,AI带来了许多创新和机遇。本文将探讨AI在金融领域的应用和其赋能的金融创新。 金融领域一直以来都面临着复杂的…

计算机网络【DHCP动态主机配置协议】

DHCP 出现 电脑或手机需要 IP 地址才能上网。大刘有两台电脑和两台手机,小美有一台笔记本电脑、一台平板电脑和两台手机,老王、阿丽、敏敏也有几台终端设备。如果为每台设备手动配置 IP 地址,那会非常繁琐,一点儿也不方便。特别是…

潜力股的印度市场,为啥被风险投资人看空了?

KlipC报道:自2021年第四季度,印度超过英国,稳居世界第五大经济体之后,“印度市场”的潜力被不断提及。 KlipC的分析师Allen表示:“但对于风险投资行业来说,从2023年的数据看,似乎像是遭遇了一场…

鸿鹄电子招投标系统:源码级别解析电子招投标的精髓

招投标管理系统是一个集门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理于一体的综合性应用平台。它适用于招标代理、政府采购、企业采购和工程交易等业务的企业,旨在提高项目管理的效率和质量。该系…

SpireCV项目实战——电诈园区人员及房屋情况识别

项目介绍前言 随着科技的进步和大数据时代的到来,计算机视觉技术逐渐渗透到各个行业领域,为人们的生活和工作带来了诸多便利。近年来,电信诈骗案件频发,给社会带来了巨大的经济损失和心理负担。电诈园区作为电信诈骗的高发区域&a…

【PyQt5】QComboBox文字居中

你永远也无法预料到,Qt到底埋了多少坑(我的是PyQt5), 一个破文本居中都要搞那么麻烦 一堆样式这里不生效那里不生效的真的是离谱 代码运行结果: import sys from PyQt5.QtWidgets import QApplication,QComboBox from PyQt5.QtWidgets impor…

Threejs 标签添加(单标签/多标签)

前言:网上写这个太少了,还写的乱,我就简单的整理下大家看下就会,有问题可以关注公众号: 技术链 1、创建工程vue 这个可以直接用命令创建 2、引入安装Threejs 依赖 3、编写标签引入依赖,可以使用 CSS2DRenderer,CSS3D…