好的俄文网站设计,介绍好的免费网站模板下载,wordpress调用标签软件,马鞍山做网站公司摘要本文介绍了Postgresql的功能和集群构建方案#xff0c;及集群读写分离、负载均衡和分库功能的实现方法。1. 简介PostgreSQL是一个功能强大的、可靠性高、能保证数据完整性和一致性对象的开源关系数据库系统。它可以运行在所有主流的操作系统上#xff0c;包括Linux、UNIX…摘要本文介绍了Postgresql的功能和集群构建方案及集群读写分离、负载均衡和分库功能的实现方法。1. 简介PostgreSQL是一个功能强大的、可靠性高、能保证数据完整性和一致性对象的开源关系数据库系统。它可以运行在所有主流的操作系统上包括Linux、UNIX(AIX, BSD, HP-UX, SGI IRIX, MACOS, Solaris, Tru64)和Windows,实现ACID事务机制、外键、连接、视图、触发器和存储过程(在多种语言中)等功能支持大多数SQL2008数据类型如INTEGER, NUMERIC, BOOLEAN、CHAR、VARCHAR、DATE、INTERVAL和TIMESTAMP还支持二进制大对象的存储包括图片、声音或视频。它为C / c、Java、Net, Perl, Python, Ruby, Tcl, ODBC提供了编程接口。作为一款企业类数据库PostgreSQL拥有一些复杂的特性例如多版本并发控制(MVCC)、即时恢复、表空间、异步备份、事务保存点、在线/热备份、复杂的查询规划器/优化器以及预写式日志提高容错等在能够管理的数据量和可以容纳的并发量方面都具有高度的可伸缩性下面的下表中包含了一些一般的PostgreSQL限制。表1 PostgrelSQL 的一般限制LimitValueMaximum Database SizeUnlimitedMaximum Table Size32 TBMaximum Row Size1.6 TBMaximum Field Size1 GBMaximum Rows per TableUnlimitedMaximum Columns per Table250 - 1600 depending on column typesMaximum Indexes per TableUnlimited2. postgresql自带工具和集群策略提供面向高并发访问的分布式数据构建技术来提升整个数据库并发尤其是并发读的能力实现负载均衡、读写分离和数据分库功能。2.1 关键技术2.1.1 可扩展性可扩展性是指当系统需要增加资源执行更多的工作时系统能获得划算的等同提升。构建可扩展性系统时要尽量遵循避免串行化和交互的原则。实现可扩展性方法可大致分为以下三类向上扩展使用性能更好的机器。向外扩展水平扩展。向外扩展策略数据复制、数据库拆分及数据分片。数据复制主要利用主从同步实现了读写分离。数据数据分片大多数分片系统有一些全局的数据不会被分片大多保存在单个节点上通常缓存。向内扩展数据归档。2.1.2 分表确定分区键方法结合ER图和应用的查询。汇总表、全局表(不分片)。避免分片过大(同样大小最好)。多个分布键或许存储多份。优点缺点数据分片的最大挑战是查找和获取数据。对重要且频繁访问的数据减少分片可扩展性法则之一避免同节点之间交互最重要的是分区键的选取。维护数据一致性的挑战。聚合和关联操作等跨分片查询需要数据交互。2.1.3 主从同步是指在备用节点保存一份副本对主节点进行数据增删改的同时将修改同步到备用节点中。备用节点在主节点出现故障时接替主节点故障除了实现数据高可用性之外同时承担了应用服务器的读请求实现读写分离。针对读多写少的情况还能使用一主多从的架构实现读请求的负载均衡。数据分库数据分区对大表采用的一种分割策略将表中的纪录按照一定规律分到不同机器集群中。实现这种架构的方案有Postgresql使用pgpool-II中间件实现负载均衡和读写分离基于Pg/Proxy实现数据分库以及基于Postgresql构建Postgresql-XL集群策略。2.1.4 冷热分离PostgreSQL能通过定义表空间的方式确定表文件存储的路径再通过挂载不同的存储介质就能实现分级存储。定期分表在系统空闲时将过期数据所在表的表空间设置成性能较差的存储介质。2.1.5 缓存如何指定表进缓存如何查看哪些表被缓存缓存的种类2.2 组件2.2.1 pgpool-IIpgpool-II相当于中间件位于应用程序和PG服务端之间对应用程序来说Pgpool-II就相当于PG服务端对PG服务端来说Pgpool-II相当于PG客户端。由此可见Pgpool-II与PG是解耦合的基于这样的机制Pgpool-II可以搭建在已经存在的任意版本的PG主从结构上主从结构的实现与Pgpool-II无关可以通过slony等工具或者PG自身的流复制机制实现。除了主从结构的集群Pgpool-II也支持多主结构称为复制模式该模式下PG节点之间是对等的没有主从关系写操作同时在所有节点上执行这种模式下写操作的代价很大性能上不及主从模式。PG 9.3之后支持的流复制机制可以方便的搭建主从结构的集群(包括同步复制与异步复制)因此pgpool-II中比较常用的模式是流复制主从模式其结构如下图(也可以一主多从)。既然PG可以通过自身的流复制机制方便的搭建主从结构集群为什么还要在它上面搭建pgpool-II呢因为简单的主从结构集群并不能提供连接池、负载均衡、自动故障切换等功能pgpool-II正好可以做到这些当然负载均衡只针对读操作写操作只发生在主节点上。为了避免单点故障Pgpool-II自身也可以配置为主从结构对外提供虚拟IP地址当主节点故障后从节点提升为新的主节点并接管虚拟IP。2.2.2 plproxyplproxy能够在PostgreSQL上运行的一种过程语言能够通过用户自定义函数完成对远程数据库的调用实现数据切片的功能。图2给出了plproxy实现原理具体事例参考文献[2]。图4给出了基于plproxy进行分库的架构图中cluster1和cluster2可以是PostgreSQL单机版也可以是图1中实现了负载均衡和读写分离的集群这样便整个架构便实现了数据分库、负载均衡和读写分离。[2][3][4]2.2.3 Postgres-XLPostgres-XL的机制和Pgpool-II与Pl/Proxy大不相同它不是独立于PG的是在PG源代码的基础上增加新功能实现的。简单来说Postgres-XL将PG的SQL解析层的工作和数据存取层的工作分离到不同的两种节点上分别称为Coordinator节点和Datanode节点而且每种节点可以配置多个共同协调完成原本单个PG实例完成的工作。客户端发出请求通过负载均衡器(例如 HaProxy)将请求分发给Coordinator。此外为了保证分布模式下事务能够正确执行增加了一个GTM节点。为了避免单点故障可以为所有节点配置对应的slave节点。2.2.3.1 Postgres-XL的特点Postgres-XL 是一种提供写可靠性多主节点数据同步数据传输的开源集群方案。写可靠性 (Write-scalable )是指可以部署多个数据库主节点并且向这些主节点发出 update 语句这种特性单个 Postgres 库无法提供主节点数据同步(Synchronous):是指在一台数据库上更新操作会立刻呈现在另一台数据库中数据传输(Transparent)是指数据位于不同的数据库节点中当查询数据时不必关心数据位于具体的节点。2.2.3.2 Postgres-XL 架构Postgres_XL 架构.PNG.jpgPostgres-XC主要组件有GTM,GTM_StandbyGTM_Proxy, Coordinator 和Datanode。GTMGTM 是 Postgres_XL 的核心组件用于全局事务控制遵循数据库的ACID原则。GTM_StandbyGTM_Standby 为 GTM 的备机。GTM_ProxyGTM_Proxy 为降低GTM压力而诞生的 用于对 Coordinator 节点提交的任务进行分组等操作 机器中可以存在多个 GTM_Proxy。Coordinator协调节点 (Coordinator) 是数据节点 (Datanode) 与应用之间的接口Coordinator 节点并不物理上存储表数据表数据以分片或者副本的方式分布式存储在数据节点上。当应用发起SQL时会先到达 Coordinator 节点然后 Coordinator 节点将 SQL 分发到各个数据节点汇总数据这一系统过程是通过 GXID 和 Global Snapshot 来控制的。Datanode数据节点(datanode)物理上存储表数据表数据存储方式分为分片(distributed)和完全复制(replicated)两种数据节点只存储本地的数据。下表来自是2016年云栖社区的博客是PostgreSQL和MySQL针对GIS运算的比较。功能MySQLPostgreSQL空间索引仅MyISAM支持R树索引InnoDB不支持GIST树索引(R树的变种)支持的空间类型仅二维数据二维、三维以及曲线空间投影有限的空间函数基本实现OGC标准定义的空间操作函数事务支持不支持PostGIS提供了一系列的长事务支持可以有效支持复杂的空间分析功能。GIS系统使用使用较少使用较多例如openstreetmap的数据库后台就是Postgresql Postgis。参考资料