云数据库 PostgreSQL 在 CVM 本地搭建 PostgreSQL 异地灾备环境

背景为保证业务正常运行,一个高可用的数据库架构是不可或缺的。数据库一旦出现丢失、不可用等问题,将会造成重大影响和经济损失。通过主备架构,当主数据库因突发硬件故障而无法工作时,备用数据库可立即接管服务,保证数据库服务能够正常提供。而在 CVM 自建 PostgreSQL 灾备环境,则能够将云上数据同步至本地,提高对不可抗力的应对能力。这里说明如何搭建云数据库 PostgreSQL 为主数据库,云服务器 CVM 自建 P。

相关产品
云数据库 PostgreSQL 产品页,含版本规格、价格与购买入口。

背景为保证业务正常运行,一个高可用的数据库架构是不可或缺的。数据库一旦出现丢失、不可用等问题,将会造成重大影响和经济损失。通过主备架构,当主数据库因突发硬件故障而无法工作时,备用数据库可立即接管服务,保证数据库服务能够正常提供。而在 CVM 自建 PostgreSQL 灾备环境,则能够将云上数据同步至本地,提高对不可抗力的应对能力。这里说明如何搭建云数据库 PostgreSQL 为主数据库,云服务器 CVM 自建 P。

背景为保证业务正常运行,一个高可用的数据库架构是不可或缺的。数据库一旦出现丢失、不可用等问题,将会造成重大影响和经济损失。通过主备架构,当主数据库因突发硬件故障而无法工作时,备用数据库可立即接管服务,保证数据库服务能够正常提供。而在 CVM 自建 PostgreSQL 灾备环境,则能够将云上数据同步至本地,提高对不可抗力的应对能力。这里说明如何搭建云数据库 PostgreSQL 为主数据库,云服务器 CVM 自建 PostgreSQL 为备数据库的主备环境。前置条件云服务器 CVM 中必须安装与云数据库相同版本的 PostgreSQL 数据库,详细安装教程请参考 PostgreSQL 产品文档。Linux 系统的云服务器配置请参见 快速配置 Linux 云服务器。示例使用 PostgreSQL 14 版本。注意:本方法需要用到 pg_basebackup 工具,两个工具均仅支持13及以上的 PostgreSQL 版本。步骤1: 将云数据库主库数据物理备份到 CVM 本地备库1. 使用 root 账号登录云服务器 CVM ,执行以下命令安装中文字符集。1.1. 若你的 CVM 系统为 Debian/Ubuntu ,请使用 root 权限使用以下命令:[root@VM-10-18-tencentos ~]# sudo locale-gen zh_CN.UTF-81.2. 若你的 CVM 系统为 CentOS/TencentOS ,请使用 root 权限执行以下命令进入配置文件内容:[root@VM-10-17-tencentos ~]# vi /etc/locale.conf按 i 键进入编辑模式,将文件内容修改为:LANG="zh_CN.UTF-8"按 esc 键退出编辑模式,再直接输入 :wq 保存修改并退出。退出后,执行以下命令使配置生效:[root@VM-10-17-tencentos ~]# source /etc/locale.conf1.3. 安装完毕,你可通过以下命令查看字符集是否安装成功:[root@VM-10-17-tencentos ~]# locale -a | grep zh_CNzh_CNzh_CN.gb18030zh_CN.gb2312zh_CN.gbkzh_CN.utf8若返回信息前缀为 zh ,则安装成功。2. 创建普通权限用户。若你的本地数据库中已经存在普通权限用户,可跳过本步骤。注意:创建备份数据目录时,必须使用普通权限用户。PostgreSQL 出于安全考虑,启动命令 pg_ctl 不允许以 root 或 postgres 超级用户身份运行。使用以下命令完成创建普通用户 pgsql 。[root@VM-10-6-tencentos pgsql]# useradd -r -s /bin/bash pgsql3. 通过重命名目录,将当前云服务器中的数据目录进行备份。系统默认数据目录为 /usr/local/pgsql/data ,你可根据实际情况修改命令。执行以下命令,使用普通用户 pgsql ,停止当前 PostgreSQL 服务运行:[root@VM-10-17-tencentos ~]# su – pgsql #使用普通用户 pgsql 登录本地数据库[pgsql@VM-10-17-tencentos ~]$ cd /usr/local/pgsql/data[pgsql@VM-10-17-tencentos data]$ /usr/local/pgsql/bin/pg_ctl stop -D /usr/local/pgsql/datawaiting for server to shut down…. doneserver stopped执行以下命令,重命名数据目录,将其作为备份。示例备份目录名为 data-bak-2025 ,可根据实际情况修改。[pgsql@VM-10-6-tencentos postgresql-14.2]# mv /usr/local/pgsql/data /usr/local/pgsql/data-bak-2025重新新建一个数据目录 /usr/local/pgsql/data 作为数据库存放数据的目录。将新的数据库目录权限修改为700 ,即仅限目录所有者拥有读、写和执行权限,其他用户无操作权限:[pgsql@VM-10-6-tencentos postgresql-14.2]# cd /usr/local/pgsql[pgsql@VM-10-6-tencentos pgsql]# mkdir data[pgsql@VM-10-6-tencentos pgsql]# chmod 700 data4. 执行以下命令,使用 pg_basebackup 工具在线备份主库数据。其中,-h 参数后需填写云数据库的 IP 地址,-U 参数后需填写连接数据库的账号,此处为 dbadmin 。若云数据库与云服务器处于同一 VPC 下,则建议填写云数据库的内网 IP 地址。[pgsql@VM-10-6-tencentos pgsql]# exit[root@VM-10-6-tencentos pgsql]# date && /usr/local/pgsql/bin/pg_basebackup -R -Xs -D /usr/local/pgsql/data -h *.*.*.* -p 5432 –verbose -P -U dbadmin && date Password: 提示 Password: ,输入连接数据库账号的密码,按回车键即可。最终显示信息 pg_basebackup: base backup completed 则代表物理备份成功。步骤2: 修改配置文件,添加主备链路1. 执行以下命令,进入 postgresql.conf 配置文件中。[root@VM-10-6-tencentos pgsql]# vi /usr/local/pgsql/data/postgresql.conf按 i 键进入编辑模式,找到以下内容,在每行的行首添加英文字符 # 将其注释掉。synchronous_standby_namesextension_blacklisttencentdb_enable_copy_totencentdb_relcache_evict_numtencentdb_relcache_max_numsoft_limit_connectionsshared_preload_librariestencentdb_syscache_max_numbasebackup_exclude_pathstencentdb_syscache_evict_numtencentdb_enable_trusted_extensiontencentdb_az_fivedisable_dblink_connect_to_othertencentdb_enable_superuser_unsafe_behaviour说明:开源环境无法识别特殊参数,请你将配置文件中所有 tencentdb 为前缀的项全部注释掉。并且,修改以下项:port = 5432 #将原本的端口号修改为5432log_directory = '/usr/local/pgsql/logs' #可根据实际需要调整log_destination = 'csvlog' #将原本的'csvlog,auditlog'修改为log_destination = 'csvlog'最后,在文件末尾添加两行:unix_socket_directories = '/usr/local/pgsql/data' #可根据实际需要调整primary_conninfo = 'host=*.*.*.* port=5432 user=dbadmin password=对应密码' #host填写云数据库IP地址,user填写连接数据库的账号名修改完毕后,按 esc 键退出编辑模式,并输入 :wq 保存修改并退出文件。2. 执行以下命令,进入 pg_hba.conf 配置文件中。[root@VM-10-6-tencentos pgsql]# vi /usr/local/pgsql/data/pg_hba.conf按 i 键进入编辑模式,找到以下内容,在行首添加英文字符 # 将其注释掉。host all postgres 0.0.0.0/0 reject修改完毕后,按 esc 键退出编辑模式,并输入 :wq 保存修改并退出文件。步骤3: 启动数据库,查看备份数据使用普通用户 pgsql 账号登录,启动云服务器本地的数据库:[root@VM-10-6-tencentos pgsql]# su – pgsql[pgsql@VM-10-6-tencentos pgsql]$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile startwaiting for server to start…. doneserver started在 pgAdmin 客户端连接到云服务器的数据库,可以查看到物理备份的数据。步骤4: 验证主备链路登录 云数据库 PostgreSQL 控制台,登录数据库实例,执行以下 SQL 语句:select * from pg_stat_replication;如下所示,执行结果将显示刚才建立的主备链路。主备环境搭建成功。

赞 (0)
上一篇 4天前
下一篇 4天前