PostgreSQL 16.4安装以及集群部署

news2024/11/29 3:50:13

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.coloradmin.cn/o/2206312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行卡基础信息查询 API 对接说明

本文将介绍一种 银行卡基础信息查询 API 对接说明,它可用于银行卡基础信息查询。 接下来介绍下 银行卡基础信息查询 API 的对接说明。 申请流程 要使用 API,需要先到 银行卡基础信息查询 API 对应页面申请对应的服务,进入页面之后&#xf…

Python自定义异常类:实际应用示例之最佳实践

Python自定义异常类:实际应用示例之最佳实践 前言 在软件开发中,合理处理异常是保证程序稳定性的重要环节。虽然 Python 内置了丰富的异常类型,但在处理复杂业务逻辑时,自定义异常类能够使代码更加清晰且具备可扩展性。 本文将…

一个架构师的职业素养:四种常用的权限模型

你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…

ESP32接入扣子(Coze) API使用自定义智能体

使用ESP32接入Coze API实现聊天机器人的教程 本示例将使用ESP32开发板通过WiFi接入 Coze API,实现一个简单的聊天机器人功能。用户可以通过串口向机器人输入问题,ESP32将通过Coze API与智能体进行通信,并返回对应的回复。本文将详细介绍了如…

OpenGL 进阶系列03 - OpenGL实例化渲染来提高性能

目录 一:概述 二:实例化渲染的优点: 三:OpenGL实例化渲染的例子: 一:概述 OpenGL 实例化渲染(Instanced Rendering)是一种渲染技术,可以有效地绘制多个相同对象,而不需要为每个对象单独提交绘制调用。通过这种方式,可以显著提高渲染性能,尤其是在需要绘制大量相…

【每日刷题】Day137

【每日刷题】Day137 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1576. 替换所有的问号 - 力扣(LeetCode) 2. 495. 提莫攻击 - 力扣&#xf…

【数据结构与算法】线性表顺序存储结构

文章目录 一.顺序表的存储结构定义1.1定义1.2 图示1.3结构代码*C语言的内存动态分配 二.顺序表基本运算*参数传递2.1建立2.2初始化(InitList(&L))2.3销毁(DestroyList(&L))2.4判断线性表是否为空表(ListEmpty(L))2.5求线性表的长度(ListLength(L))2.6输出线性表(DispLi…

基于GoogleNet深度学习网络的手语识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 手语How are you,测试识别结果如下: 手语I am fine,测试识别结果如下: 手…

java入门和Java语法

Java直接运行源代码文件,不会产生HelloWorld.class第二种方法:把模块放在D盘下,然后导入 第三种方法:新建一个模块,然后把内容复制过去 byte l 12; short m l; System.out.println(m); char n a; int reason mn; Sy…

消息摘要算法

算法特点 a) 消息摘要算法/单向散列函数/哈希函数 b) 不同长度的输入,产生固定长度的输出 c) 散列后的密文不可逆 d) 散列后的结果唯一 e) 哈希碰撞 f) 一般用于校验数据完整性、签名sign 由于密文不可逆,所以服务端也无法解密 想要验证&#xf…

解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(下)

机器视觉产业链全景回顾 视觉引导机器人生态系统或产业链分为三个层次。 上游(供应商) 该机器人视觉系统的上游包括使其得以运行的硬件和软件提供商。硬件提供商提供工业相机、图像采集卡、图像处理器、光源设备(LED)、镜头、光…

如何让信息学奥赛学习“边玩边学”?——趣味编程让枯燥学习变得有趣

信息学奥赛(NOI)作为一项高水平的编程竞赛,内容涉及到大量的算法、数据结构和复杂的逻辑思维,对学生的要求非常高。然而,面对枯燥的知识点和高难度的题目,很多学生在备赛过程中容易感到乏味甚至放弃。那么&…

Overfrp内网穿透:使用域名将内网http/https服务暴露到公网

项目地址:https://github.com/sometiny/overfrp 使用overfrp部署穿透服务器,绑定域名后,可使用域名访问内网的http/https服务。 用例中穿透服务器和内网机器之间的访问全链路加密,具有ssh2相当的安全级别。!&#xf…

国外电商系统开发-运维系统秘钥管理

文件上传功能,都是通过拖放的方式上传的 当然了,上面我只是演示行的放几个文件而已,不要在意文件名。此时,如果您有服务器是通过SSH-Key登录的,那么在服务器配置中,您可以做如下选择:

【论文阅读】Learning a Few-shot Embedding Model with Contrastive Learning

使用对比学习来学习小样本嵌入模型 引用:Liu, Chen, et al. “Learning a few-shot embedding model with contrastive learning.” Proceedings of the AAAI conference on artificial intelligence. Vol. 35. No. 10. 2021. 论文地址:下载地址 论文代码…

jenkins 插件SSH Pipeline Steps

一、安装 SSH Pipeline Steps | Jenkins plugin 二、添加全局linux服务器用户名密码:linux-142 三、新建流水线SshServer 添加Pipeline Script node {def remote [:]remote.name tstremote.host 192.168.31.142remote.allowAnyHosts truewithCredentials([usern…

leetcode167. 两数之和 II - 输入有序数组

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers…

操作系统中的并发控制——使用条件变量同步

本期主题&#xff1a; 操作系统中的并发控制&#xff0c;条件变量 往期链接&#xff1a; linux设备驱动中的并发操作系统中的多线程问题——原子操作、自旋锁的底层实现操作系统并发控制——使用互斥锁实现同步 操作系统并发控制之条件变量同步 1. 问题描述2. 条件变量的API讲…

数据治理、数据清洗定义、区别以及数据清洗常用方法

一、数据治理定义 数据治理是一种组织数据管理的方法&#xff0c;涉及数据的收集、存储、处理、分析和共享等方面&#xff0c;旨在最大程度地利用数据资产并降低数据相关的风险。‌ 数据治理确保数据的质量、安全性、合规性和可用性&#xff0c;以支持组织的决策和运营活动。‌…

【Canvas与标牌】2024.10.8胜利大逃亡盾形标牌

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>537.日期金盾Draft2上色</title><style type"text/css…