基于 openGauss 的高可用数据库部署与主从复制、自动故障转移实践指南

50 阅读7分钟

基于 openGauss 的高可用数据库部署与主从复制、自动故障转移实践指南

前言

数字化时代,数据作为核心资产,其可靠性与服务连续性直接决定企业业务稳定性。openGauss 作为开源、高性能、兼容 PostgreSQL 的企业级数据库,凭借原生高可用特性成为企业级应用的优选方案。而主从复制与自动故障转移作为保障数据不丢失、服务不中断的核心技术,是构建高可用数据库架构的关键。

本文聚焦 openGauss 数据库的高可用实践,从开发者与运维人员的实际需求出发,梳理了从环境搭建、单节点安装、命令行核心操作,到主从复制架构部署、自动故障转移配置的完整流程。内容涵盖 Linux 环境预处理、依赖安装、XML 配置、用户与权限管理、数据同步验证等关键步骤,同时包含实用的数据库日常操作与问题排查技巧。

环境准备与工具下载

1、openGauss工具集下载

在这里插入图片描述

2、数据库驱动下载

在这里插入图片描述

Linux 环境安装与配置

1、关闭安全服务

sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2、关闭防火墙

systemctl status firewalld
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service

3、关闭selinux

sudo setenforce 0

4、配置host

[root@centos79 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.10 centos79

5、安装依赖

  • 创建挂载目录
mkdir /cdrom
  • 挂载CD-ROM镜像
mount -t iso9660 -o ro /dev/cdrom /cdrom
  • 备份现有的YUM源配置文件
cd /etc/yum.repos.d/  
mkdir bak  
mv CentOS* bak
  • 配置本地YUM源
vi local.repo
cat >/etc/yum.repos.d/local.repo <<EOF  
[base-local]  
name=CentOS7-local  
baseurl=file:///cdrom  
enabled=1  
gpgcheck=0  
EOF
  • 清空并重载YUM缓存
yum clean all  
yum makecache

在这里插入图片描述

  • 安装依赖包
yum -y install libaio-devel flex bison ncurses-devel \  
glibc-devel patch redhat-lsb-core readline-devel openssl-devel sqlite-devel libnsl

6、设置字符集

echo 'export LANG=en_US.UTF-8' >> /etc/profile  
echo 'export packagePath=/opt/software/openGauss' >> /etc/profile  
echo 'export LD_LIBRARY_PATH=$packagePath/script/gspylib/clib:$LD_LIBRARY_PATH' >> /etc/profile

在这里插入图片描述

7、时区配置

sudo timedatectl set-timezone systemdefault

8、openGauss 6.0 LTS安装

  • 创建安装目录,上传安装包
mkdir -p /opt/openGauss
  • 解压安装包
tar -zxvf openGauss-6.0.0-RC1-CentOS-64bit-all.tar.gz

9、目录添加权限

chmod 775 -R /opt/openGauss

10、配置XML文件

vi /opt/openGauss/db_config.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    <!-- openGauss整体信息 -->
    <CLUSTER>
        <!-- 数据库名称 -->
        <PARAM name="clusterName" value="dbCluster" />
        <!-- 数据库节点名称(hostname) -->
        <PARAM name="nodeNames" value="centos79" />
        <!-- 数据库安装目录-->
        <PARAM name="gaussdbAppPath" value="/openGauss/app" />
        <!-- 日志目录-->
        <PARAM name="gaussdbLogPath" value="/openGauss/log/omm" />
        <!-- 临时文件目录-->
        <PARAM name="tmpMppdbPath" value="/openGauss/tmp" />
        <!-- 数据库工具目录-->
        <PARAM name="gaussdbToolPath" value="/openGauss/om" />
        <!-- 数据库core文件目录-->
        <PARAM name="corePath" value="/openGauss/corefile" />
        <!-- 节点IP,与数据库节点名称列表一一对应 -->
        <PARAM name="backIp1s" value="192.168.6.20"/>
    </CLUSTER>
    <!-- 每台服务器上的节点部署信息 -->
    <DEVICELIST>
        <!-- 节点1上的部署信息 -->
        <DEVICE sn="centos79">
            <!-- 节点1的主机名称 -->
            <PARAM name="name" value="centos79"/>
            <!-- 节点1所在的AZ及AZ优先级 -->
            <PARAM name="azName" value="AZ1"/>
            <PARAM name="azPriority" value="1"/>
            <!-- 节点1的IP,如果服务器只有一个网卡可用,将backIP1和sshIP1配置成同一个IP -->
            <PARAM name="backIp1" value="192.168.6.20"/>
            <PARAM name="sshIp1" value="192.168.6.20"/>

	    <!--dbnode-->
	    <PARAM name="dataNum" value="1"/>
	    <PARAM name="dataPortBase" value="15400"/>
	    <PARAM name="dataNode1" value="/openGauss/data/dn"/>
            <PARAM name="dataNode1_syncNum" value="0"/>
        </DEVICE>
    </DEVICELIST>
</ROOT>

11、用户和组创建

  • 创建用户组
groupadd dbgroup
  • 创建用户
useradd -g dbgroup omm

12、初始化安装

./gs_preinstall -U omm -G dbgroup -X /opt/software/openGauss/cluster_config.xml

13、以 omm 用户身份登录服务器

su - omm

在这里插入图片描述

14、使用 gs_om -t status 命令检查数据库状态

gs_om -t status

15、使用 gs_om -t status --detail 命令查看详细信息

gs_om -t status --detail

16、连接数据库

gsql -d postgres -p 15400

17、列出数据库

openGauss=# 

18、查看 gsql 版本

gsql -V

19、检查数据库服务是否启动

gs_om -t status

如果数据库正常运行,输出的 cluster_state 应显示为 Normal

cluster_state   : Normal

20、如果异常可以查看数据库日志

tail -f /path/to/data_directory/pg_log/*.log

数据库命令行操作与常用元命令

1、 查看数据库进程

在这里插入图片描述

2、数据库启停

gs_ctl restart -D /opt/software/opengauss/data/single_node/

3、配置环境变量

cat /home/opengauss/.bashrc
export GAUSSHOME=/opt/software/opengauss
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export GS_CLUSTER_NAME=dbCluster
export PGDATA=/opt/software/opengauss/data/single_node

4、登录数据库

gsql -d postgres -p 5432  /  gsql -d postgres -U opengauss -p 5432 -W openGauss123

在这里插入图片描述

5、执行sql语句和sql文件

在这里插入图片描述

6、更多帮助 gsql --help

在这里插入图片描述

7、创建表空间

create tablespace tbs1 location '/data/tbs1';

在这里插入图片描述

8、创建用户

create user user01  password 'openGauss123';

在这里插入图片描述

9、创建数据库,并指定表空间

CREATE DATABASE db01 TABLESPACE tbs1;

10、修改数据库db01所属用户为user01

alter database db01 owner to user01;

在这里插入图片描述

11、使用其他用户登录

create schema scott;

在这里插入图片描述

openGauss 高可用架构设计

openGauss 提供了两种主要高可用性架构:

  • 主从复制架构:一个主节点和多个备份节点,通过数据同步确保数据一致性,主节点负责所有写操作,备份节点同步主节点的数据,并且可以用来读取数据。

  • 自动故障转移:在主节点发生故障时,系统自动将备份节点提升为主节点,保证数据库的高可用性和持续服务。

主从复制部署

1、主节点配置,登录到主节点

sudo -u opengauss gsql -d postgres -p 15400

2、执行 SQL 创建复制用户

CREATE USER replication_user WITH REPLICATION PASSWORD '12345';

3、编辑主节点的 postgresql.conf 配置文件,启用流复制

vi /path/to/data_directory/postgresql.conf
wal_level = replica            # 启用流复制
max_wal_senders = 10           # 设置最大 WAL 发送进程数
wal_keep_size = 1GB            # 设置 WAL 日志保留大小
hot_standby = on               # 启用热备份模式,使从节点可以读取数据

4、配置主节点的访问控制(编辑 pg_hba.conf 文件,允许从节点使用复制权限连接到主节点)

vi /path/to/data_directory/pg_hba.conf

5、添加如下配置,允许从节点连接主节点

host    replication    replication_user    from_node_ip/32    md5

6、重新加载主节点配置

sudo -u opengauss gs_ctl reload -D /path/to/data_directory

7、检查主节点的状态

  • 登录主节点
sudo -u opengauss gsql -d postgres -p 15400
  • 查询复制状态
SELECT * FROM pg_stat_replication;

8、从节点配置(从节点需要从主节点进行数据同步。使用 pg_basebackup 工具从主节点获取全量数据备份)

  • 运行 pg_basebackup 命令进行备份
pg_basebackup -h master_node_ip -D /path/to/standby/data_directory -U replication_user -P --wal-method=stream
  • master_node_ip 是主节点的 IP 地址
  • replication_user 是在主节点上创建的复制用户
  • /path/to/standby/data_directory 是从节点的数据存储目录

9、配置从节点的 recovery.conf 文件(在从节点的数据目录下创建 recovery.conf 文件,以指定从节点如何连接主节点进行同步)

vi /path/to/standby/data_directory/recovery.conf
standby_mode = 'on'                             # 启用从节点模式
primary_conninfo = 'host=master_node_ip port=15400 user=replication_user password=your_password'  # 主节点连接信息
trigger_file = '/tmp/postgresql.promote'        # 主从切换标志文件

10、启动从节点

sudo -u opengauss gs_ctl start -D /path/to/standby/data_directory

11、验证从节点同步状态

  • 登录到从节点
sudo -u opengauss gsql -d postgres -p 15400
  • 查询复制状态
SELECT * FROM pg_stat_wal_receiver;

自动故障转移

1、手动故障转移(如果主节点出现故障,需要将从节点提升为新的主节点,可以通过以下步骤手动触发故障转移,在从节点上创建一个空文件,用于触发从节点切换为主节点)

  • 从节点会检测到此文件并自动切换为新的主节点
touch /tmp/postgresql.promote

2、自动故障转移(openGauss 6.0 LTS 支持通过 gs_om 工具实现自动故障转移,为了实现自动故障转移,需要配置一个监控节点,该节点会监控主节点的状态,发现主节点宕机时自动将备份节点提升为主节点)

  • 通过 gs_om 工具配置监控服务和启用自动故障转移功能
gs_om -t start -D /path/to/data_directory

3、检查集群状态

gs_om -t status --detail

总结

作为开发者openGauss 实测好用,文章里 Linux 环境下靠脚本 + XML 配置就能快速搞定单节点安装与主从复制集群,主从同步、自动故障转移步骤清晰,gsql 命令操作和用户表空间管理贴近开发习惯,不用额外集成工具就满足高可用需求,从开发测试到生产部署的核心诉求都能通过实操步骤直接落地。