硬件规划:数据库服务器的网络、主板与机箱选择
立即解锁
发布时间: 2025-08-21 02:22:59 订阅数: 5 


PostgreSQL高可用性架构与优化实践
### 硬件规划:数据库服务器的网络、主板与机箱选择
#### 1. 网络规划
在数据库服务器的运行中,网络起着至关重要的作用。尽管大部分后台流量与 PostgreSQL 无直接关联,但一个处理不当的网络数据包就可能使整个服务器对外不可见,甚至导致系统崩溃。繁忙的数据库服务器网卡每天要处理数 TB 的流量,硬件容错率极低。同时,激进的备份策略很容易使网络带宽饱和,而这对于高可用性数据库又十分关键。
当前高速网络标准有 1 Gb/s、10 Gb/s、40 Gb/s 和 100 Gb/s 以太网,但 40 Gb/s 网卡极为罕见,100 Gb/s 通常用于光纤交换机和数据中心。因此,主要考虑 1 Gb/s 和 10 Gb/s 网络接口。
##### 1.1 基本计算
先进行一些基本计算,考虑开销后接口速度估算如下:
- \(1000 Mb/s * B/10 b = 100 MB/s\)
- \(10,000 Mb/s * B/10 b = 1,000 MB/s\)
##### 1.2 不同情况的带宽计算
- **已有 PostgreSQL 配置**:
1. 执行以下查询确定现有副本数量:
```sql
SELECT count(1)+1 AS streams
FROM pg_stat_replication;
```
2. 将 `streams` 乘以 160,得到复制流所需的最大 MB/s。
3. 在生产数据库繁忙时段,在 `psql` 连接中一起执行以下查询:
```sql
SELECT SUM(pg_stat_get_db_tuples_fetched(oid)) AS count1
FROM pg_database;
SELECT pg_sleep(1);
SELECT SUM(pg_stat_get_db_tuples_fetched(oid)) AS count2
FROM pg_database;
```
4. 用 `count2` 减去 `count1` 的结果,得到每秒从数据库获取的行数。
5. 将每秒行数除以 10,000,得到 PostgreSQL 连接使用的 MB/s。
6. 将复制流的 MB/s 与连接的 MB/s 相加。
- **无现有数据库**:
1. 将所需的 PostgreSQL 副本数量乘以 160,得到复制流所需的最大 MB/s。
2. 假设为异地灾难恢复数据库副本设置一个 WAL 流。
3. 至少设置一个实时热流备用副本。
4. 包括任何额外的数据库镜像。
5. 估算活动客户端数量。
6. 将活动客户端数量估算值乘以 5,得到 PostgreSQL 连接使用的 MB/s。
7. 将复制流的 MB/s 与连接的 MB/s 相加。
无论采用哪种方法,最终结果都应乘以 2,以考虑未知的维护、备份和文件系统同步开销。
##### 1.3 网络示例
假设有一个非常活跃的数据库,有一个流式副本和一个异地存档,连接的客户端每秒定期获取 500 万行。计算如下:
0
0
复制全文
相关推荐










