PostgreSQL 16.4安装以及集群部署

server/2024/10/18 14:43:56/

1. 环境准备

1.1 主机环境

  • 主机 IP: 192.24.215.121
  • 操作系统: CentOS 9
  • PostgreSQL 版本: 16.4

1.2 从机环境

  • 从机 IP: 192.24.215.122
  • 操作系统: CentOS 9
  • PostgreSQL 版本: 16.4

2. 安装 PostgreSQL 16.4

在主从两台机器上都需要安装 PostgreSQL 16.4。

2.1 添加 PostgreSQL 源

对于 CentOS,添加 PostgreSQL 的 YUM 源:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum makecache

2.2 安装 PostgreSQL

在两台机器上分别安装 PostgreSQL 16.4:

sudo apt-get install -y postgresql-16

sudo yum install -y postgresql16-server postgresql16-contrib

2.3 初始化数据库

在主节点上初始化数据库

sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

在从节点上初始化数据库

sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

3. 配置主节点

3.1 编辑配置文件

编辑主节点的 postgresql.conf 文件:

vim /home/data/pgdb/postgresql.conf

修改以下参数:

listen_addresses = '*'
wal_level = replica
max_wal_senders = 32
wal_keep_size = 1GB
hot_standby = on
archive_mode = on
archive_command = 'test ! -f /home/data/pgdb/pg_wal/archive_status/%f && cp %p /home/data/pgdb/pg_wal/archive_status/%f'

3.2 配置 pg_hba.conf

编辑主节点的 pg_hba.conf 文件:

vim pg_hba.conf

添加以下行以允许从节点连接:

host    replication     all             192.24.215.122/24            md5

4. 配置从节点

4.1 编辑配置文件

编辑从节点的 postgresql.conf 文件:

vim /home/data/pgdb/postgresql.conf

修改以下参数:

listen_addresses = '*'
hot_standby = on

4.2 配置 pg_hba.conf

编辑从节点的 pg_hba.conf 文件:

vim /home/data/pgdb/pg_hba.conf

添加以下行以允许主节点连接:

host    replication     all             192.24.215.121/24           md5

5. 启动 PostgreSQL 服务

在两台机器上分别启动 PostgreSQL 服务:

$PGHOME/pg_ctl -D /home/data/pgdb start

确保服务启动成功:

$PGHOME/pg_ctl -D /home/data/pgdb status

6. 设置主节点

6.1 创建复制用户

在主节点上创建一个用于复制的用户:

su - postgres
psql

在 PostgreSQL 命令行中执行:

CREATE ROLE repl WITH REPLICATION LOGIN ENCRYPTED PASSWORD '123123';

6.2 允许复制用户连接

确保主节点的 pg_hba.conf 中允许复制用户从从节点连接:

host    replication     repl      192.24.215.122/24            md5

重新加载配置:

$PGHOME/pg_ctl -D /home/data/pgdb restart

7. 设置从节点

7.1 备份主节点数据

在从节点上备份主节点的数据:

su - postgres
pg_basebackup -h 192.24.215.121 -D /home/data/pgdb -U repl -P -v -R --wal-method=stream

输入复制用户的密码。

7.2 修改从节点配置

可以看到该目录下多了个standby.signal 文件,并且在postgresql.auto.conf文件下多了如下配置信息:

cat /home/data/pgdb/postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=repl password=123456 channel_binding=prefer host=172.24.215.121 port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable'

7.3 启动从节点

启动从节点的 PostgreSQL 服务:

$PGHOME/pg_ctl -D /home/data/pgdb start

8. 验证复制

连接主库执行 select client_addr,state,sync_state from pg_stat_replication; 可以看到从库的信息:
在这里插入图片描述

在主节点上插入一些数据,然后在从节点上查询这些数据,确保数据同步:

su - postgres
psql
postgres=# CREATE TABLE test01 (id int primary key, name varchar(40));
postgres=# INSERT INTO test VALUES (1, '张三');
postgres=# INSERT INTO test VALUES (2, '李四');
postgres=# INSERT INTO test VALUES (3, '王五');

在从节点上查询:

su - postgres
psql
postgres=# SELECT * FROM test01;

在这里插入图片描述

如果数据同步,则表示集群配置成功。

9. 监控和管理

您可以使用以下命令监控复制状态:

postgres=# SELECT * FROM pg_stat_replication;

在这里插入图片描述

如果有任何问题,可以通过检查 PostgreSQL 的日志文件 /home/data/pgdb/log 来诊断。

10. 故障切换

如果主节点发生故障,可以将从节点提升为主节点:

sudo -u postgres touch /home/data/pgdb/trigger_file

从节点将会切换为主节点,并开始接受写操作。

11. 清理和优化

根据需要调整 postgresql.conf 中的参数,例如 checkpoint_timeoutmax_connections 等,以优化性能。

12.总结

本次的postgresql 16.4主备同步与我上次做postgresql 11 主备同步的变化

1、数据库安装方法

其实本次我选择的rpm包方法安装,上次使用二进制tar包安装postgresql 11的,这个不属于版本间的差异;

2、主备同步参数配置

wal_level本次要设置为replica,上次11.2的时候我设置为hot_standby,如果在16.4设置为hot_standby就不能进行同步;

3、主备同步后产生的文件

16.4配置了主备同步后,在备库的$PGDATA的目录下生成了standby.signal和backup_manifest两个文件,standby.signal为一个空文件,这在11.2的主备同步中备库是没有的文件

4、备库中primary_conninfo连接信息

在16.4中存放在postgresql.auto.conf,而在11.2中存放在recovery.conf文件中,16.4版本中没有recovery.conf文件。

5、pg_controldata的使用

在11.2中可以使用pg_controldata查看主备库的角色信息,主库的集群状态为in production,备库的集群状态为in archive recovery,但在16.4中不能使用该pg_controldata工具。


http://www.ppmy.cn/server/132783.html

相关文章

k8s-services资源-pod详解

已经能够利用Deployment来创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题: Pod IP 会随着Pod的重建产生变化 Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问 这样对于访问这个服务带来了…

Java开发中知识点整理

正则表达式 测试网址 Git 分支和主分支有冲突 先checkout origin/分支把origin/master pull进本地分支 修改冲突MergeCommit and Push

【Linux】Linux常见指令及权限理解

1.ls指令 语法 : ls [ 选项 ][ 目录或文件 ] 功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文…

JavaFX学习系列--第一章: 简单Fx界面

chapter01(简单窗口搭建及文件读写) JavaFX 是一个用于构建富客户端应用程序的框架,提供了一种现代化的方式来创建桌面应用程序和互联网应用程序。 创建JavaFx项目 ​ 在Java体系中,最常用的图形界面设计库主要是Swing和JavaFX,本课程使用…

Anaconda、Pycharm环境配置

Anaconda介绍 Anaconda是一个开源的‌Python发行版本,它包含了‌conda、Python以及180多个科学包及其依赖项。‌ Anaconda不仅是一个软件发行版,还集成了包管理器和环境管理器,使得用户可以方便地安装、管理和切换不同的软件包及其依赖。Ana…

xRDP – 在 Ubuntu 18.04、20.04、22.04、22.10、23.04(脚本版本 1.4.7)上轻松安装 xRDP

最新脚本Repository | c-nergy.be 概述 到目前为止,您应该知道 xrdp-installer 脚本旨在简化 xRDP 在 Ubuntu 操作系统上的安装和配置后操作。xRDP 是一款在 Linux 上启用远程桌面服务的软件。这意味着 Windows 用户可以使用他们的远程桌面客户端 (mst…

R语言医学数据分析实践-数据读写

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 R编程环境的搭建-CSDN博客 在分析公共卫生数据时,数…

HTML快速入门--第二节--css选择器

一、基本概念 CSS:层叠样式表 样式:外观属性 层叠:一个标签对象,最终呈现出来的样子,多个样式共同作用 表:.css后缀文件 tr是列 td是行 div :能整齐装东西 空格td :后代 >td:子代 选择…