CN104503965B - PostgreSQL高弹性的高可用及负载均衡实现方法 - Google Patents

PostgreSQL高弹性的高可用及负载均衡实现方法 Download PDF

Info

Publication number
CN104503965B
CN104503965B CN201410548447.2A CN201410548447A CN104503965B CN 104503965 B CN104503965 B CN 104503965B CN 201410548447 A CN201410548447 A CN 201410548447A CN 104503965 B CN104503965 B CN 104503965B
Authority
CN
China
Prior art keywords
database
node
mirror
host node
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410548447.2A
Other languages
English (en)
Other versions
CN104503965A (zh
Inventor
周正中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu dayifei Software Technology Co.,Ltd.
Original Assignee
HANGZHOU SKY-MOBI TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by HANGZHOU SKY-MOBI TECHNOLOGY Co Ltd filed Critical HANGZHOU SKY-MOBI TECHNOLOGY Co Ltd
Priority to CN201410548447.2A priority Critical patent/CN104503965B/zh
Publication of CN104503965A publication Critical patent/CN104503965A/zh
Application granted granted Critical
Publication of CN104503965B publication Critical patent/CN104503965B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers

Abstract

本发明公开了一种PostgreSQL高弹性的高可用及负载均衡实现方法。属于数据库技术领域,该方法实现了数据库层面完全无单点故障的风险.并且在连接层面使用会话保持来解决应用感知的问题,还实现了对应用完全透明的高可用failover。连接池和应用程序建立的TCP连接不受failover影响,因此这个会话不会中断。连接池和数据库的连接断开后自动连接。业务层在切换期间的会话自动回滚。在连接池或驱动层配置好多个对应的后端数据库连接,根据配置的算法,数据插入的SQL自动分发到后端数据库以实现负载均衡。当后端数据库无响应时,自动分发到下一个候选连接,以实现failover。

Description

PostgreSQL高弹性的高可用及负载均衡实现方法
技术领域
本发明涉及数据库技术领域,尤其涉及一种PostgreSQL高弹性的高可用及负载均衡实现方法。
背景技术
在大型的业务系统中,数据库一般处于比较核心的地位,例如涉及用户信息,用户账户信息,用户行为信息的存储。用户或用户之间信息的交互都需要数据库的支持,数据库故障将导致核心业务系统故障。数据库的不间断运行成为业务系统稳定性的关键因素。
传统数据库高可用方法有两种应用场景:
第一种应用场景是利用存储设备的复制功能来实现高可用。参见图6所示,把一个数据库存储设备中的数据采用存储复制的方式复制到另一个数据库存储设备中去,App1或者Appn访问虚拟IP,通过failover决定虚拟IP是通过数据库活动实例1来访问一个数据库,还是通过数据库非活动实例n来访问另一个数据库。这种方法的缺陷是:(1)数据库的特征受制于硬件存储设备,需要存储硬件厂商结合数据库的特征设计,无法支持所有数据库,在没有经过厂商认证的数据库品牌冒然使用,可能导致数据一致性问题或数据块损坏问题;(2)成本高,存在高昂的软件许可成本和硬件成本;(3)存储层面的同步无法和应用结合,无法实现同步或异步的同步,如果是同步复制,那么将增加故障点,同时带来性能损失;如果是异步复制则会增加丢失数据的风险。
第二种应用场景是利用共享存储和高可用软件实现,参见图7所示,App1或者Appn访问虚拟IP,通过failover决定虚拟IP是通过数据库活动实例1来访问数据库共享存储中的数据,还是通过数据库非活动实例n来访问数据库共享存储中的数据。这种方法基本上适用于所有的数据库产品,这种方法有几个缺陷:(1)成本高,需要支付高昂的存储硬件和高可用软件费用;(2)依赖存储设备的高可用,如果存储故障则使得数据库高可用失效,存在单点故障;(3)数据库主机切换时会中断网络层会话,无法实现应用无感知。
发明内容
本发明是为了解决现有数据库在数据库层存在单点故障风险,在连接层面存在应用感知的问题,对failover的应用不透明的这些不足,提供一种PostgreSQL高弹性的高可用及负载均衡实现方法,该方法实现了数据库层面完全无单点故障的风险.并且在连接层面使用会话保持来解决应用感知的问题,还实现了对应用完全透明的高可用failover。
为了实现上述目的,本发明采用以下技术方案:
PostgreSQL高弹性的高可用及负载均衡实现方法,包括:读写混合场景实现方法和写场景实现方法;
(1)读写混合场景实现方法步骤如下:
(1.1)准备3台服务器,其中2台服务器分别用于数据库主节点和数据库镜像节点,另1台服务器用于仲裁节点;
(1.2)分别将数据库主节点服务器的主机、数据库镜像节点服务器的主机和仲裁节点服务器的主机配置在同一个网段,并设数据库主节点为node1,设数据库镜像节点为node2,设数据库的一个虚拟IP为虚拟IP1,设数据库的另一个虚拟IP为虚拟IP2,设仲裁节点为VOTE_HOST;
(1.3)配置数据库主节点和数据库镜像节点的FENCE设备,为了防止发生脑裂现象,让FENCE设备在自动failover前关闭服务器;
(1.4)配置数据库主节点和数据库镜像节点的网络,编写虚拟IP配置文件;还关闭network服务的自动启动节点node1和node2;并增加该自动启动节点node1和node2的network服务启动项到rc.local。
(1.5)在数据库主节点和数据库镜像节点安装PostgreSQL数据库软件;
(1.6)在数据库主节点初始化数据库;
(1.7)在数据库主节点配置数据库访问控制配置文件pg_hba.conf、postgresql.conf和recovery.conf,这三个数据库访问控制配置文件都用于数据库复制、启动数据库、创建流复制用户和启动虚拟IP;
(1.8)创建镜像数据库,配置数据库镜像节点流复制环境,并启动镜像虚拟IP;
(1.9)配置仲裁节点,设置用于仲裁网络异常的数据库监听端口,即配置仲裁机,在仲裁机上起一个监听端口,用于跳转到虚拟IP的PostgreSQL主库监听端口;
(1.10)在数据库主节点创建心跳检查函数,数据库主节点的变更将自动复制到数据库镜像节点;
(1.11)编写心跳检查软件和仲裁节点检查软件,并把心跳检查软件部署在数据库主节点和数据库镜像节点,把仲裁节点检查软件部署在仲裁节点,用于自动failover;
(1.12)开启用于自动failover的心跳检查软件;
(1.13)配置组件监控检查,所述组件包括用于负责心跳检测和故障时激活镜像以及切换虚拟IP的HA切换软件,所述组件还包括用于读写负载均衡和客户端会话保持连接池的中间件,所述组件还包括用于数据库主节点IP读写连接和数据库镜像节点IP读连接的虚拟IP,所述组件还包括用于投票解决单边网络故障的仲裁节点,所述组件还包括用于解决脑裂问题的FENCE设备,所述组件还包括用于负责读写的数据库主节点和从数据库主节点获取实时增量同步且只负责读的数据库镜像节点;
所述HA切换软件的实现过程是:
(1.13.1)启动,判断主节点是否正常;
(1.13.2)如果主节点不正常则结束,如果主节点正常则判断本地节点角色是否为镜像节点;
(1.13.3)如果本地节点不是镜像节点则结束,如果本地节点为镜像节点则计数清零,并检查主节点状态;
(1.13.4)如果主节点状态健康则结束,如果主节点状态不健康则检查仲裁节点状态;
(1.13.5)如果仲裁节点状态不健康则再次进行计数清零,如果仲裁节点状态健康则从仲裁节点检查主节点状态;
(1.13.6)如果从仲裁节点检查主节点状态为健康状态则再次进行计数清零,如果从仲裁节点检查主节点状态为不健康状态则进行主节点累计异常次数自增计数,然后进行主节点连接异常次数判断1;
(1.13.7)如果主节点连接异常次数判断1是第一次时则检查镜像节点延迟是否正常,如果主节点连接异常次数判断1不是第一次时则进行主节点连接异常次数判断2;
(1.13.8)如果检查镜像节点延迟为不正常则再次进行计数清零,如果检查镜像节点延迟为正常则生成镜像节点健康状态标记,然后则进行主节点连接异常次数判断2;
(1.13.9)如果主节点连接异常次数判断2的异常次数未达到阈值则再次进行计数清零,如果主节点连接异常次数判断2的异常次数达到阈值则检查镜像节点状态标记;
(1.13.10)如果检查镜像节点状态标记为正常则激活镜像、切换虚拟IP和生成切换标记,并在激活镜像、切换虚拟IP和生成切换标记后结束;如果检查镜像节点状态标记为不正常则生成主节点不健康标签和不发生切换,在生成主节点不健康标签和不发生切换后结束;
(1.14)配置用于读写分离的连接池;所述读写分离的实现过程是:APP提交SQL来判断SQL是读还是写,如果判断SQL是写则分发给主节点,如果判断SQL是读则分发给镜像节点;
(1.15)人为的switchover测试,关闭数据库主节点,关闭虚拟IP1,激活数据库镜像节点数据库,数据库镜像节点数据库recovery.conf自动修改为recovery.done,切换为主角色,在数据库镜像节点启动虚拟IP1,数据库主节点recovery.done改为recover.conf,启动数据库主节点,角色切换为镜像角色;
(1.16)通过拔数据库主节点网线,或者关闭数据库主节点,或者关闭数据库主节点服务器,或者关闭数据库主节点网卡来自动进行failover测试;
(1.17)当failover发生时,数据库镜像节点自动切换为数据库主节点,同时虚拟IP1自动在数据库镜像节点开启;
(2)写场景实现方法步骤如下:
(2.1)准备至少2台用于安装数据库的主机;
(2.2)在每台主机上安装数据库软件;
(2.3)在每台主机执行初始化数据库操作,并配置数据库监听端口;
(2.4)在每台主机创建同样的SCHEMA、用户、密码;
(2.5)在每台主机创建同样的业务表和约束;
(2.6)配置DNS,使主机名对应多个数据库主机的IP,同时配置监控,当数据库节点发生变更时实时更新DNS条目;
(2.7)配置连接池或驱动来实现写负载均衡以及HA;所述写负载均衡以及HA的实现过程是:APP提交SQL,由SQL分发策略采用写的方式分发给节点1,分发给节点1后判断分发是否成功,如果分发成功则分发完成,如果分发不成功则SQL分发策略尝试分发给下一个节点,直到分发成功为止则实现分发完成作业;
(2.8)应用软件通过pgbouncer连接数据库,DNS策略配置为round-robin模式,当新建连接时,轮询的选择DNS解析出来的IP,从而POOLSERVER分布在不同的后端数据库,实现负载均衡。
本方案对于读写混合场景是,利用PostgreSQL数据库实时流复制实现双份数据库镜像,解决依赖存储的高可用的问题。自定义的数据库心跳和切换逻辑实现数据库failover,解决购买商业高可用软件的问题。使用仲裁和fence设备解决脑分裂问题。使用连接池会话层保持解决应用感知问题。连接池可部署多个,不存在单点故障。同时连接池可实现读写分离。同步和异步完全由事务决定,程序如果发起同步事务,则事务必须到达镜像节点后才提交完成;如果是异步事务,则事务到达主节点后就可以提交;解决了重要事务绝对不丢失,不重要事务选择异步则减少性能损失;实现了弹性控制。对镜像节点的延迟监控,如果发现镜像延迟达到阈值,告警。为防止数据丢失,在镜像延迟超过阈值时不会发生切换。本方案对于写场景是,记录用户行为数据;使用完全独立的两套硬件,创建相同的SCHEMA,实现写负载均衡;在连接池或驱动层实现高可用,负载均衡,解决了连接层单点。当主库数据库本身或数据库所在的硬件,或者存储故障,或者存储空间不足等问题发生时,数据库心跳检测程序将检测到问题,使用fence设备截断主库与外界的联系,然后激活主库镜像并切换IP。连接池和应用程序建立的TCP连接不受failover影响,因此这个会话不会中断。连接池和数据库的连接断开后自动连接。业务层在切换期间的会话自动回滚。在连接池或驱动层配置好多个对应的后端数据库连接,根据配置的算法,数据插入的SQL自动分发到后端数据库以实现负载均衡。当后端数据库无响应时,自动分发到下一个候选连接,以实现failover。
作为优选,在步骤(1.3)中,为避免FENCE慢或者FENCE不成功,还需要关闭数据库服务器操作系统的acpi服务,同时开启idrac的ipmi功能,并给用户赋予ipmi可开关机的OPERATOR角色。
作为优选,在步骤(1.4)中,还关闭network服务的自动启动节点node1和node2;并增加该自动启动节点node1和node2的network服务启动项到rc.local。
作为优选,在步骤(1.7)中,在数据库主节点和数据库镜像节点配置流复制密码文件;在数据库主节点启动数据库,添加replication数据库角色;在数据库主节点启动虚拟IP;在数据库主节点配置数据库访问控制文件pg_hba.conf,为了在集群脚本中要用到更新sky_pg_cluster数据库的表,则需要允许主节点、镜像节点、虚拟IP和仲裁节点以及回环地址通过sky_pg_cluster用户访问sky_pg_cluster数据库。
作为优选,在步骤(1.10)中,插入初始数据,创建测试函数,用于测试数据库是否正常,包括所有表空间的测试,使用update不同的表空间中的数据,并不能立刻反映表空间的问题;因为大多数数据在shared_buffer中,如果表空间对应的文件系统io有问题,那么在checkpoint时会产生58类的错误,使用pg_stat_file函数来立刻暴露io的问题。
作为优选,在步骤(1.11)中,配置心跳需要的密码文件,集群failover软件的sky_pg_clusterd.sh将用这个密码文件分别用于访问虚拟IP上的PostgreSQL监听端口、本机standby的PostgreSQL监听端口和VOTE_HOST上的跳转端口。
本发明能够达到如下效果:
1、本发明与传统方法相比,本发明实现了数据库层面完全无单点故障的风险,并且在连接层面使用会话保持来解决应用感知的问题,实现对应用完全透明的高可用failover。
2、在本发明的方法中,当主库数据库本身或数据库所在的硬件,或者存储故障,或者存储空间不足等问题发生时,数据库心跳检测程序将检测到问题,使用fence设备截断主库与外界的联系,然后激活主库镜像并切换IP。
3、在本发明的方法中,连接池和应用程序建立的TCP连接不受failover影响,因此这个会话不会中断。连接池和数据库的连接断开后自动连接。业务层在切换期间的会话自动回滚。
4、本发明的方法中,在连接池或驱动层配置好多个对应的后端数据库连接,根据配置的算法,数据插入的SQL自动分发到后端数据库以实现负载均衡。当后端数据库无响应时,自动分发到下一个候选连接,以实现failover。
附图说明
图1是本发明读写混合场景的一种架构原理示意图。
图2是本发明写场景的一种架构原理示意图。
图3是本发明HA切换软件实现的一种逻辑流程原理示意图。
图4是本发明读写分离的一种逻辑流程原理示意图。
图5是本发明写负载均衡以及HA的一种逻辑流程原理示意图。
图6是本现有技术使用存储硬件复制构建的数据库HA系统的一种架构原理示意图。
图7是本现有技术使用共享存储构建的数据库HA系统的一种架构原理示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。实例一:PostgreSQL高弹性的高可用及负载均衡实现方法,参见图1、图2所示,读写混合场景实现方法和写场景实现方法。
(1)读写混合场景实现方法步骤如下:
(1.1)准备3台服务器,其中2台服务器分别用于数据库主节点和数据库镜像节点,另1台服务器用于仲裁节点。
(1.2)分别将数据库主节点服务器的主机、数据库镜像节点服务器的主机和仲裁节点服务器的主机配置在同一个网段,并设数据库主节点为node1,设数据库镜像节点为node2,设数据库的一个虚拟IP为虚拟IP1,设数据库的另一个虚拟IP为虚拟IP2,设仲裁节点为VOTE_HOST。
(1.3)配置数据库主节点和数据库镜像节点的FENCE设备,为了防止发生脑裂现象,让FENCE设备在自动failover前关闭服务器。为避免FENCE慢或者FENCE不成功,还需要关闭数据库服务器操作系统的acpi服务,同时开启idrac的ipmi功能,并给用户赋予ipmi可开关机的OPERATOR角色。
(1.4)配置数据库主节点和数据库镜像节点的网络,编写虚拟IP配置文件。
(1.5)在数据库主节点和数据库镜像节点安装PostgreSQL数据库软件。
(1.6)在数据库主节点初始化数据库。
(1.7)在数据库主节点配置数据库访问控制配置文件pg_hba.conf、postgresql.conf和recovery.conf,这三个数据库访问控制配置文件都用于数据库复制、启动数据库、创建流复制用户和启动虚拟IP;在数据库主节点和数据库镜像节点配置流复制密码文件。在数据库主节点启动数据库,添加replication数据库角色。在数据库主节点启动虚拟IP。在数据库主节点配置数据库访问控制文件pg_hba.conf,为了在集群脚本中要用到更新sky_pg_cluster数据库的表,则需要允许主节点、镜像节点、虚拟IP和仲裁节点以及回环地址通过sky_pg_cluster用户访问sky_pg_cluster数据库。
(1.8)创建镜像数据库,配置数据库镜像节点流复制环境,并启动镜像虚拟IP。
(1.9)配置仲裁节点,设置用于仲裁网络异常的数据库监听端口,即配置仲裁机,在仲裁机上起一个监听端口,用于跳转到虚拟IP的PostgreSQL主库监听端口。
(1.10)在数据库主节点创建心跳检查函数,数据库主节点的变更将自动复制到数据库镜像节点。插入初始数据,创建测试函数,用于测试数据库是否正常,包括所有表空间的测试,使用update不同的表空间中的数据,并不能立刻反映表空间的问题;因为大多数数据在shared_buffer中,如果表空间对应的文件系统io有问题,那么在checkpoint时会产生58类的错误,使用pg_stat_file函数来立刻暴露io的问题。
(1.11)编写心跳检查软件和仲裁节点检查软件,并把心跳检查软件部署在数据库主节点和数据库镜像节点,把仲裁节点检查软件部署在仲裁节点,用于自动failover。配置心跳需要的密码文件,集群failover软件的sky_pg_clusterd.sh将用这个密码文件分别用于访问虚拟IP上的PostgreSQL监听端口、本机standby的PostgreSQL监听端口和VOTE_HOST上的跳转端口。
(1.12)开启用于自动failover的心跳检查软件。
(1.13)配置组件监控检查,所述组件包括用于负责心跳检测和故障时激活镜像以及切换虚拟IP的HA切换软件,所述组件还包括用于读写负载均衡和客户端会话保持连接池的中间件,所述组件还包括用于数据库主节点IP读写连接和数据库镜像节点IP读连接的虚拟IP,所述组件还包括用于投票解决单边网络故障的仲裁节点,所述组件还包括用于解决脑裂问题的FENCE设备,所述组件还包括用于负责读写的数据库主节点和从数据库主节点获取实时增量同步且只负责读的数据库镜像节点。
所述HA切换软件的实现过程是:参见图3所示,
(1.13.1)启动,判断主节点是否正常。
(1.13.2)如果主节点不正常则结束,如果主节点正常则判断本地节点角色是否为镜像节点。
(1.13.3)如果本地节点不是镜像节点则结束,如果本地节点为镜像节点则计数清零,并检查主节点状态。
(1.13.4)如果主节点状态健康则结束,如果主节点状态不健康则检查仲裁节点状态。
(1.13.5)如果仲裁节点状态不健康则再次进行计数清零,如果仲裁节点状态健康则从仲裁节点检查主节点状态。
(1.13.6)如果从仲裁节点检查主节点状态为健康状态则再次进行计数清零,如果从仲裁节点检查主节点状态为不健康状态则进行主节点累计异常次数自增计数,然后进行主节点连接异常次数判断1。
(1.13.7)如果主节点连接异常次数判断1是第一次时则检查镜像节点延迟是否正常,如果主节点连接异常次数判断1不是第一次时则进行主节点连接异常次数判断2。
(1.13.8)如果检查镜像节点延迟为不正常则再次进行计数清零,如果检查镜像节点延迟为正常则生成镜像节点健康状态标记,然后则进行主节点连接异常次数判断2。
(1.13.9)如果主节点连接异常次数判断2的异常次数未达到阈值则再次进行计数清零,如果主节点连接异常次数判断2的异常次数达到阈值则检查镜像节点状态标记。
(1.13.10)如果检查镜像节点状态标记为正常则激活镜像、切换虚拟IP和生成切换标记,并在激活镜像、切换虚拟IP和生成切换标记后结束。如果检查镜像节点状态标记为不正常则生成主节点不健康标签和不发生切换,在生成主节点不健康标签和不发生切换后结束。
(1.14)配置用于读写分离的连接池。参见图4所示,所述读写分离的实现过程是:APP提交SQL来判断SQL是读还是写,如果判断SQL是写则分发给主节点,如果判断SQL是读则分发给镜像节点。
(1.15)人为的switchover测试,关闭数据库主节点,关闭虚拟IP1,激活数据库镜像节点数据库,数据库镜像节点数据库recovery.conf自动修改为recovery.done,切换为主角色,在数据库镜像节点启动虚拟IP1,数据库主节点recovery.done改为recover.conf,启动数据库主节点,角色切换为镜像角色。
(1.16)通过拔数据库主节点网线,或者关闭数据库主节点,或者关闭数据库主节点服务器,或者关闭数据库主节点网卡来自动进行failover测试。
(1.17)当failover发生时,数据库镜像节点自动切换为数据库主节点,同时虚拟IP1自动在数据库镜像节点开启。
(2)写场景实现方法步骤如下:
(2.1)准备至少2台用于安装数据库的主机。
(2.2)在每台主机上安装数据库软件。
(2.3)在每台主机执行初始化数据库操作,并配置数据库监听端口。
(2.4)在每台主机创建同样的SCHEMA、用户、密码。
(2.5)在每台主机创建同样的业务表和约束。
(2.6)配置DNS,使主机名对应多个数据库主机的IP,同时配置监控,当数据库节点发生变更时实时更新DNS条目。
(2.7)配置连接池或驱动来实现写负载均衡以及HA。参见图5所示,所述写负载均衡以及HA的实现过程是:APP提交SQL,由SQL分发策略采用写的方式分发给节点1,分发给节点1后判断分发是否成功,如果分发成功则分发完成,如果分发不成功则SQL分发策略尝试分发给下一个节点,直到分发成功为止则实现分发完成作业。
(2.8)应用软件通过pgbouncer连接数据库,DNS策略配置为round-robin模式,当新建连接时,轮询的选择DNS解析出来的IP,从而POOLSERVER分布在不同的后端数据库,实现负载均衡。
本实例对于读写混合场景是,利用PostgreSQL数据库实时流复制实现双份数据库镜像,解决依赖存储的高可用的问题。自定义的数据库心跳和切换逻辑实现数据库failover,解决购买商业高可用软件的问题。使用仲裁和fence设备解决脑分裂问题。使用连接池会话层保持解决应用感知问题。连接池可部署多个,不存在单点故障。同时连接池可实现读写分离。同步和异步完全由事务决定,程序如果发起同步事务,则事务必须到达镜像节点后才提交完成;如果是异步事务,则事务到达主节点后就可以提交;解决了重要事务绝对不丢失,不重要事务选择异步则减少性能损失;实现了弹性控制。对镜像节点的延迟监控,如果发现镜像延迟达到阈值,告警。为防止数据丢失,在镜像延迟超过阈值时不会发生切换。本实例对于写场景是,记录用户行为数据。使用完全独立的两套硬件,创建相同的SCHEMA,实现写负载均衡。在连接池或驱动层实现高可用,负载均衡,解决了连接层单点。当主库数据库本身或数据库所在的硬件,或者存储故障,或者存储空间不足等问题发生时,数据库心跳检测程序将检测到问题,使用fence设备截断主库与外界的联系,然后激活主库镜像并切换IP。连接池和应用程序建立的TCP连接不受failover影响,因此这个会话不会中断。连接池和数据库的连接断开后自动连接。业务层在切换期间的会话自动回滚。在连接池或驱动层配置好多个对应的后端数据库连接,根据配置的算法,数据插入的SQL自动分发到后端数据库以实现负载均衡。当后端数据库无响应时,自动分发到下一个候选连接,以实现failover。
上面结合附图描述了本发明的实施方式,但实现时不受上述实施例限制,本领域普通技术人员可以在所附权利要求的范围内做出各种变化或修改。

Claims (5)

1.PostgreSQL高弹性的高可用及负载均衡实现方法,其特征在于,包括:读写混合场景实现方法和写场景实现方法;
(1)读写混合场景实现方法步骤如下:
(1.1)准备3台服务器,其中2台服务器分别用于数据库主节点和数据库镜像节点,另1台服务器用于仲裁节点;
(1.2)分别将数据库主节点服务器的主机、数据库镜像节点服务器的主机和仲裁节点服务器的主机配置在同一个网段,并设数据库主节点为node1,设数据库镜像节点为node2,设数据库的一个虚拟IP为虚拟IP1,设数据库的另一个虚拟IP为虚拟IP2,设仲裁节点为VOTE_HOST;
(1.3)配置数据库主节点和数据库镜像节点的FENCE设备,为了防止发生脑裂现象,让FENCE设备在自动failover前关闭服务器;
(1.4)配置数据库主节点和数据库镜像节点的网络,编写虚拟IP配置文件;
(1.5)在数据库主节点和数据库镜像节点安装PostgreSQL数据库软件;
(1.6)在数据库主节点初始化数据库;
(1.7)在数据库主节点配置数据库访问控制配置文件pg_hba.conf、postgresql.conf和recovery.conf,这三个数据库访问控制配置文件都用于数据库复制、启动数据库、创建流复制用户和启动虚拟IP;
(1.8)创建镜像数据库,配置数据库镜像节点流复制环境,并启动镜像虚拟IP;
(1.9)配置仲裁节点,设置用于仲裁网络异常的数据库监听端口,即配置仲裁机,在仲裁机上起一个监听端口,用于跳转到虚拟IP的P0stgreSQL主库监听端口;
(1.10)在数据库主节点创建心跳检查函数,数据库主节点的变更将自动复制到数据库镜像节点;
(1.11)编写心跳检查软件和仲裁节点检查软件,并把心跳检查软件部署在数据库主节点和数据库镜像节点,把仲裁节点检查软件部署在仲裁节点,用于自动failover;
(1.12)开启用于自动failover的心跳检查软件;
(1.13)配置组件监控检查,所述组件包括用于负责心跳检测和故障时激活镜像以及切换虚拟IP的HA切换软件,所述组件还包括用于读写负载均衡和客户端会话保持连接池的中间件,所述组件还包括用于数据库主节点IP读写连接和数据库镜像节点IP读连接的虚拟IP,所述组件还包括用于投票解决单边网络故障的仲裁节点,所述组件还包括用于解决脑裂问题的FENCE设备,所述组件还包括用于负责读写的数据库主节点和从数据库主节点获取实时增量同步且只负责读的数据库镜像节点;
所述HA切换软件的实现过程是:
(1.13.1)启动,判断主节点是否正常;
(1.13.2)如果主节点不正常则结束,如果主节点正常则判断本地节点角色是否为镜像节点;
(1.13.3)如果本地节点不是镜像节点则结束,如果本地节点为镜像节点则计数清零,并检查主节点状态;
(1.13.4)如果主节点状态健康则结束,如果主节点状态不健康则检查仲裁节点状态;
(1.13.5)如果仲裁节点状态不健康则再次进行计数清零,如果仲裁节点状态健康则从仲裁节点检查主节点状态;
(1.13.6)如果从仲裁节点检查主节点状态为健康状态则再次进行计数清零,如果从仲裁节点检查主节点状态为不健康状态则进行主节点累计异常次数自增计数,然后进行主节点连接异常次数判断1;
(1.13.7)如果主节点连接异常次数判断1是第一次时则检查镜像节点延迟是否正常,如果主节点连接异常次数判断1不是第一次时则进行主节点连接异常次数判断2;
(1.13.8)如果检查镜像节点延迟为不正常则再次进行计数清零,如果检查镜像节点延迟为正常则生成镜像节点健康状态标记,然后则进行主节点连接异常次数判断2;
(1.13.9)如果主节点连接异常次数判断2的异常次数未达到阈值则再次进行计数清零,如果主节点连接异常次数判断2的异常次数达到阈值则检查镜像节点状态标记;
(1.13.10)如果检查镜像节点状态标记为正常则激活镜像、切换虚拟IP和生成切换标记,并在激活镜像、切换虚拟IP和生成切换标记后结束;如果检查镜像节点状态标记为不正常则生成主节点不健康标签和不发生切换,在生成主节点不健康标签和不发生切换后结束;
(1.14)配置用于读写分离的连接池;所述读写分离的实现过程是:APP提交SQL来判断SQL是读还是写,如果判断SQL是写则分发给主节点,如果判断SQL是读则分发给镜像节点;
(1.15)人为的switchover测试,关闭数据库主节点,关闭虚拟IP1,激活数据库镜像节点数据库,数据库镜像节点数据库recovery.conf自动修改为recovery.done,切换为主角色,在数据库镜像节点启动虚拟IP1,数据库主节点recovery.done改为recover.conf,启动数据库主节点,角色切换为镜像角色;
(1.16)通过拔数据库主节点网线,或者关闭数据库主节点,或者关闭数据库主节点服务器,或者关闭数据库主节点网卡来自动进行failover测试;
(1.17)当failover发生时,数据库镜像节点自动切换为数据库主节点,同时虚拟IP1自动在数据库镜像节点开启;
(2)写场景实现方法步骤如下:
(2.1)准备至少2台用于安装数据库的主机;
(2.2)在每台主机上安装数据库软件;
(2.3)在每台主机执行初始化数据库操作,并配置数据库监听端口;
(2.4)在每台主机创建同样的SCHEMA、用户、密码;
(2.5)在每台主机创建同样的业务表和约束;
(2.6)配置DNS,使主机名对应多个数据库主机的IP,同时配置监控,当数据库节点发生变更时实时更新DNS条目;
(2.7)配置连接池或驱动来实现写负载均衡以及HA;所述写负载均衡以及HA的实现过程是:APP提交SQL,由SQL分发策略采用写的方式分发给节点1,分发给节点1后判断分发是否成功,如果分发成功则分发完成,如果分发不成功则SQL分发策略尝试分发给下一个节点,直到分发成功为止则实现分发完成作业;
(2.8)应用软件通过pgbouncer连接数据库,DNS策略配置为round-robin模式,当新建连接时,轮询的选择DNS解析出来的IP,从而POOLSERVER分布在不同的后端数据库,实现负载均衡。
2.根据权利要求1所述的PostgreSQL高弹性的高可用及负载均衡实现方法,其特征在于,在步骤(1.3)中,为避免FENCE慢或者FENCE不成功,还需要关闭数据库服务器操作系统的acpi服务,同时开启idrac的ipmi功能,并给用户赋予ipmi可开关机的OPERATOR角色。
3.根据权利要求1所述的PostgreSQL高弹性的高可用及负载均衡实现方法,其特征在于,在步骤(1.7)中,在数据库主节点和数据库镜像节点配置流复制密码文件;在数据库主节点启动数据库,添加replication数据库角色;在数据库主节点启动虚拟IP;在数据库主节点配置数据库访问控制文件pg_hba.conf,为了在集群脚本中要用到更新sky_pg_cluster数据库的表,则需要允许主节点、镜像节点、虚拟IP和仲裁节点以及回环地址通过sky_pg_cluster用户访问sky_pg_cluster数据库。
4.根据权利要求1所述的PostgreSQL高弹性的高可用及负载均衡实现方法,其特征在于,在步骤(1.10)中,插入初始数据,创建测试函数,用于测试数据库是否正常,包括所有表空间的测试,使用update不同的表空间中的数据,并不能立刻反映表空间的问题;因为大多数数据在shared_buffer中,如果表空间对应的文件系统io有问题,那么在checkpoint时会产生58类的错误,使用pg_stat_file函数来立刻暴露io的问题。
5.根据权利要求1所述的PostgreSQL高弹性的高可用及负载均衡实现方法,其特征在于,在步骤(1.11)中,配置心跳需要的密码文件,集群failover软件的sky_pg_clusterd.sh将用这个密码文件分别用于访问虚拟IP上的PostgreSQL监听端口、本机standby的PostgreSQL监听端口和VOTE_HOST上的跳转端口。
CN201410548447.2A 2014-10-16 2014-10-16 PostgreSQL高弹性的高可用及负载均衡实现方法 Active CN104503965B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410548447.2A CN104503965B (zh) 2014-10-16 2014-10-16 PostgreSQL高弹性的高可用及负载均衡实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410548447.2A CN104503965B (zh) 2014-10-16 2014-10-16 PostgreSQL高弹性的高可用及负载均衡实现方法

Publications (2)

Publication Number Publication Date
CN104503965A CN104503965A (zh) 2015-04-08
CN104503965B true CN104503965B (zh) 2017-08-29

Family

ID=52945363

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410548447.2A Active CN104503965B (zh) 2014-10-16 2014-10-16 PostgreSQL高弹性的高可用及负载均衡实现方法

Country Status (1)

Country Link
CN (1) CN104503965B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794026B (zh) * 2015-04-29 2017-09-15 上海新炬网络信息技术有限公司 一种集群实例多数据源绑定的故障转移方法
CN105224637A (zh) * 2015-09-24 2016-01-06 珠海许继芝电网自动化有限公司 一种基于PostgreSQL数据库的主备/集群应用的综合性方法
CN105389371A (zh) * 2015-11-16 2016-03-09 天津南大通用数据技术股份有限公司 一种数据库集群建立连接高可用的方法和系统
CN109213827B (zh) * 2017-07-03 2022-07-08 阿里云计算有限公司 一种数据处理系统、方法、路由器及从数据库
CN109947591B (zh) * 2017-12-20 2023-03-24 腾讯科技(深圳)有限公司 数据库异地灾备系统及其部署方法、部署装置
CN109788032B (zh) * 2018-12-17 2021-12-14 深圳壹账通智能科技有限公司 镜像文件的获取方法、装置、计算机设备和存储介质
CN109918439B (zh) * 2019-03-14 2021-04-27 杭州数梦工场科技有限公司 数据同步方法及其应用的环路检测方法和相关装置
CN109947536A (zh) * 2019-03-25 2019-06-28 山东浪潮云信息技术有限公司 一种基于Kubernetes的PostgreSQL自动化部署方法
CN110569303B (zh) * 2019-08-19 2020-12-08 杭州衣科信息技术有限公司 一种适用于多种云环境的MySQL应用层高可用系统及方法
CN111552637B (zh) * 2020-04-20 2023-05-19 北京顺达同行科技有限公司 数据库状态的检测方法、装置、电子设备及其存储介质
CN112084072B (zh) * 2020-09-11 2021-05-28 重庆紫光华山智安科技有限公司 一种提高PostgreSQL集群容灾能力的方法、系统、介质及终端
CN112685234A (zh) * 2020-11-26 2021-04-20 辽宁振兴银行股份有限公司 一种金融级两地三中心高可用MySQL数据库实现方法
CN112667353A (zh) * 2020-12-28 2021-04-16 紫光云技术有限公司 一种解决postgresql高可用节点宕机恢复的方法
CN113111122A (zh) * 2021-03-08 2021-07-13 北京世纪安图数码科技发展有限责任公司 一种面向rac集群的不动产登记数据读写分离方法
CN114116912A (zh) * 2022-01-25 2022-03-01 北京浩瀚深度信息技术股份有限公司 一种基于Keepalived实现数据库高可用的方法
CN116150250B (zh) * 2023-04-20 2023-07-11 瀚高基础软件股份有限公司 一种基于PostgreSQL的双端口解析方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521389A (zh) * 2011-12-23 2012-06-27 天津神舟通用数据技术有限公司 一种混合使用固态硬盘和传统硬盘的postgresql数据库集群系统及其优化方法
CN103049579A (zh) * 2013-01-15 2013-04-17 太仓市同维电子有限公司 一种基于postgresql数据库的嵌入式系统管理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9836513B2 (en) * 2012-03-12 2017-12-05 Entit Software Llc Page feed for efficient dataflow between distributed query engines

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521389A (zh) * 2011-12-23 2012-06-27 天津神舟通用数据技术有限公司 一种混合使用固态硬盘和传统硬盘的postgresql数据库集群系统及其优化方法
CN103049579A (zh) * 2013-01-15 2013-04-17 太仓市同维电子有限公司 一种基于postgresql数据库的嵌入式系统管理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
PostgreSQL数据库集群基本技术分析与实现;纪红波;《吉林工商学院学报》;20100915;第26卷(第5期);第69-72页 *

Also Published As

Publication number Publication date
CN104503965A (zh) 2015-04-08

Similar Documents

Publication Publication Date Title
CN104503965B (zh) PostgreSQL高弹性的高可用及负载均衡实现方法
CN106341454B (zh) 跨机房多活分布式数据库管理系统和方法
US7640451B2 (en) Failover processing in a storage system
JP5102901B2 (ja) データセンタにわたる複数データサーバ間のデータ完全性を保持する方法およびシステム
JP6734866B2 (ja) 第1のストレージ・システムをミラーリングする第2のストレージ・システムへのフェイルオーバ後の第1のストレージ・システムへの再同期
US9817721B1 (en) High availability management techniques for cluster resources
US9423956B2 (en) Emulating a stretched storage device using a shared storage device
US20110289417A1 (en) User interface for configuring and managing the cluster
US20080005288A1 (en) Storage system and data replication method
CN103840961A (zh) 双机热备份系统
US9442811B2 (en) Emulating a stretched storage device using a shared replicated storage device
CN106850315B (zh) 一种自动化容灾系统
CN111158955B (zh) 一种基于卷复制的高可用系统以及多服务器数据同步方法
CN113849136B (zh) 一种基于国产平台的自动化fc块存储处理方法和系统
Anderson et al. Local recovery for high availability in strongly consistent cloud services
TWI756007B (zh) 用以進行全快閃記憶體陣列伺服器的高可用性管理的方法與設備
US11308122B2 (en) Remote copy system
CN114416501A (zh) 一种存储双活及测试系统和方法
CN107104810A (zh) 一种基于ha双机热备技术
CN110266795A (zh) 一种基于Openstack平台控制方法
US11841734B1 (en) Synchronous block level replication across availability zones
Read Oracle solaris cluster essentials
Carter SQL server AlwaysOn revealed
Vallath et al. Testing for Availability
Raften Availability benefits of Linux on z Systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP02 Change in the address of a patent holder
CP02 Change in the address of a patent holder

Address after: 310000 room 821, building 1, Xinjun building, 330 Internet of things street, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Hangzhou Sky-mobi Technology Co., Ltd.

Address before: 10, building 2, block B, The Union Buildings, No. 310013, Bauhinia Road, Zhejiang, Hangzhou

Patentee before: Hangzhou Sky-mobi Technology Co., Ltd.

TR01 Transfer of patent right

Effective date of registration: 20210420

Address after: No. 181, erbatou, taimuyang village, Qinyu Town, Fuding City, Ningde City, Fujian Province

Patentee after: Chen Ximei

Address before: 310000 room 821, building 1, Xinjun building, 330 Internet of things street, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee before: HANGZHOU SKY NETWORK TECHNOLOGY Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210712

Address after: Room 802, unit 1, building 03, 439 Changhong Road, Yuhuatai District, Nanjing City, Jiangsu Province, 210000

Patentee after: Nanjing dayifei Software Technology Co.,Ltd.

Address before: 355200 no.181 erbatou, taimuyang village, Qinyu Town, Fuding City, Ningde City, Fujian Province

Patentee before: Chen Ximei

TR01 Transfer of patent right
CP03 Change of name, title or address

Address after: 211170 a205-73, zone a, university entrepreneurship Park, No. 99, Daxue Road, Xuzhou high tech Industrial Development Zone, Xuzhou City, Jiangsu Province

Patentee after: Jiangsu dayifei Software Technology Co.,Ltd.

Address before: Room 802, unit 1, building 03, 439 Changhong Road, Yuhuatai District, Nanjing City, Jiangsu Province, 210000

Patentee before: Nanjing dayifei Software Technology Co.,Ltd.

CP03 Change of name, title or address