PostgreSQL 复制、高可用性 HA 和可扩展性
通过主从复制、PgBouncer、PgPool II、HAProxy、分区、分片扩展 Postgres 的解决方案
讲师:Lucian Oprea
口袋资源独家Udemy付费课程,独家中英文字幕,配套资料齐全!
用不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。
你将学到什么
- 评估您的扩展需求
- 如何使用复制和负载平衡扩展读取
- 对于特定用例来说,哪一个是最佳的复制解决方案
- 如何使用 PgBouncer 连接池管理数据库连接
- 如何在云中使用多个 PostgreSQL 实例 (Google Cloud)
- 如何实现高可用
- 如何使用 PgPool II 执行自动故障转移
- 如何使用分区和分片扩展写入
要求
- 您需要访问具有 10GB 可用磁盘空间的 Windows/Mac/Linux PC
- 期望对数据库对象(例如表和索引)有基本的熟悉
- 熟悉 Linux 会有帮助
描述
PostgreSQL 是最强大且易于使用的数据库管理系统之一。它得到了社区的大力支持,并且每年都在积极开发新版本。
PostgreSQL 支持 SQL 标准中包含的最高级功能。它还提供NoSQL功能以及非常丰富的数据类型和扩展。所有这些使得 PostgreSQL 成为软件系统中非常有吸引力的解决方案。
在本课程中,我们讨论了利用多台服务器的资源构建基于 PostgreSQL 的可扩展解决方案的问题。此类系统有一个天然的限制——基本上,性能、可靠性和一致性之间总是存在折衷。改善某一方面是可能的,但其他方面会受到影响。在本课程中,我们将了解如何找到最适合我们的用例的匹配项,以便我们准确地知道哪些方面需要扩展,并避免分布式系统的常见权衡。
扩展 PostgreSQL 是一个旅程。完成本课程后,您应该为评估您的扩展需求做好更充分的准备,并了解如何扩展读取和如何扩展写入。
本课程中提出的每个解决方案都将改进可扩展性主题的某些方面,但每个解决方案都会增加一些复杂性,并且可能会增加一些限制或约束。
我们必须提出正确的问题才能满足系统要求,这就是为什么我们专门进行了整个讲座,以便在开始扩展之旅之前检查我们必须提出哪些问题。
完成本课程后,我们应该做好更充分的准备并了解如何扩展阅读量。
我们有多种复制选项,具体取决于我们更喜欢性能还是灵活性。
复制可以用作备份或备用解决方案,在主服务器崩溃时接管。
复制还可以通过将负载分布到多个数据库服务器上来提高软件系统的性能。
然后,如果我们有一种复制,我们可以问自己是否要允许多台计算机提供相同的数据。
为了实现这一点,我们应该有一个分发请求的机制。我们将在这里看到两个最受欢迎的选项。
接下来,如果数据库连接的数量很大,那么我们可能需要使用连接池。同样,我们将在这里介绍两个选项。
我们还将了解如何扩展写入,以及如何通过向架构添加队列来使流量增长更加可预测。
然后,当我们必须处理大表时,我们将检查这些情况的分区。
此外,我们还将检查分片以扩展写入,以及随之而来的所有复杂决策。
最后,我们很快就会看到多主解决方案,这是一个相对较新的概念,似乎很有前途。
如果我们的目标只是实现高可用性,或者即使在集群的一部分发生故障的情况下也能继续工作,那么我们只能检查这些解决方案。
HA 的先决条件是制定复制策略。
然后,如果主服务器出现故障,我们可以使用工具让第二台服务器快速接管。
扩展 PostgreSQL 简介
- 为什么要扩展 PostgreSQL?
- 什么是垂直缩放?
- 什么是水平缩放?
- 读取与写入绑定工作负载
- 为什么统计至关重要?
- 如何启用和利用统计?(动手操作)
- 如何扩展 Postgres 以进行读取?
- 复制如何帮助横向扩展?
- 什么是负载均衡器?
- 如何扩展 Postgres 以进行写入?
- 如何使用队列?
- 分区和分片如何帮助扩展?
- 多主解决方案是什么?
了解横向扩展 PostgreSQL 的局限性
- CAP 定理解释
- PostgreSQL 与 Cassandra
- 使用案例:CA 系统
- 使用案例:AP 系统
如何使用流式复制?
- 什么是流式复制?
- 异步复制与同步复制
- 如何初始化主数据库?(动手操作)
- 如何配置主服务器进行复制?(动手操作)
- 如何配置副本实例?(动手操作)
- 测试复制设置(实践)
如何使用逻辑复制?
- Postgres 中的逻辑复制是什么?
- 逐步逻辑复制设置
- 如何设置逻辑复制服务器?(动手操作)
- 如何选择性地复制数据?(动手操作)
- 如何创建出版物?(动手操作)
- 如何创建订阅?(动手操作)
- Postgres 逻辑复制的限制
- 如何监控逻辑复制?(动手操作)
- 使用逻辑复制的最佳用例
如何使用PgBouncer?
- 什么是 PgBouncer?
- 连接池的基本概念
- 如何构建 PgBouncer 设置?(动手操作)
- 如何安装和配置PgBouncer?(动手操作)
- 如何为 PgBouncer 创建基本配置文件?(动手操作)
- 如何连接到 PgBouncer?(动手操作)
- 解释性能的高级设置
- 有哪些可用的池模式?
- 使用 PgBouncer 执行基准测试(实践)
如何在 Google Cloud 中扩展 PostgreSQL?
- 介绍
- Google Cloud 上的关键组件
- 该架构的主要特征
- 如何在 Google Cloud 上创建 PostgreSQL 实例?(动手操作)
- 如何为 HAProxy 创建 Google Cloud Engine (GCE)?(动手操作)
- 如何配置 HAProxy 进行负载均衡?(动手操作)
- 测试负载平衡
如何使用 PostgreSQL 分区?
- 什么是分区?
- 哪些表需要分区?
- 表应该如何分区?
- 声明式分区与继承式分区
- 如何创建分区表?(动手操作)
- 分区方法
如何对 PostgreSQL 进行分片?
- 什么是分片?
- 分片的痛点?
- 什么是二级分片?
- 什么是好的分片?
- 如何跨多个Shard查询?
如何在 PostgreSQL 上设置高可用性 (HA)?
- 为什么要高可用性?
- 实现高可用性的步骤
- 设置高可用性之前要问的基本问题
- 日志传送复制
- 流复制和逻辑复制
- 级联复制
- 同步与异步复制
- 自动故障转移和永远在线策略
- 简单HA解决方案示例
- 更好的 HA 解决方案示例
如何使用PgPool II?
- 什么是 PgPool II?
- Pgpool-II 特点
- 如何使用流复制配置 Pgpool-II?(动手操作)
- 如何设置流复制?(动手操作)
- 如何配置 Pgpool-II 进行负载平衡?(动手操作)
- 测试负载平衡和读/写分离(实践)
- 如何配置 Pgpool 以获得 PostgreSQL 高可用性?(动手操作)
- 如何配置 PostgreSQL 主服务器?(动手操作)
- 如何配置 Pgpool-II 服务器?(动手操作)
- 如何配置 PostgreSQL 副本服务器?(动手操作)
- 测试故障转移(实践)
- 如何恢复故障节点?(动手操作)
本课程适合谁:
- 有兴趣在 PostgreSQL 上设计可扩展和高可用性解决方案的软件工程师
- 数据库管理员
- 每个有兴趣构建更好的 PostgreSQL 应用程序的人