写点什么

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

作者:Toekn_w
  • 2025-11-14
    河南
  • 本文字数:4173 字

    阅读完需:约 14 分钟

前言

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


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

环境准备与工具下载

1、openGauss 工具集下载



2、数据库驱动下载



Linux 环境安装与配置

1、关闭安全服务


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


2、关闭防火墙


systemctl status firewalldsystemctl stop firewalld.servicesystemctl disable firewalld.servicesystemctl status firewalld.service
复制代码


3、关闭 selinux


sudo setenforce 0
复制代码


4、配置 host


[root@centos79 ~]# cat /etc/hosts127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.10.10 centos79
复制代码


5、安装依赖


创建挂载目录


mkdir /cdrom
复制代码


  1. 挂载 CD-ROM 镜像


mount -t iso9660 -o ro /dev/cdrom /cdrom
复制代码


l 备份现有的 YUM 源配置文件


cd /etc/yum.repos.d/  mkdir bak  mv CentOS* bak
复制代码


l 配置本地 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
复制代码


l 清空并重载 YUM 缓存


yum clean all  yum makecache
复制代码





l 安装依赖包


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 安装


l 创建安装目录,上传安装包


mkdir -p /opt/openGauss
复制代码



l 解压安装包


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、用户和组创建


l 创建用户组


groupadd dbgroup
复制代码



l 创建用户


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/.bashrcexport GAUSSHOME=/opt/software/opengaussexport PATH=$GAUSSHOME/bin:$PATHexport LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATHexport GS_CLUSTER_NAME=dbClusterexport 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 提供了两种主要高可用性架构:


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


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

主从复制部署

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、检查主节点的状态


l 登录主节点


sudo -u opengauss gsql -d postgres -p 15400
复制代码



l 查询复制状态


SELECT * FROM pg_stat_replication;
复制代码



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


l 运行 pg_basebackup 命令进行备份


pg_basebackup -h master_node_ip -D /path/to/standby/data_directory -U replication_user -P --wal-method=stream
复制代码



  • l master_node_ip 是主节点的 IP 地址

  • l replication_user 是在主节点上创建的复制用户

  • l /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、验证从节点同步状态


l 登录到从节点


sudo -u opengauss gsql -d postgres -p 15400
复制代码



l 查询复制状态


SELECT * FROM pg_stat_wal_receiver;
复制代码


自动故障转移

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


l 从节点会检测到此文件并自动切换为新的主节点




touch /tmp/postgresql.promote
复制代码



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


l 通过 gs_om 工具配置监控服务和启用自动故障转移功能


gs_om -t start -D /path/to/data_directory
复制代码



3、检查集群状态


gs_om -t status --detail
复制代码


总结

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


用户头像

Toekn_w

关注

还未添加个人签名 2022-06-01 加入

还未添加个人简介

评论

发布
暂无评论
基于 openGauss 的高可用数据库部署与主从复制、自动故障转移实践指南_Toekn_w_InfoQ写作社区