PostgreSQL的集群化和容器化部署
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的集群化和容器化部署相关推荐
- Kubernetes集群搭建及容器化部署
Kubernetes集群搭建及容器化部署 目录 一.k8s 集群部署 2 1.k8s 快速入门 2 2.k8s 集群安装 10 二.k8s 容器化部署 18 1.Kubectl命令行部署 18 2.K ...
- Redis集群原理与容器化部署集群
1.集群原理简介 1.1.什么是集群?什么是分区? 集群简单的说就是将同一个服务部署在不同的机器上,从而提高服务的横向扩展能力. 分区就是将数据分布在多个实例(服务器)上,让每一个实例都只存储一部分数 ...
- PostgreSQL流复制之二:pgpool-II实现PostgreSQL数据库集群(转发+整理)
转发来源: PostgreSQL的集群技术比较:https://iwin.iteye.com/blog/2108807 参考:https://blog.csdn.net/yaoqiancuo3276/ ...
- PostgreSQL Citus集群验证
PostgreSQL Citus集群验证 安装docker和docker-compose略. 网上都能找到. 官方文档 http://docs.citusdata.com/en/v9.5/instal ...
- 微服务化之前需要先无状态化和容器化
作者:刘超,毕业于上海交通大学,15年云计算领域研发及架构经验,先后在EMC,CCTV证券资讯频道,HP,华为,网易从事云计算和大数据架构工作.在工作中积累了大量运营商系统,互联网金融系统,电商系统等 ...
- 微服务化之无状态化和容器化
文章转自网易云架构师刘超的个人微信公众号 本文章为<互联网高并发微服务化架构实践>系列课程的第四篇 前三篇为: 微服务化的基石–持续集成 微服务的接入层设计与动静资源隔离 微服务化的数据库 ...
- PostgreSQL HA集群高可用方案介绍 pgpool-II+PostgreSQL HA方案部署
PostgreSQL HA集群高可用方案介绍 & pgpool-II+PostgreSQL HA方案部署 一.PostgreSQL HA集群高可用方案介绍 二.pgpool-II+Postgr ...
- k8s集群监控cadvisor+prometheus+grafana部署
目录 1.新建命名空间monitor 2.部署 2.1部署cadvisor 2.2部署node_exporter 2.3部署prometheus 2.4部署rbac权限 2.5.部署 metrics ...
- Hadoop集群完全分布式模式环境部署
Hadoop集群完全分布式模式环境部署 2013-09-13 17:24:14 分类: HADOOP Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop ...
最新文章
- device.cpp
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。...
- python getattr_python __getattr__ 巧妙应用
- GVIM中文编码出现乱码的解决方案
- boost::gil::detail::homogeneous_color_base用法的测试程序
- linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器
- iOS开发:icon和启动图尺寸(转)
- MyBatis学习(七)
- Xshell6 + Xftp6 绿色破解永久授权激活版 免安装 解压即用,最好的SSH工具(Xshell 6 plus套件)
- 【二十六】redis之事务、事务特性、与pipeline比较,与Lua脚本比较
- OpenCV开发笔记(四十九):红胖子8分钟带你深入了解轮廓识别(图文并茂+浅显易懂+程序源码)
- 解决Mac系统下需要每次配置环境的问题
- 东师21秋《HTML5开发基础与应用》离线作业1
- ITU-R 建议书下载网址
- 马来亚大学的计算机专业相当国内哪个水平,【马来亚大学和国内985对比】 - 马来西亚留学联盟...
- Elasticsearch:aggregation 介绍
- MySQL游标的使用
- MongoDB常见错误
- 集成运算放大电路与Multisim仿真学习笔记
- 【正点原子STM32连载】 第三十章 DMA实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1