pg集群方案设计

pg集群一般由以下8个场景:

1) 2个pg服务器共享一块数据盘:只有主服务器挂载,主备倒换时当前主服务器降为备服务器卸载数据盘,当前备服务器升为主服务器挂载数据盘。

2) 2个pg服务器共享一个网络文件系统NFS:只有主服务器挂载,主备倒换时当前主服务器降为备服务器卸载NFS,当前备服务器升为主服务器挂载NFS。

以上场景的好处是不用同步数据,坏处也很明显是一旦磁盘坏了将无法修复。对外的服务只能由其中一台服务器提供。

3) 2个pg服务器各自有一个数据盘(块设备复制如drbd):主服务器备服务器都挂载,通过块设备复制(drbd)实现两服务器间数据同步。主备倒换时,当前主服务器降为备服务器同时pg不能往数据盘里写数据但可以读,当前备服务器升为主服务器同时pg可以往数据盘里写和读数据。

相对1) 和2)来说,3)克服了单边磁盘文件损坏的可能性。对外提供的服务可以由其中一台服务器提供,也可以设置为主服务器负责读写数据和备服务器负责读数据。

4) 3个pg服务器组成共享型镜像双机,考虑异地容灾场景下,将方案1)和3)组合起来的一种方案。本地2个pg服务器共享一个数据盘,异地pg服务器有一个数据盘,本地和异地数据盘间通过块设备复制进行数据同步,一旦发生地震等灾难时可以切换到异地pg上。

说到方案4) 异地容灾不得说下方案3)也可以在本地和异地的DC上组成简单的容灾局,也 可以在本地同一个DC上。

考虑网络稳定和带宽问题,方案4)和方案3)在异地容灾场景下的数据同步应该是异地的,如果同步方式要等到异地写数据到磁盘将导致本地业务性能很差。方案3)做异地容灾也不推荐,主要是在本地同一个DC上,考虑到数据安全性,这个场景下的数据同步配置为同步方式更加稳妥。

方案4) 高可用方面,本地2个pg可以自动倒换,是否自动倒换到异地要根据实际项目来考虑,一般情况下也不建议倒换到异地。

注意方案3)倒换到对端和方案4)倒换到异地的前提是数据同步过去了,否则就一直等数据同步成功,最好是csm集群管理系统能自动判断是否同步成功。

5) 2个pg服务器各自有一个数据盘(主备预写wal日志或流复制):主服务器备服务器都挂载,通过流复制实现两服务器间数据同步。主备倒换时,当前主服务器降为备服务器同时pg不能往数据盘里写数据但可以读,当前备服务器升为主服务器同时pg可以往数据盘里写和读数据。

但2节点有个弊端容易双主,需要考虑加入仲裁机制。

6) 3或5或奇数个pg服务器各自有一个数据盘(主备预写wal日志或流复制):主服务器备服务器都挂载,通过流复制实现奇数个服务器间数据同步。主备倒换时,当前主服务器降为备服务器同时pg不能往数据盘里写数据但可以读,当前其中一个备服务器升为主服务器同时pg可以往数据盘里写和读数据。

方案6) 更加灵活,写只在主服务器,根据读的性能压力要求来设置备服务器的个数。但要保证主服务器和备服务器间的数据一致性,当用户提交完数据,查到的数据还是提交前的,这是很严重的。

奇数个服务器由一主多备组成,只要大于一半以上就可以组成集群,也有一半以上才可以对外提供服务。

方案5)和方案6)中,能修改数据的服务器被称为读/写、主控或主要服务器。跟踪主控机中改变的服务器被称为后备或第二服务器。如果一台后备服务器只有被提升为一台主控服务器后才能被连接,它被称为一台温后备服务器,而一台能够接受连接并且提供只读查询的后备服务器被称为一台 热后备服务器。温备和热备服务器能够通过读取一个预写日志(WAL)记录的流来保持为当前状态。如果主服务器失效, 后备服务器拥有主服务器的几乎所有数据, 并且能够快速地被变成新的主数据库服务器。预写日志记录流可以是同步的也可以是异步的, 并且只能用于整个数据库服务器。

方案5)和方案6) 中主-备复制设置会把所有数据修改查询发送到主服务器。 主服务器异步地将数据修改发送给后备服务器。当主服务器正在运行时, 后备服务器可以回答只读查询。

7) 3或5或奇数个pg服务器各自有一个数据盘(分布式:同步多主控复制):

8) 3或5或奇数个pg服务器各自有一个数据盘(分布式:异步多主控复制)

方案7)和方案8) 中多主控间是负载均衡的,一旦某个主服务器异常,某个备转为主服务器,该主服务器应该和API网关断开连接以免被重新分配调用。多主控不仅可以写还有读数据,一旦某个主服务器收到写数据,需要及时同步到其他服务器。pg逻辑复制支持某个表数据的同步,允许数据库服务器将数据修改流发送到另一台服务器即从WAL构造一个逻辑数据修改流。逻辑复制不需要将特定服务器指定为主服务器或副本, 但允许数据在多个方向上流动。


以上的集群场景是要有集群系统管理CSM来管理集群的。

你可能感兴趣的:(pg集群方案设计)