GBase 8c
安装配置
文章

FAQ : 4G内存虚拟机搭建8c分布式环境

GBase社区管理员
发表于2023-04-27 13:13:2097次浏览0个评论


一、概述

部署一个GBase 8c 单机分布式环境需要:

  1. 1个 GHA_SERVER 节点
  2. 1个 DCS 节点
  3. 1个 GTM 节点
  4. 1个 CN 节点
  5. 1个 DN 节点(2个 DN 才能体验到数据分布式特性)

推荐的最小物理内存大小为 12 GB,如果部署 2 个 DN 节点,则所需的内存要更多,但用户如果是以学习为目的,往往需要在个人PC上部署虚拟机的方式搭建 8c 分布式数据库环境,可能会面临内存无法满足 12 GB 的要求。

让我们来看看如何在 4GB 的环境中部署一个8c分布式环境:

二、部署前环境准备

2.1 准备虚拟机环境

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

  1. 建议虚拟机不使用GHOME图形桌面环境
  2. 建议虚拟机只用来安装数据库,不启动其他软件做其他用途
  3. 磁盘空间不能太小,需要用一部分空间用来做 swap 分区,例如使用 100 GB

2.2 安装前准备

以下步骤为安装部署数据库的常规准备:

(参考我们的部署手册即可)。


2.3 增加 swap 空间

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

1.虚拟内存空间大小

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

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

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

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

3. 扩展前内存情况(原来已经有8G大小的swap空间)

[gbase@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

4. 创建一个25GB大小左右的文件

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

5. 执行 mkswap 命令进行格式化

[root@gbase8c ~] mkswap /var/swapfile

6. 修改 /var/swapfile 权限为 600

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

7. 执行 swapon 命令扩展 swap 分区

[root@gbase8c ~] swapon /var/swapfile

8. 再观察此时内存情况

[gbase@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

9. 将挂载信息写入到 /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

2.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

三、部署分布式数据库

3.1 上传安装包并解压

1.创建目录用于存放安装包

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

2. 上传安装包到 /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

3. 解压缩:

[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

3.2 编辑 yml 配置文件

1.在 /home/gbase 目录下编辑 gbase.yml 配置文件,我们在一台服务器上部署 1个GTM、1个CN、2个DN节点以及其他高可用相关节点:

gha_server:
  - gha_server1:
      host: 192.168.42.158
      port: 20001
dcs:
  - host: 192.168.42.158
    port: 2379
gtm:
  - gtm1:
      host: 192.168.42.158
      agent_host: 192.168.42.158
      role: primary
      port: 6666
      agent_port: 8001
      work_dir: /home/gbase/data/gtm/gtm1
coordinator:
  - cn1:
      host: 192.168.42.158
      agent_host: 192.168.42.158
      role: primary
      port: 5432
      agent_port: 8003
      work_dir: /home/gbase/data/coord/cn1
datanode:
  - dn1:
      - dn1_1:
          host: 192.168.42.158
          agent_host: 192.168.42.158
          role: primary
          port: 15432
          agent_port: 8005
          work_dir: /home/gbase/data/dn1/dn1_1
  - dn2:
      - dn2_1:
          host: 192.168.42.158
          agent_host: 192.168.42.158
          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

2. 部署分布式数据库

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

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

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 [|||||||||||  

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

[gbase@gbase8c ~]$ cat /proc/meminfo | grep -i commit
CommitLimit:    35189292 kB
Committed_AS:   22111340 kB

5. 部署成功后,使用 gha_ctl monitor 查看节点运行情况:

[gbase@gbase8c ~]$ gha_ctl monitor -c gbase -l http://192.168.42.158:2379 -H
+----+-------------+----------------+-------+---------+--------+
| No |     name    |      host      |  port |  state  | leader |
+----+-------------+----------------+-------+---------+--------+
| 0  | gha_server1 | 192.168.42.158 | 20001 | running |  True  |
+----+-------------+----------------+-------+---------+--------+
+----+------+----------------+------+---------------------------+---------+---------+
| No | name |      host      | port |          work_dir         |  state  |   role  |
+----+------+----------------+------+---------------------------+---------+---------+
| 0  | gtm1 | 192.168.42.158 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |
+----+------+----------------+------+---------------------------+---------+---------+
+----+------+----------------+------+----------------------------+---------+---------+
| No | name |      host      | port |          work_dir          |  state  |   role  |
+----+------+----------------+------+----------------------------+---------+---------+
| 0  | cn1  | 192.168.42.158 | 5432 | /home/gbase/data/coord/cn1 | running | primary |
+----+------+----------------+------+----------------------------+---------+---------+
+----+-------+-------+----------------+-------+----------------------------+---------+---------+
| No | group |  name |      host      |  port |          work_dir          |  state  |   role  |
+----+-------+-------+----------------+-------+----------------------------+---------+---------+
| 0  |  dn1  | dn1_1 | 192.168.42.158 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |
| 1  |  dn2  | dn2_1 | 192.168.42.158 | 15442 | /home/gbase/data/dn1/dn2_1 | running | primary |
+----+-------+-------+----------------+-------+----------------------------+---------+---------+
+----+----------------------------+--------+---------+----------+
| No |            url             |  name  |  state  | isLeader |
+----+----------------------------+--------+---------+----------+
| 0  | http://192.168.42.158:2379 | node_0 | healthy |   True   |
+----+----------------------------+--------+---------+----------+

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

评论已关闭