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://www.mzph.cn/news/585953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Creo各版本安装指南

下载链接 https://pan.baidu.com/s/1VyP0_185mJeBiorlpUJqrQ?pwd0531 1.鼠标右击【Creo10.0(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Creo10.0(64bit)】。 ​2.打开解压后的文件夹,鼠标右击【Crack】选择【解压到…

Winform RDLC报表(数据库连接、报表函数使用、动态表头)

文章目录 NuGet安装库数据库连接报表设计报表引用添加报表 数据集设计方法一手动添加方法二——连接数据库添加 关联报表与数据集表格数据与数据集数据设计表格格式、字体设计报表数据字段绑定 Winform 使用报表控件数据库填充数据集从数据库获取与数据源相同字段的数据 动态表…

数据库一般会采取什么样的优化方法?

数据库一般会采取什么样的优化方法? 1、选取适合的字段属性 为了获取更好的性能,可以将表中的字段宽度设得尽可能小。 尽量把字段设置成not null 执行查询的时候,数据库不用去比较null值。 对某些省份或者性别字段,将他们定义为e…

【并发】AtomicInteger很安全

AtomicInteger 简介与常规用法 AtomicInteger 是 Java 中 java.util.concurrent.atomic 包下的一个类。用于实现原子操作的整数。它是一个基于CAS(Compare-And-Swap)实现的原子整数类。它提供了一系列的原子操作,确保对整数的操作是原子性的&…

golang 图片加水印,字体文件从哪里找

鼠标左键双击此电脑图标在此电脑文本框输入电脑默认字体地址:C:\Windows\Fonts找到需要用到的字体文件,复制到指定文件夹

python企业车辆车货信息平台 s05fw

车货信息平台系统可具体分为货源方、平台方、承运方三部分。其中前端要求包含货源方:发布货源信息、选择承运方、司机服务评价;平台方:账户管理、货主、司机资质审核、聊天功能;承运方:车辆信息上传、个人车主发布车源…

HEX报文协议打包生成工具

本工具可以用于灵活定制各种格式的报文。以下是定制报文中每个字段的说明: isbig:指示报文中的字节顺序是否为大端序(Big Endian)。如果为true,则表示使用大端序;如果为false,则表示使用小端序…

WorkPlus局域网即时通讯软件的领航者,连接高效协作的利器

在快速发展的商业环境中,高效的内部沟通和协作对于企业的成功至关重要。而局域网即时通讯软件则成为实现内部高效沟通的必备工具。作为一款领航者级别的局域网即时通讯软件,WorkPlus通过卓越的性能和创新的技术,成为了众多企业的首选之一。 W…

ggplot2 | line plot 分组及均值线:聚类后的表达变化趋势图

1. 效果图 2. 预处理及绘图 # 输入数据 > head(dat)Species cid variable value 1 setosa 1 Sepal.Length 5.1 2 setosa 2 Sepal.Length 4.9 3 setosa 3 Sepal.Length 4.7 4 setosa 4 Sepal.Length 4.6 5 setosa 5 Sepal.Length 5.0 6 setos…

selenium模块有哪些用途?

Selenium模块是一个用于Web应用程序测试的模块,具有多种示例用法。以下是一些示例: 1.打开网页并执行一些基本操作,如点击按钮、输入文本等。 定位网页元素并执行操作,例如使用 find_element 方法查找单个元素,使用 f…

2023第三届中国高校大数据挑战赛B题代码

任务已完成,聚类效果很好(主要在于数据的处理以及特征工程), 需代码si,yuer有限先到先得。

深度学习 | 基本循环神经网络

1、序列建模 1.1、序列数据 序列数据 —— 时间 不同时间上收集到的数据,描述现象随时间变化的情况。 序列数据 —— 文本 由一串有序的文本组成的序列,需要进行分词。 序列数据 —— 图像 有序图像组成的序列,后一帧图像可能会受前一帧的影响…

TCP/IP的五层网络模型

目录 封装(打包快递) 6.1应用层 6.2传输层 6.3网络层 6.4数据链路层 6.5物理层 分用(拆快递) 6.5物理层 6.4数据链路层 6.3网络层 6.2传输层 6.1应用层 封装(打包快递) 6.1应用层 此时做的数据…

Xshell——Windows将本地文件上传到Linux服务器

1、scp命令 scp是基于ssh的网络文件传输命令,可以将本地文件或文件夹直接上传到服务器指定位置。命令格式: 上传文件 scp -P port filepath usernameip:TargetPath 上传文件夹 scp -r -P port filepath usernameip:TargetPath -P port:用于指…

java中如何使用elasticsearch—RestClient操作文档(CRUD)

目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据,导入到hotel索引库&#xff0…

普通人如何月入过万?2024普通人创业适合干什么?

如果你的月收入不到1万块,也从来没有体验过一天就赚1万块是什么感觉的话,你还想创业?你如果想通过创业逆天改命,麻烦你一定要看完这篇文章。 普通人你要是想赚钱,一定要去赚那种能看得见的钱。 什么叫看得见的钱&…

Linux上管理不同版本的 JDK

当在 Linux 上管理不同版本的 JDK 时,使用 yum 和 dnf 可以方便地安装和切换不同的 JDK 版本。本文将介绍如何通过这两个包管理工具安装 JDK 1.8 和 JDK 11,并利用软连接动态关联这些版本。 安装 JDK 1.8 和 JDK 11 使用 yum 安装 JDK 1.8 打开终端并…

在Linux上搭建Maven仓库的实战教程

引言 在Java开发中,Maven作为项目构建和依赖管理的重要工具,其仓库的搭建至关重要。本文将手把手教你如何在Linux系统上安装并配置Nexus Repository Manager 3(简称Nexus 3),从而创建一个私有的Maven仓库。 步骤一&a…

Solidworks学习笔记

本内容为solidworks的学习笔记,根据自己的理解进行记录,部分可能不正确,请自行判断。 学习视频参考:【SolidWorks2018视频教程 SW2018中文版软件基础教学知识 SolidWorks自学教程软件操作教程 sw视频教程 零基础教程 视频教程】 h…

69内网安全-域横向CobaltStrikeSPNRDP

这节课主要讲spn和rdp协议, 案例一域横向移动RDP传递-Mimikatz rdp是什么,rdp是一个远程的链接协议,在linux上面就是ssh协议, 我们在前期信息收集的时候,得到一些hash值和明文密码可以进行一些相关协议的链接的&am…