MogDB/openGauss 3.0 扩容及缩容

本文出处:https://www.modb.pro/db/452139

一、概述

背景信息

gs_expansion 工具对数据库的备机进行扩容,支持从单机或者一主多备最多扩容到一主八备,本文从一主一备扩容到一主两备。

gs_dropnode 工具从一主多备的数据库中移除不需要的备机,最多可以删除到只剩下单机,本文从一主两备缩容到一主一备。

扩容注意事项

扩容后不会自动更新 synchronous_standby_names 参数。如果需要为该参数增加扩容的机器,请在扩容完成后手动更新。

扩容级联备之前要确保原集群中有处于同一 AZ(Available Zone)且状态正常的备机,或扩容级联备的同时也扩容了处于同 AZ 的备机。

对数据库集群进行扩容前,需要关注主机及新扩容节点 CPU、IO、网络等情况,不建议在硬件压力较大时执行扩容,否则可能导致扩容耗时较长甚至扩容失败。

当原集群数据量较大时,在进行扩容操作前应当在主机上先执行 checkpoint,否则可能导致扩容耗时较长甚至扩容失败。

在单节点扩容时,如果节点 hot_standby 被关闭过,则需要在每个备节点上也按照如下流程修改

备节点需要先修改 wal_level 大于等于 hot_standby 后重启

然后再修改 hot_standby 为 on 重启,之后主机扩容才能成功。否则扩容时备机会启动失败

扩容前提条件

数据库主机上存在 MogDB 镜像包,解压镜像包后,在 script 目录下执行./gs_expansion 命令进行扩容。

在新增的扩容备机上创建好与主机上相同的用户和用户组。

已存在的数据库节点和新增的扩容节点之间需要建立好 root 用户互信以及数据库管理用户(如 omm)的互信。

正确配置 xml 文件,在已安装数据库配置文件的基础上,添加需要扩容的备机信息。

只能使用 root 用户执行 gs_expansion 命令。

不允许同时在主节点上执行 gs_dropnode 命令删除其他备机。

执行扩容命令前需要通过 source 命令导入主机数据库的环境变量。如果当前数据库是分离环境变量方式安装,则 source 导入分离的环境变量。如果未进行分离,则需要 source 导入子用户的.bashrc 配置文件。一般该文件路径为:/home/[user]/.bashrc。

扩容备机的操作系统与主机保持一致。

操作过程中不允许同时在其他备节点上执行主备倒换或者故障倒换的操作。

不允许同时执行 2 次相同的 gs_expansion 命令。

扩容备节点的操作只能在主节点上执行。

缩容注意事项

从主备数据库实例中移除当前仍可连通的备机时,会自动停止目标备机上正在运行的数据库服务,并删除备机上的 GRPC 证书(证书位置:$GAUSSHOME/share/sslcert/grpc/),但是不会删除备机上的应用。 如果删除后数据库实例中只剩下一个主机时,会提示建议重启当前主机,此时建议用户根据当前业务运行环境重启主机。

如果目标备机在执行操作前处于不可连通的状态,需要用户在目标备机恢复后手动停止或删除目标备机的数据库服务,并删除备机上的 GRPC 证书(证书位置:$GAUSSHOME/share/sslcert/grpc/)。

仅支持使用 om 方式安装的主备数据库实例中移除备机,不支持使用编译方式安装组建的主备数据库。

当移除的备机处于同步复制模式时,如果执行删除命令的同时主机上存在事务操作,事务提交时会出现短暂卡顿,删除完成后事务处理可继续。

当目标备机被移除后,如果暂时不确定是否需要目标备机,可以选择如下方法拒绝从目标备机的远程 ssh 连接,避免在目标备机上的误操作。

方式一:在当前主机上使用 root 用户修改/etc/ssh/sshd_config 文件,添加如下记录(如果已存在 DenyUsers 记录,请在后面追加)DenyUsers omm@xx.xx.xx.xx,修改后需要重启 ssh 服务使其生效,修改后限制从目标备机不能使用 omm 用户远程到该主机。

方式二:在当前主机上将目标备机加入到/etc/hosts.deny 文件中(例如:sshd:10.11.12.13:deny),拒绝从目标备机的远程 ssh 连接(对所有用户生效),此方法需要系统 sshd 服务绑定到 libwrap 库。

当目标备机被移除后,如果不再需要目标备机,请在目标备机上使用 gs_uninstall -delete-data -L 命令单点卸载,请注意务必添加-L 选项。

当目标备机被移除后,如果需要以单机方式使用目标备机且保留原数据,请在目标备机上先执行 gs_guc set -D /gaussdb/data/dbnode -c “replconninfoX”,其中/gaussdb/data/dbnode 表示数据目录,replconninfoX 表示主备集群中的除本节点外的其他节点,比如一主一备则需要配置 replconninfo1, 一主两备需要配置 replconninfo1 和 replconninfo2, 以此类推;如果无需保留原数据,请先执行 gs_uninstall -delete-data -L 命令卸载后重新安装。

当目标备机被移除后,如果需要以备机方式使用目标备机,请参考 gs_expansion 命令重新将目标备机添加到集群中。

缩容前提条件

删除备节点的操作只能在主节点上执行。

操作过程中不允许同时在其他备节点上执行主备倒换或者故障倒换的操作。

不允许同时在主节点上执行 gs_expansion 命令进行扩容。

不允许同时执行 2 次相同的 gs_dropnode 命令。

执行删除操作前,需要确保主节点和备节点之间建立好 omm 用户(数据库管理用户)的互信。

需要使用数据库管理用户(比如 omm)执行该命令。

执行命令前需要通过 source 命令导入主机数据库的环境变量。如果当前数据库是分离环境变量方式安装,则 source 导入分离的环境变量。如果未进行分离,则需要 source 导入子用户的.bashrc 配置文件。一般该文件路径为:/home/[user]/.bashrc.

在新节点进行相关配置

二、关闭防火墙 selinux

[root@test3 ~]# setenforce 0

[root@test3 ~]# sed -i '/^SELINUX=/c'SELINUX=disabled /etc/selinux/config

[root@test3 ~]# systemctl disable firewalld.service

[root@test3 ~]# systemctl stop firewalld.service

三、创建用户和组

[root@test3 ~]# groupadd -g 1001 dbgrp

[root@test3 ~]# useradd -g dbgrp omm

[root@test3 ~]# passwd omm

四、配置三个节点的互信

[root@test3 ~]# ssh-keygen

[root@test3 ~]# ssh-copy-id xx.xxx.xx.xx

[root@test3 ~]# ssh-copy-id xx.xxx.xx.xx

其余两机器一样

五、安装 Python3 及依赖包

[root@test3 ~]# yum install -y libaio-devel gcc gcc-c++ zlib-devel expect

[root@test3 ~]# mkdir -p /usr/local/python3

[root@test3 ~]# tar -zxvf Python-3.6.5.tgz

[root@test3 ~]# cd Python-3.6.5

[root@test3 ~]# ./configure --prefix=/usr/local/python3 --enable-shared CFLAGS=-fPIC && make && make install

[root@test3 ~]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3

[root@test3 ~]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

[root@test3 ~]# cp /usr/local/python3/lib/libpython3.6m.so.1.0 /lib64/

在主库进行相关配置

六、编写 clusterconfig.xml

添加新节点信息

[omm@test1 script]$ cat clusterconfig.xml

  <!--dn-->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="26000"/>
<PARAM name="dataNode1" value="/dbdata/data,test2,/dbdata/data/,test3,/dbdata/data/"/>
<!--数据库主节点上的xlog目录,及备机xlog目录-->
<PARAM name="dataNodeXlogPath1" value="/dbdata/xlog,/dbdata/xlog,/dbdata/xlog "/>
<PARAM name="dataNode1_syncNum" value="0"/>
</DEVICE> <!-- 节点2上的节点部署信息,其中“name”的值配置为主机名称 -->
<DEVICE sn="test2">
<!-- 节点2的主机名称 -->
<PARAM name="name" value="test2"/>
<!-- 节点2所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="xx.xxx.xx.xx"/>
<PARAM name="sshIp1" value="xx.xxx.xx.xx"/>
    <!-- 节点3上的节点部署信息,其中“name”的值配置为主机名称 -->
<DEVICE sn="test3">
<!-- 节点3的主机名称 -->
<PARAM name="name" value="test3"/>
<!-- 节点3所在的AZ及AZ优先级 -->
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<!-- 节点2的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
<PARAM name="backIp1" value="xx.xxx.xx.xx"/>
<PARAM name="sshIp1" value="xx.xxx.xx.xx"/>

七、扩容
[root@test1 script]# ./gs_expansion -U omm -G dbgrp -X clusterconfig.xml -h xx.xxx.xx.xx
Start expansion without cluster manager component.
Start to preinstall database on new nodes.
Start to send soft to each standby nodes.
End to send soft to each standby nodes.
Start to preinstall database step.
Preinstall xx.xxx.xx.xx success
End to preinstall database step.
End to preinstall database on new nodes.

Start to install database on new nodes.

Installing database on node xx.xxx.xx.xx:

Parsing the configuration file.

Check preinstall on every node.

Successfully checked preinstall on every node.

Creating the backup directory.

Successfully created the backup directory.

begin deploy..

Installing the cluster.

begin prepare Install Cluster..

Checking the installation environment on all nodes.

begin install Cluster..

Installing applications on all nodes.

Successfully installed APP.

begin init Instance..

encrypt cipher and rand files for database.

Please enter password for database:

Please repeat for database:

begin to create CA cert files

The sslcert will be generated in /dbdata/app/mogdb/share/sslcert/om

NO cm_server instance, no need to create CA for CM.

Cluster installation is completed.

Configuring.

Deleting instances from all nodes.

Successfully deleted instances from all nodes.

Checking node configuration on all nodes.

Initializing instances on all nodes.

Updating instance configuration on all nodes.

Check consistence of memCheck and coresCheck on database nodes.

Configuring pg_hba on all nodes.

Configuration is completed.

Successfully started cluster.

Successfully installed application.

end deploy..

xx.xxx.xx.xx install success.

Finish to install database on all nodes.

Database on standby nodes installed finished.

Checking mogdb and gs_om version.

End to check mogdb and gs_om version.

Start to establish the relationship.

Start to build standby xx.xxx.xx.xx.

Build standby xx.xxx.xx.xx success.

Start to generate and send cluster static file.

End to generate and send cluster static file.

Expansion results:

xx.xxx.xx.xx: Success

Expansion Finish.

[omm@test1 ~]$ gs_om -t status --detail

[ Cluster State ]

cluster_state : Normal

redistributing : No

current_az : AZ_ALL

[ Datanode State ]

node          node_ip         port      instance             state

1 test1 xx.xxx.xx.xx 26000 6001 /dbdata/data P Primary Normal

2 test2 xx.xxx.xx.xx 26000 6002 /dbdata/data S Standby Normal

3 test3 xx.xxx.xx.xx 26000 6003 /dbdata/data S Standby Normal

八、缩容

[omm@test1 ~]$ gs_dropnode -U omm -G dbgrp -h xx.xxx.xx.xx

The target node to be dropped is (['sticmesdbtest3'])

Do you want to continue to drop the target node (yes/no)?yes

Drop node start without CM node.

[gs_dropnode]Start to drop nodes of the cluster.

[gs_dropnode]Start to stop the target node sticmesdbtest3.

[gs_dropnode]End of stop the target node sticmesdbtest3.

[gs_dropnode]Start to backup parameter config file on test1.

[gs_dropnode]End to backup parameter config file on test1.

[gs_dropnode]The backup file of test1 is /dbdata/mogdb/tmp/gs_dropnode_backup20220804104024/parameter_test1.tar

[gs_dropnode]Start to parse parameter config file on test1.

[gs_dropnode]End to parse parameter config file on test1.

[gs_dropnode]Start to parse backup parameter config file on test1.

[gs_dropnode]End to parse backup parameter config file test1.

[gs_dropnode]Start to set openGauss config file on test1.

[gs_dropnode]End of set openGauss config file on test1.

[gs_dropnode]Start to backup parameter config file on test2.

[gs_dropnode]End to backup parameter config file on test2.

[gs_dropnode]The backup file of test2 is /dbdata/mogdb/tmp/gs_dropnode_backup20220804104026/parameter_test2.tar

[gs_dropnode]Start to parse parameter config file on test2.

[gs_dropnode]End to parse parameter config file on test2.

[gs_dropnode]Start to parse backup parameter config file on test2.

[gs_dropnode]End to parse backup parameter config file test2.

[gs_dropnode]Start to set openGauss config file on test2.

[gs_dropnode]End of set openGauss config file on test2.

[gs_dropnode]Start of set pg_hba config file on test1.

[gs_dropnode]End of set pg_hba config file on test1.

[gs_dropnode]Start of set pg_hba config file on test2.

[gs_dropnode]End of set pg_hba config file on test2.

[gs_dropnode]Start to set repl slot on test1.

[gs_dropnode]Start to get repl slot on test1.

[gs_dropnode]End of set repl slot on test1.

[gs_dropnode]Start to modify the cluster static conf.

[gs_dropnode]End of modify the cluster static conf.

[gs_dropnode]Success to drop the target nodes.

[omm@test1 ~]$ gs_om -t status --detail

[ Cluster State ]

cluster_state : Normal

redistributing : No

current_az : AZ_ALL

[ Datanode State ]

node          node_ip         port      instance             state

1 test1 xx.xxx.xx.xx 26000 6001 /dbdata/data P Primary Normal

2 test2 xx.xxx.xx.xx 26000 6002 /dbdata/data S Standby Normal

MogDB/openGauss 3.0 扩容及缩容的更多相关文章

  1. Docker Kubernetes 容器扩容与缩容

    Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 ...

  2. 023.掌握Pod-Pod扩容和缩容

    一 Pod的扩容和缩容 Kubernetes对Pod的扩缩容操作提供了手动和自动两种模式,手动模式通过执行kubectl scale命令或通过RESTful API对一个Deployment/RC进行 ...

  3. Redis Cluster 自动化安装,扩容和缩容

    Redis Cluster 自动化安装,扩容和缩容 之前写过一篇基于python的redis集群自动化安装的实现,基于纯命令的集群实现还是相当繁琐的,因此官方提供了redis-trib.rb这个工具虽 ...

  4. k8s Pod 扩容和缩容

    在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现.Kubernetes支持对Pod的手动扩容和自动扩容. 手动扩容缩容 通过执行扩容命令,对某个dep ...

  5. Kubernetes 笔记 012 Pod 的自动扩容与缩容

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  6. Kubernetes 笔记 11 Pod 扩容与缩容 双十一前后的忙碌

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  7. Kubernetes---Pod的扩容和缩容

    用RC的Scale机制来实现Pod的扩容和缩容 把redis-slave的pod扩展到3个  ,  kubectl scale rc redis-slave --replicas=3 现在来缩容,把 ...

  8. docker微服务部署之:七、Rancher进行微服务扩容和缩容

    docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...

  9. 生产调优4 HDFS-集群扩容及缩容(含服务器间数据均衡)

    目录 HDFS-集群扩容及缩容 添加白名单 配置白名单的步骤 二次配置白名单 增加新服务器 需求 环境准备 服役新节点具体步骤 问题1 服务器间数据均衡 问题2 105是怎么关联到集群的 服务器间数据 ...

  10. LVM逻辑卷扩容、缩容

    LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理. 后期出现问题恢复数据也比较麻烦. 概念: ①PE(P ...

随机推荐

  1. 非正式全面解析 NebulaGraph 中 Session 管理

    NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Ses ...

  2. C++之指针变量的定义和使用

    从b站上黑马程序员的c++课里学到的C++之指针变量的定义和使用 指针变量的定义和使用 简单理解指针就是地址. 内存编号是从0开始记录的,一般用16进制数字表示 1 #include <iost ...

  3. mysql添加联合唯一索引与删除索引

    -- 添加联合唯一索引 alter table <表名> add unique index <索引名称> (name, no, org_id); -- 删除索引 ALTER T ...

  4. C#拾遗补漏之goto跳转语句

    前言 在我们日常工作中常用的C#跳转语句有break.continue.return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺 ...

  5. APISIX的安装和简单使用

    APISIX 是一个云原生.高性能.可扩展的微服务 API 网关. 它是基于 Nginx 和 etcd 来实现,和传统 API 网关相比,APISIX 具备动态路由和插件热加载,特别适合微服务体系下的 ...

  6. 尚硅谷Java 宋红康2023版 - 学习笔记

    尚硅谷Java 宋红康2023版 - 学习笔记 观看地址 https://www.bilibili.com/video/BV1PY411e7J6 60-IDEA开发工具-HelloWorld的编写与相 ...

  7. idea branch 分支比较 | git 查看分支命令 `git branch -vv`

    git 查看分支命令 git branch -vv

  8. Java求解汉诺塔

    汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗 ...

  9. Redis持久化之RDB(Redis DataBase) 和 AOF(Append Only File)

    Redis提供了两种持久化方式:RDB(Redis DataBase)和AOF(Append Only File). 1. RDB持久化: RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁 ...

  10. 【转】客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析

    原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...