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;因此对于已经安装好的系统,想要克隆一套测试环境、搭建一个新的备机做测试等,如果按照生产环境标准,则需要安装大量补丁,带来很大…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...