PostgreSQL 部署全攻略:单机与集群模式详解
前言:在当今数字化浪潮中,数据已成为推动世界前行的核心力量。无论是企业决策、科学研究,还是日常生活的方方面面,数据的存储、管理和分析都扮演着至关重要的角色。而数据库作为数据的“守护者”和“管理者”,其重要性不言而喻。在众多数据库系统中,PostgreSQL 以其卓越的性能、强大的功能、高度的灵活性和开源社区的大力支持,逐渐成为全球开发者和企业的首选之一。
PostgreSQL,这款源自学术研究项目的关系型数据库管理系统,自诞生以来便承载着对创新和卓越的追求。它的历史可以追溯到 1986 年,由加州大学伯克利分校的迈克尔·斯通布雷克教授领导的 POSTGRES 项目。最初的目标是探索面向对象数据库的前沿技术,但随着 SQL 标准的兴起,它逐渐演变为一个支持 SQL 的强大关系型数据库系统,并于 1995 年正式更名为 PostgreSQL。从那时起,PostgreSQL 开始了它的开源之旅,由全球开发者社区的共同努力推动其发展。
如今,PostgreSQL 已经成长为一个成熟、稳定且功能强大的数据库解决方案。它不仅在开源数据库领域占据重要地位,甚至在某些方面超越了传统的商业数据库系统。PostgreSQL 的成功并非偶然,它凭借以下核心优势赢得了广泛的认可:
- 强大的功能支持:从复杂的数据类型(如 JSON、XML、地理空间数据)到高级查询功能(如窗口函数、递归查询),PostgreSQL 几乎涵盖了现代数据库应用的所有需求。
- 高度的可扩展性:无论是通过多核处理器的并行处理,还是通过主从复制、分片和集群技术,PostgreSQL 都能够轻松应对高并发和海量数据的挑战。
- 数据一致性的保障:严格遵循 ACID 原则,支持多种事务隔离级别,确保数据在复杂操作和系统故障下的完整性和一致性。
- 开源的力量:作为一个开源项目,PostgreSQL 拥有活跃的全球社区支持。开发者可以免费使用、修改和扩展它,同时也能从社区中获得丰富的资源和经验分享。
PostgreSQL 的应用场景广泛,从金融行业的交易系统到互联网企业的海量数据存储,从科学研究的数据分析到政府机构的关键业务应用,它都能提供可靠的解决方案。无论是小型创业公司还是大型跨国企业,PostgreSQL 都能以其卓越的性能和灵活性满足不同的需求。
然而,尽管 PostgreSQL 的功能强大,但它的学习曲线也相对较高。对于初学者来说,掌握其核心概念、架构设计和优化技巧并非易事。但正是这种复杂性,也使得 PostgreSQL 成为一个值得深入探索的领域。通过学习和实践,开发者不仅可以提升自己的技术能力,还能在实际应用中充分发挥 PostgreSQL 的潜力。
PostgreSQL 单机部署与集群部署模式详解
PostgreSQL 作为一种功能强大的开源关系型数据库,在数据存储与管理领域应用广泛。无论是小型应用还是大型企业级系统,合适的部署模式都能让其发挥出最佳性能。接下来,将深入探讨 PostgreSQL 的单机部署以及集群部署模式。
一、PostgreSQL 单机部署
(一)环境准备
在进行 PostgreSQL 单机部署之前,需要确保服务器满足基本的硬件和软件要求。硬件方面,至少需要 2GB 的内存、足够的磁盘空间(根据数据量大小而定,建议预留至少 10GB 的可用空间)以及支持的 CPU 架构(如 x86_64 等)。软件环境上,要求操作系统为支持的 Linux 发行版(如 CentOS、Ubuntu Server 等)或 Windows 系统,并且安装一些必要的依赖库,如 libreadline、zlib 等,在 Linux 系统上可以通过包管理工具(yum 或 apt)来安装这些依赖。
(二)安装步骤
- 下载安装包:从 PostgreSQL 的官方网站(https://www.postgresql.org/)获取最新稳定版本的安装包。对于 Linux 系统,通常下载源码包,然后根据服务器的架构和需求进行编译安装;对于 Windows 系统,可以直接下载图形化的安装程序。
- 解压与编译(Linux):在 Linux 环境下,使用 tar 命令解压源码包,进入解压后的目录,执行
./configure命令进行配置,指定安装路径、启用的模块等参数。配置完成后,运行make命令进行编译,最后使用make install命令将编译后的文件安装到指定位置。 - 运行安装程序(Windows):在 Windows 系统中,双击下载的安装程序,按照安装向导的提示进行操作,选择安装路径、设置超级用户密码等信息,完成安装过程。
- 初始化数据库:无论是 Linux 还是 Windows 系统,在安装完成后都需要初始化数据库。在 Linux 下,可以使用
initdb -D /your/data/directory命令(将/your/data/directory替换为实际的数据存储目录)来初始化;在 Windows 下,可以通过开始菜单中的 PostgreSQL 初始化工具来完成该操作。初始化过程会创建系统数据库、配置文件等必要的文件和目录结构。
(三)配置与启动
- 主配置文件 postgresql.conf:该文件主要用来设置服务器的运行参数。关键参数包括
listen_addresses(指定服务器监听的地址,默认为localhost,若需要远程连接可修改为’*')max_connections(设置最大连接数,根据服务器性能和应用需求调整)、shared_buffers(设置共享内存缓冲区大小,通常建议设置为物理内存的 25%左右)等。修改配置文件后,需要重启 PostgreSQL 服务才能使配置生效。 - 启动服务:在 Linux 系统中,可以使用
pg_ctl -D /your/data/directory -l logfile start命令来启动 PostgreSQL 服务;在 Windows 系统下,可以通过服务管理器(services.msc)找到 PostgreSQL 服务,右键点击选择启动。启动成功后,可以通过psql -U postgres命令(Linux)或在 Windows 的命令行中使用psql -U postgres连接到数据库,验证是否能够正常访问。
二、PostgreSQL 集群部署模式
(一)主从复制(Read Replication)模式
- 架构原理:主从复制模式由一个主节点(Primary)和一个或多个从节点(Standby)组成。主节点负责处理所有的写操作(INSERT、UPDATE、DELETE 等),并将这些操作产生的 WAL(Write-Ahead Logging)日志通过流复制(Streaming Replication)的方式发送给从节点。从节点接收 WAL 日志后,在本地重放这些日志,从而保持数据与主节点的一致性。从节点通常以只读模式运行,可以承担读操作(SELECT 查询)的负载,实现读写分离,提高整个数据库系统的读取性能。
- 部署步骤
- 主节点配置:在主节点上,首先需要修改
postgresql.conf文件,启用流复制功能,将wal_level参数设置为replica或logical(replica适用于物理复制,logical适用于逻辑复制,如基于行的复制),并将max_wal_senders参数设置为足够大的值(如 5),以确保能够同时处理多个从节点的复制连接。同时,配置pg_hba.conf文件,允许从节点的 IP 地址通过复制连接访问主节点,添加类似host replication replicator <standby_ip>/32 md5的规则(其中replicator是用于复制的用户名,<standby_ip>是从节点的 IP 地址)。 - 从节点配置:在从节点上,先初始化数据库,然后修改
postgresql.conf文件,设置hot_standby = on以启用热备功能,允许在复制过程中接受只读查询。接着,在pg_hba.conf文件中添加允许主节点连接的规则。最后,使用pg_basebackup工具从主节点获取基础备份数据,并创建recovery.conf文件(在 PostgreSQL 12 及以上版本中,部分参数已集成到postgresql.conf中),指定主节点的连接信息(如主机名、端口号、用户名和密码等),启动从节点服务,使其开始与主节点进行复制同步。
- 主节点配置:在主节点上,首先需要修改
(二)高可用(High Availability)模式之 Pgpool-II
- 架构原理:Pgpool-II 是一个位于客户端和 PostgreSQL 服务器之间的中间件,主要用于实现连接池、负载均衡和高可用性等功能。在高可用模式下,Pgpool-II 通常与主从复制结合使用。它会监控后端的多个 PostgreSQL 服务器(包括主节点和从节点),当主节点发生故障时,Pgpool-II 可以根据设定的故障转移机制(如使用 watchdog 等工具)自动将从节点提升为主节点,并更新客户端的连接信息,确保数据库服务的连续性。同时,Pgpool-II 的连接池功能可以有效减少数据库的连接开销,提高并发处理能力。
- 部署步骤
- 安装 Pgpool-II:在所有需要部署 Pgpool-II 的服务器上(通常是负载均衡节点),从官方网站下载安装包并进行安装。安装过程中需要注意选择合适的版本与 PostgreSQL 版本兼容,并配置相关的依赖库。
- 配置 Pgpool-II:修改 Pgpool-II 的主配置文件
pgpool.conf,设置后端服务器的连接信息(包括主节点和从节点的 IP 地址、端口号、数据库名称等),配置负载均衡模式(如将load_balance_mode设置为on),以及设置故障转移相关的参数(如failover_command指定故障转移时执行的命令脚本,该脚本通常用于在从节点上执行提升操作等)。同时,还需要配置pcp.conf文件,用于管理 Pgpool-II 的认证信息。 - 启动与测试:启动 Pgpool-II 服务后,客户端可以通过连接 Pgpool-II 的 IP 和端口来访问数据库。可以模拟主节点故障(如停止主节点服务),观察 Pgpool-II 是否能够正确触发故障转移流程,将从节点提升为主节点,并验证新的主节点是否能够正常接收写操作,整个系统是否能够持续稳定运行。
(三)高可用模式之 Patroni
- 架构原理:Patroni 是一个基于 ZooKeeper、Etcd 或 Consul 等分布式配置管理工具的 PostgreSQL 高可用解决方案。它利用这些外部工具来管理 PostgreSQL 集群的配置和状态。在 Patroni 架构中,每个 PostgreSQL 实例都运行一个 Patroni 进程,该进程会定期向配置管理工具报告实例的状态。当主节点发生故障时,Patroni 会根据分布式配置管理工具中的选举机制,自动选择一个最优的从节点进行提升,成为新的主节点。同时,Patroni 还支持与多种工具(如 ceph、nfs 等)集成,实现数据的备份和恢复等功能,进一步增强了高可用性和数据安全性。
- 部署步骤
- 部署分布式配置管理工具:首先需要部署 Etcd(以 Etcd 为例)集群,确保其正常运行且各节点间能够正常通信。Etcd 集群的规模通常建议为奇数个节点(如 3 节点或 5 节点),以避免出现网络分区导致无法选举的情况。
- 配置 Patroni:在每个 PostgreSQL 节点上,安装 Patroni,并修改其配置文件
patroni.yml。在配置文件中,指定使用的分布式配置管理工具(如 Etcd)的连接信息,包括主机名、端口号等。同时,设置 PostgreSQL 的相关参数,如数据目录、WAL 级别、监听地址和端口等,以及定义主从关系、故障转移策略等参数。例如,设置bootstrap.dcs参数指向 Etcd 集群的地址,tags中的replicatefrom参数用于控制从节点的复制源等。 - 启动与验证:在所有节点上启动 Patroni 服务,Patroni 会自动在 Etcd 中注册实例信息,并根据配置进行主从选举和复制关系的建立。通过访问 Etcd 或使用 Patroni 提供的 REST API(如
http://<patroni_node_ip>:8008),可以查看集群的状态,包括当前主节点和从节点的信息。进行故障模拟测试,如停止主节点的 PostgreSQL 服务或 Patroni 进程,观察 Patroni 是否能够自动触发故障转移,成功选举出新的主节点,并确保整个集群的数据一致性和服务可用性。
三、总结与展望
通过以上对 PostgreSQL 单机部署以及集群部署模式的详细探讨,可以看出不同的部署方式适用于不同的应用场景和需求。单机部署简单直接,适合于小型应用或开发测试环境;而集群部署模式(如主从复制、Pgpool-II 高可用和 Patroni 高可用等)则能够满足高并发、高可用和数据冗余等企业级需求。在实际应用中,需要根据业务的特点、数据量大小、性能要求以及预算等因素,综合考虑选择合适的部署方案。随着云计算、容器化技术(如 Docker、Kubernetes 等)的不断发展,PostgreSQL 的部署方式也在不断创新和演进,未来可能会出现更多灵活、高效、易于管理和扩展的部署架构,为数据库的应用和发展提供更强大的支持。

相关文章:
PostgreSQL 部署全攻略:单机与集群模式详解
前言:在当今数字化浪潮中,数据已成为推动世界前行的核心力量。无论是企业决策、科学研究,还是日常生活的方方面面,数据的存储、管理和分析都扮演着至关重要的角色。而数据库作为数据的“守护者”和“管理者”,其重要性…...
代理模式的C++实现示例
核心思想 代理模式(Proxy Pattern)是一种结构型设计模式,其核心思想是为其他对象提供一个代理或占位符,以控制对这个对象的访问。代理对象通常会在客户端和目标对象之间起到中介作用,可以在不改变目标对象的情况下&am…...
【每日学点HarmonyOS Next知识】防止重复点击、对话框收拾拦截、自定义键盘焦点、页面层级、自定义对话框创建
1、HarmonyOS onClick点击事件,如何实现重复点击同一个按钮或toggle,两次间隔时间过短则失效,来防止重复点击? onClick点击事件,如何实现重复点击同一个按钮或toggle,两次间隔时间过短则失效,来…...
显示篇(2)- DRM A733 多显主副显绑定
通过hal层根据优先级绑定,优先级越高送显越靠前。(sdk默认mipi优先级最高为主显) 1.双显 如edp主mipi副,edp优先级搞。 更改如下 diff --git a/hwc-hal/drm/drmConnector.cpp b/hwc-hal/drm/drmConnector.cpp --- a/hwc-hal/d…...
mysql的Innodb最大支持的索引长度是多少,以及索引长度怎么计算
今天正好有空,来讲个之前粉丝经常问的一个知识,就是mysql的Innodb最大支持的索引长度是多少?以及索引长度怎么计算? 一、mysql的innodb引擎,创建索引最大支持的长度是多少字节? 不墨迹,直接说…...
Android Compose: `remember` 与 `ViewModel` 保存数据的优缺点对比
在开发 Android 应用时,管理 UI 状态是一个不可避免的话题。Jetpack Compose 提供了两种常见的方式来保存和管理数据:remember 和 ViewModel。它们各有优缺点,适用于不同的场景。 本文将详细对比这两者在保存数据时的优缺点,帮助…...
vue3+vite模式下修改pinia的stroe初始值不进行热HMR更新解析
原因: import { defineStore } from pinia interface CounterState {count: number;name: string; } export const useCounterStore defineStore(counter, {state: () > ({ count: 10, name: Eduardo }),getters: {doubleCount: (state:CounterState) > st…...
【一句话经验】ubuntu vi/vim 模式自动设置为paste
从centos过来,发现ubutun有些地方不习惯,尤其是vi的粘贴,默认自动进去了代码模式,导致每次粘贴必须得set paste,否则会出现问题。 解决办法非常简单,按照下面命令执行即可: cd ~ echo "…...
[杂学笔记] TCP和UDP的区别,对http接口解释 , Cookie和Session的区别 ,http和https的区别 , 智能指针 ,断点续传
文章目录 1. TCP和UDP的区别2. 对http接口解释3. Cookie和Session的区别4. http和https的区别5. 智能指针6.断点续传 1. TCP和UDP的区别 tcp的特点: 面向连接,可靠性高,全双工,面向字节流udp特点:无连接,不…...
训练大模型LLM选择哪种开发语言最好
训练大型语言模型(LLM)时,选择合适的编程语言主要取决于效率、生态支持、开发便利性以及特定需求(如性能优化或硬件适配)。以下是常见语言的分析和推荐: --- 1. Python(首选语言) 优…...
Jupyter Notebook 全平台安装与配置教程(附Python/Anaconda双方案)
一、软件定位与特性 Jupyter Notebook 是交互式编程与数据科学分析工具,支持 40 编程语言,其基于浏览器的「代码块可视化」工作流,已成为机器学习、数据清洗、学术研究的标准环境。核心优势包括: 实时执行代码片段并保存结果支持…...
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录
AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网:https://www.autodl.com/home 2.选择算力市场,找到需要的GPU: 我这里选择3090显卡 3.这里我们就选择P…...
【Java篇】行云流水,似风分岔:编程结构中的自然法则
文章目录 Java 程序逻辑控制:顺序、分支与循环结构全面解析一、顺序结构二、分支结构2.1 if 语句2.1.1 基本语法2.1.2 if-else 语句2.1.3 if-else if-else 语句 2.2 switch 语句 三、循环结构3.1 while 循环3.2 break 语句3.3 continue 语句3.4 for 循环 四、输入输…...
2.4 基于Vitest的单元测试基础设施搭建
文章目录 1. 现代单元测试体系解析测试金字塔演进Vitest核心定位2. 基础设施架构设计整体架构图3. 环境配置全流程3.1 基础环境搭建3.2 配置文件`vitest.config.ts`3.3 测试环境初始化4. 测试用例编写规范4.1 基础测试示例4.2 Vue组件测试4.3 异步逻辑测试5. Mock策略深度优化5…...
SqlSugar 进阶之原生Sql操作与存储过程写法 【ORM框架】
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、前言 🍃二、用法介绍三、方法列表四、使用案例五、调用存储过程六、in参数用法七、SqlServer带Go的脚…...
Navicat Premium(数据库管理工具) v17.1.13 中文 Windows
介绍 Navicat Premium 是一款多功能的数据库管理工具,可以连接并管理主流的数据库系统,如MySQL、PostgreSQL、Oracle、SQL Server等。它提供了丰富的功能和强大的工具,可以帮助用户轻松地管理数据库,进行数据导入导出、查询、备份…...
IDEA(十一)调整新版本的工具栏显示Git操作(pull、commit、push、revert等)
目录 一、背景二、操作步骤2.1 开启新 UI 样式2.2 设置 Tool Window 工具栏 一、背景 好久没有更新 IDEA 了,更新之后发现 IDEA 的工具栏消失了。一番操作之后,终于把 IDEA 的工具栏的设置调整好了,在此进行记录调整步骤,供大家学…...
QoS质量配置
他们祝你挺拔,再挺拔一点;我只祝你,永远年少,永远一骑当先. 1. QoS的概念 QoS(服务质量)是指一个网络能够利用各种各样的基础技术向选定的网络通信提供更好 的服务的能力。这些基础技术包括:帧中继(FrameR…...
2024年群智能SCI1区TOP:混沌可行性恢复粒子群算法CEPSO,深度解析+性能实测
目录 1.摘要2.改进策略3.结果展示4.参考文献5.代码获取 1.摘要 本文研究了解决二阶段非线性固定费用运输问题(Two-stage NFCTP),该问题的特点是每条运输弧线都与固定费用和与运输量的平方成正比的变量费用相关联。由于涉及固定费用和非线性组…...
ORACLE EBS数据库RELINK方式搭建克隆环境
ORACLE EBS系统的数据库,一般都安装了很多特定功能的小补丁来解决特定的BUG;因此对于已经安装好的系统,想要克隆一套测试环境、搭建一个新的备机做测试等,如果按照生产环境标准,则需要安装大量补丁,带来很大…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
