2019独角兽企业重金招聘Python工程师标准>>>

对于PostgreSQL用户来说,随着数据增多、业务负载上升,需要将其进行容器化和集群化改造,以便于管理和伸缩规模。PostgreSQL虽然可以支持集群,但仍然是传统数据库架构而非分布式数据库架构。扩展为集群主要有两种方式:一是单写多读,slave节点实时同步,实施比较简单;二是多写多读,需要在中间层添加分布式事务协调器实现写一致性,多读机制与第一种方法相同。大部分情况下,数据库都是写少读多,第一种方案就足够了。

作为开源数据库的新星,PostgreSQL已经发展了多种集群化部署方案,主要分为裸机部署、容器部署和Kubernetes集群部署三种主要方式;而且,已经研发了相应的扩展版本和部署工具,可以更快地进行集群的部署和管理。不过,由于扩展插件(如PostGIS)往往落后于主版本的开发,与特定版本有一定的依赖性,在缺省的集群安装中可能无法使用,需要自己手动安装甚至从源码进行编译。

Postgres-XL-水平扩展集群

Postgres-XL(https://www.postgres-xl.org/) 基于 PostgreSQL 数据库构建,是一个通用的 ACID 开源的、可方便进行水平扩展的 SQL 数据库解决方案。Postgres-XL内建了MPP (Massively Parallel Processing)能力,引入了分布式事务协调器,支持多写多读,可用于商业智能、大数据分析等场合。

  • Postgres-XL官方文档,https://www.postgres-xl.org/documentation/intro-whatis-postgres-xl.html

Postgres-XL 可非常灵活的应付各种负载,特性包括:

  • OLTP 写频繁的业务。

  • 商业智能需要MPP并行性。

  • 操作数据存储。

  • Key-value 存储。

  • GIS 地理空间数据存储。

  • 适合不同业务工作环境。

  • 多租户服务提供商托管环境。

Postgres-XL在PostgreSQL上增加了GTC和GTM,架构上是比较复杂的,虽然可以容器化但还没有完整的Kubernetes集群部署方案,因此目前无法利用Kubernetes的节点伸缩、自动化管理等能力,需要手工进行配置。

Kubernetes部署-自动伸缩集群

目前在Kubernetes上部署PostgreSQL集群的方案有Stolon(由SorintLab开发)、Crunchy(由CrunchyData开发)、Patroni(由Zalando开发)。

  • 更详细的部署方法,请参考:

    • Kubernetes部署高可用PostgreSQL集群
    • Kubernetes快速部署高可用PostgreSQL
    • PostgreSQL的高可用与数据复制方案
    • Patroni: A Template for PostgreSQL HA with ZooKeeper, etcd or Consul

以上几种方法采用一主多从的模式进行部署,主从节点之间通过数据复制保持同步,数据通过单一节点写入,从多个节点读出。节点由Kubernetes进行管理,可以实现负载均衡、在线扩容、容错漂移等高级特性,适合写入频率低、读取负载高的应用场景。

Stolon的Kubernetes部署架构如下图所示:

不过,由于缺省安装方案只提供了基本的容器镜像,而且扩展插件(如PostGIS)往往落后于主版本的开发,与特定版本有一定的依赖性,在缺省的集群安装中可能无法使用,需要自己手动安装甚至从源码进行编译,进行自定义容器镜像的创建,然后修改yaml配置文件进行部署,第一次部署起来有一些繁琐(以后可以通过现成的yaml文件重建,就比较简单了)。

采用Stolon部署PostgreSQL到Kubernetes,运行的容器实例情况如下:

PostGIS-空间数据存取

PostGIS是支持地理空间数据存储、查询和简单空间运算的数据库系统,基于PostgreSQL扩展开发,可以单独安装发行版,或者在PostgreSQL中安装扩展插件来实现该功能,目前开源的QGIS和SuperMap、ESRI等商业GIS软件都支持PostGIS作为数据存储后端服务器。在使用Stolon、Crunchy、Patroni部署时,目前没有现成的镜像可用,需要自定义容器镜像。

  • PostGIS介绍,https://postgis.net/workshops/postgis-intro/

为了方便使用,PostGIS提供了一些演示地图数据(如下),也可以使用GDAL、QGIS等免费工具和SuperMap、ArcGIS等大型商业GIS平台进行数据的导入、导出、转换、投影、制图、分析等操作。使用GeoPandas也可以在Python环境中进行空间数据操作,以及使用Notebook、JupyterHub/JupyterLab进行融合的空间大数据分析。

目前,Postgres-XL和PostgreSQL标准安装都可以直接安装PostGIS模块,导入数据即可使用。在使用Stolon、Crunchy、Patroni部署时,目前没有现成的镜像可用,需要自定义容器镜像(估计,很快会有人做出来的)。

pgAdmin-图形管理界面

使用pgAdmin的图形化界面进行管理,参考:Kubernetes上PostgreSQL集群的管理。

网络共享存储

PostgreSQL集群的各个节点使用各自的存储,即便是使用共享的存储设备。这种模式可以提高数据存储的可靠性,但需要将各节点的存储尽可能分布到不同的存储设备上,以减少存储设备失效带来的数据丢失的风险。

在部署时需要考虑到节点漂移后的存储可用性问题,可以采用制定节点的方式来固定访问的存储位置(如使用本机磁盘时),或者使用网络共享存储来提供可迁移的分布式存储访问,可以使用传统的光纤存储网络或者基于以太网协议的IPSAN(包括IPSCSI),也可以使用基于软件的网络存储服务(NFS)以及分布式存储(GlusterFS、Ceph/Rook)等。关于网络存储服务,参考:

  • 基于Kubernetes的容器存储系统
  • NFS将固定存储变为网络存储服务。
    • Kubernetes搭建NFS原生服务
    • Kubernetes存储系统-NFS Server的Helm部署
    • kunbernetes存储系统-基于NFS的PV服务
  • GlusterFS分布式存储服务
    • GlusterFS-Kubernetes云原生存储
    • GlusterFS-动态卷快速应用
    • 安装 GlusterFS - 快速开始
    • 分布式存储系统GlusterFS最新版本安装
    • GlusterFS的客户端访问和NFS设置
    • 向分布式存储系统的迁移-使用ZFS/Gluster
    • 通过GlusterFS黏合多节点SSD剩余空间
    • Kubernetes中挂载GlusterFS的volume
    • ZFS存储池zpool丢失恢复及Gluster卷自愈
  • Ceph/Rook分布式存储系统
    • Rook-运行于云原生环境的分布式存储系统
    • Kubernetes存储系统-云原生存储Rook部署
    • Rook-Ceph 分布式存储系统快速部署
    • Kubernetes中用Helm安装Ceph存储服务
    • Rook 0.8 安装及Dashboard的问题和解决

集群数据库展望

随着容器技术和集群技术的发展,越来越多的服务器软件开始向云原生环境迁移,数据库也不例外。传统数据库服务器不仅向多节点集群方案发展,还向容器化和Kubernetes集群部署模式演进,就连Oracle都已经推出容器部署的方案,而新出现的NoSQL/NewSQL数据库(如MongDB/Redis等等)更是从一开始就把多节点集群、容器集群作为原生运行环境进行开发。

本文介绍了传统业务大量使用的PostgreSQL数据库的分布式和容器集群部署方案,而MySQL作为互联网企业大量采用的数据库服务器系统,也出现了OceanBase、Vitess等多种集群化部署方案(参考《分布式MySQL集群Vitess-简介》、 《分布式MySQL集群Vitess-Kubernetes部署》),前几年新创的CrateDB声称是同时具有NoSQL的灵活性和SQL的易用性的分布式数据库系统。

随着云原生技术的成熟和被接受度增加,传统数据库将能够更好地支持云原生环境,带来可以动态伸缩的大规模SQL数据服务体验,而面向云原生的“原生数据库”系统也将获得更大的发展和更广泛的应用。

转载于:https://my.oschina.net/u/2306127/blog/3009565

PostgreSQL的集群化和容器化部署相关推荐

  1. Kubernetes集群搭建及容器化部署

    Kubernetes集群搭建及容器化部署 目录 一.k8s 集群部署 2 1.k8s 快速入门 2 2.k8s 集群安装 10 二.k8s 容器化部署 18 1.Kubectl命令行部署 18 2.K ...

  2. Redis集群原理与容器化部署集群

    1.集群原理简介 1.1.什么是集群?什么是分区? 集群简单的说就是将同一个服务部署在不同的机器上,从而提高服务的横向扩展能力. 分区就是将数据分布在多个实例(服务器)上,让每一个实例都只存储一部分数 ...

  3. PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)

    转发来源: PostgreSQL的集群技术比较:https://iwin.iteye.com/blog/2108807 参考:https://blog.csdn.net/yaoqiancuo3276/ ...

  4. PostgreSQL Citus集群验证

    PostgreSQL Citus集群验证 安装docker和docker-compose略. 网上都能找到. 官方文档 http://docs.citusdata.com/en/v9.5/instal ...

  5. 微服务化之前需要先无状态化和容器化

    作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作.在工作中积累了大量运营商系统,互联网金融系统,电商系统等 ...

  6. 微服务化之无状态化和容器化

    文章转自网易云架构师刘超的个人微信公众号 本文章为<互联网高并发微服务化架构实践>系列课程的第四篇 前三篇为: 微服务化的基石–持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库 ...

  7. PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署

    PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...

  8. k8s集群监控cadvisor+prometheus+grafana部署

    目录 1.新建命名空间monitor 2.部署 2.1部署cadvisor 2.2部署node_exporter 2.3部署prometheus 2.4部署rbac权限 2.5.部署 metrics ...

  9. Hadoop集群完全分布式模式环境部署

    Hadoop集群完全分布式模式环境部署 2013-09-13 17:24:14 分类: HADOOP Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop ...

最新文章

  1. device.cpp
  2. 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。...
  3. python getattr_python __getattr__ 巧妙应用
  4. GVIM中文编码出现乱码的解决方案
  5. boost::gil::detail::homogeneous_color_base用法的测试程序
  6. linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器
  7. iOS开发:icon和启动图尺寸(转)
  8. MyBatis学习(七)
  9. Xshell6 + Xftp6 绿色破解永久授权激活版 免安装 解压即用,最好的SSH工具(Xshell 6 plus套件)
  10. 【二十六】redis之事务、事务特性、与pipeline比较,与Lua脚本比较
  11. OpenCV开发笔记(四十九):红胖子8分钟带你深入了解轮廓识别(图文并茂+浅显易懂+程序源码)
  12. 解决Mac系统下需要每次配置环境的问题
  13. 东师21秋《HTML5开发基础与应用》离线作业1
  14. ITU-R 建议书下载网址
  15. 马来亚大学的计算机专业相当国内哪个水平,【马来亚大学和国内985对比】 - 马来西亚留学联盟...
  16. Elasticsearch:aggregation 介绍
  17. MySQL游标的使用
  18. MongoDB常见错误
  19. 集成运算放大电路与Multisim仿真学习笔记
  20. 【正点原子STM32连载】 第三十章 DMA实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

热门文章

  1. Mac Electron App 签名后打开闪退
  2. 网吧电脑算完整的计算机系统么,怎么看网吧电脑的系统和位数?
  3. 专家揭示连锁加盟陷阱
  4. 互联网创业项目加盟,超低门槛,0经验也能开
  5. 「中国好SaaS」重装升级,真正以用户视角,发现SaaS好项目
  6. Calibre中使用DeDRM插件进行Kindle电子书解锁
  7. 如何使用wifi模块搭建农业物联网防治马铃薯晚疫病?
  8. 服务器、存储和网络虚拟化的实现与应用
  9. excel下拉列表联动_动态数组的Excel下拉列表
  10. NB-IoT模组选型及项目初始必看!