StackGres 1.6 数据库平台工程功能

声明式 K8S CRs

StackGres operator 完全由 Kubernetes 自定义资源管理。除了 kubectl 或任何其他 Kubernetes API 访问之外,不需要安装任何客户端或其他工具来管理 StackGres。您的请求由 CRD 的 spec 部分表示,任何 result 信息都在集群中资源的 status 部分中提供。

StackGres CRDs 被设计为非常高阶的,并且抽象(隐藏)了所有 Postgres 的复杂性。对于 StackGres,如果您知道如何使用 kubectl 以及如何定义 CRDs,那么您也已经成为 Postgres 的专家用户。

在 CRDs 中定义 StackGres 的定义和操作的能力使您能够将所有 Postgres 集群定义为基础设施即代码(IaC),并在 Git 中进行版本控制。这就启用了 GitOps 的配置管理方式,当您向版本控制中的 CRDs 提交更改时,可以自动管理您的集群。通常,这种资源定义方式支持非常灵活和可扩展的方法。

请查看 CRD Reference,了解 StackGres 资源的结构。

请参阅 Getting Started,开始极简的 StackGres 安装。

Note: 如果您更喜欢可视化 UI 而不是 YAML 文件和命令行,请注意,您可以通过 CRDs 查询或执行的每一个操作也可以通过 web 控制台进行。

同样,在 web 控制台中执行的任何操作都将自动反映在 CRDs 中。

选择权在你。

默认调优

StackGres 集群将由高度专业的 OnGres Postgres DBA 团队精心调整的初始 Postgres 配置创建。

这意味着 StackGres 附带了一个开箱即用的调优配置,即使您不是 Postgres 高级用户,也可以很好地使用这个默认配置。使用 StackGres,您不需要成为 Postgres 专家就可以操作生产就绪的集群。

如果您希望进一步调优 Postgres,您可以通过 SGPostgresConfig CRD 创建自定义配置,并相应地在集群中引用它们。

OnGres, StackGres 的创造者们痴迷于充分调优 Postgres。所以他们建立了 postgresqlCO.NF,一个帮助成千上万的 Postgres 用户更好地调优他们的数据库的网站。

自定义配置

StackGres 是用普通 Postgres 构建的,并提供没有限制的 Postgres 实例。

您可以提供自定义配置,并在自己的 Postgres 安装中使用任何进一步的自定义。

完全的 postgres 用户访问权限

在 StackGres 中没有限制的伪用户。相反,您可以以最大权限访问 postgres 用户( postgres 中的 "root" 用户)。你拥有它,没有任何警告。

自定义配置

StackGres 允许高级 Postgres 用户进一步定制组件和配置。这些配置由 CRDs 支持并经过充分验证,因此如果错误地设置集群,就不会有一个简单的 ConfigMap 导致集群崩溃。

请参阅 配置指南,深入了解如何调优 Postgres 或连接池配置。至于其他 Kubernetes 资源,您可以自定义公开的服务、pod 的标签和节点容忍度等等。

总的来说,StackGres 让你完全控制。

高可用

StackGres 集成了 Postgres 中最著名的、经过生产测试的高可用性软件: Patroni

StackGres 完全集成了 Patroni,您无需再做其他任何事情。如果任何 pod、任何节点或任何东西发生故障,集群将在几秒钟内自动执行故障转移并重新修复,而无需人工干预。

StackGres 通过 Kubernetes 服务为应用程序公开了一个读写(主)和一个只读(副本)连接,在任何中断事件发生后,该连接将自动更新。

请参阅 High Availability Guide,了解更多关于将 Patroni 集成到 StackGres 中的信息,以及如何执行手动切换或如何测试故障转移。

自动备份

备份是数据库的关键部分,也是任何灾难恢复策略的关键。StackGres 包括基于连续归档的备份,它允许零数据丢失恢复和 PITR(Point-in-Time Recovery),将数据库恢复到任意过去的时间点。

StackGres 还提供备份的自动生命周期管理。备份总是存储在当今可用的最持久的介质中: cloud object storage,如 Amazon's S3Google Cloud StorageAzure Blob。如果您在 prem 上运行,您可以使用 Minio 或其他兼容 S3 的软件来存储备份。

您需要提供 bucket 访问信息和凭据,配置保留策略,其他一切都由 StackGres 完全自动化。

您还可以随时通过简单的 YAML 文件创建手动备份。

请参阅 Backups Guide 以了解有关如何定义和管理备份的更多信息。

服务器端连接池

由于 Postgres 进程模型的原因,强烈建议在生产场景中使用连接池。

StackGres 提供了集成的服务器端连接池。PgBouncer 作为一个 sidecar 容器部署在 Postgres 容器旁边。

服务器端池可以控制连接流入,即进入 Postgres 的连接,并确保 Postgres 不会被可能导致显著性能下降的流量淹没。StackGres 还将相关的连接池指标导出到 Prometheus,并且专门的仪表板显示在集成到 web 控制台的 Grafana 中。

您可以通过 SGPoolingConfig CRD 调优低级配置,甚至完全禁用连接池。

请查看 Connection Pooling Configuration section ,了解有关如何配置连接池的更多信息。

分布式的日志

对于那些厌倦了在集群的每个 pod 中输入 kubectl exec,然后在 Postgres 日志中 grepawk 来获取你想要的信息的人来说,StackGres 是一个更好的解决方案。

StackGres 支持 Postgres 和 Patroni 的集中式分布式日志。

分布式日志集群可以通过基于 YAML 的 CRDs 或 web 控制台快速创建和配置。

Postgres 和 Patroni 容器日志都将通过 FluentBit sidecar 捕获,并将它们转发到分布式日志服务器。

它也包含一个 Fluentd 收集器,将日志转发到专用的 Postgres 数据库。为了支持高日志量摄取,这个日志专用数据库通过 TimescaleDB 扩展进行了增强,StackGres 还依赖于 TimescaleDB 扩展来执行日志保留策略。

然后可以从集中位置通过 SQL 查询聚合的日志,或者通过 web 控制台进行可视化,其中包括搜索和过滤功能。日志使用丰富的元数据进行了增强,这有助于任何 Postgres 故障排除。

有关如何配置分布式日志的更多信息,请参阅 Distributed Logs Guide

可观测

StackGres 使 Postgres 指标可用于增强可观察性,并与 Prometheus 堆栈完全集成,包括预定义的,特定于 Postgres 的 dashboards 和 alerts。

StackGres 利用 Envoy sidecar 透明地代理所有 Postgres 流量。OnGres 团队与 Envoy 社区合作开发了第一个 Postgres filter for Envoy。这个 Envoy Postgres 过滤器通过解码 Postgres wire 协议并向 Prometheus 发送指标来提供增强的可观测性。这不仅增加了在 Postgres 级别不可用的指标,而且对 Postgres 没有任何影响,因为这些指标是在代理级别收集的。这个过程对 Postgres 是完全透明的。

Envoy 将发送额外的指标,只要在 Kubernetes 中配置了 Prometheus 实例,就没有更多的事情要做。

StackGres web 控制台包括内置的 Grafana 仪表板来可视化这些指标。

请参阅 Monitoring Guide ,以了解关于如何配置监视的更多信息。

Web UI 管理控制台

StackGres 带有一个功能齐全的 web 控制台,允许您读取任何信息并执行任何操作,这些操作也可以通过 kubectl 和 StackGres CRDs 完成。

这个 web 控制台是针对 DBA 的内部使用的,可以通过 LoadBalancer 或其他 Kubernetes 路由机制公开。

web 控制台可以通过默认的管理凭据访问,也可以通过 Kubernetes RBAC 进行用户身份验证或 SSO 集成访问。它还附带了一个 REST API,以提供进一步的灵活性。

请查看 Admin UI Guide,了解如何访问和使用它的更多信息。

web 控制台支持光和暗模式,以优化您的用户体验。

Day-2 操作

StackGres 以生产就绪的方式全面管理您的Postgres集群。它具有 day-2 的操作功能,如 PostgreSQL 的次要和主要版本升级、容器升级、受控重启、vacuum 或 repack,可以以简单安全的方式使用。

版本升级或重新启动等管理操作很容易造成压力,这就是为什么设计良好的 database operator 应该以合理的方式实现这些操作的原因。StackGres 以受控的生产级方式执行 day-2 操作。

一般来说,工程师在 StackGres CRDs 中定义所需的目标状态,通过 Kubernetes API (或者 web 控制台)应用更改,然后 StackGres operator 负责其余的工作。这种方法最大限度地减少了用户方面的粗心错误,因为不需要过程性步骤,只需要声明性定义。StackGres CRDs 提供了一种类型安全的方式来定义资源、配置和集群操作,并由 StackGres operator 理解和验证。

根据所需的更改,StackGres 以合理的方式执行更改,并考虑到生产准备情况。

这意味着,例如,所需的 Postgres 集群重启不只是立即执行(并且可能危及数据库可用性),而是以受控的方式执行。

StackGres 旨在提供 DBA 专家和 Kubernetes operator 的最佳组合。

高级复制模式

StackGres 为 Postgres 实例支持不同的高级复制模式,包括异步、同步和组复制。

还支持在单独的 Kubernetes 集群上进行级联复制和备用集群,以便进行灾难恢复。

可以在 SGCluster CRD replication section 中配置复制模式。

Sharding,高可用分布式 Postgresql

集成 Patroni + Citus + PgBouncer,高可用分布式 Postgresql 一键部署。

PostgreSQL 扩展

扩展是 Postgres 最受欢迎的功能。

通过扩展,数据库功能可以以任何可以想象的方式进行扩展。

而且,Postgres 用户受益于由数百个开源扩展组成的生态系统。

StackGres 支持 150 多个 Postgres 扩展,并且可以动态地将扩展加载到 Postgres 集群的 pod 中。

因此,StackGres 是世界上拥有最多扩展的 Postgres 平台。

请查看 扩展 的完整列表和 扩展指南,以了解如何在 StackGres 中配置和使用扩展。

生态

StackGres 用户受益于一个非常活跃、友好和支持的生态系统。

StackGres 100% 是免费开源的,有一个开源友好的许可证。

没有“具有高级功能的高级版本”,也没有任何生产使用限制。

It's just Open Source.

如果你想了解更多关于 StackGres 内部工作的信息,甚至想贡献自己的力量,你可以查看 official repositories、issue trackers 或 community Slack:

StackGres 1.6 数据库平台工程快速上手

在本篇中,您将学习如何开始使用 StackGres。

我们将在 Kubernetes 集群上安装 StackGres,并创建一个 Postgres 实例。

NOTE: 要运行此 demo,您需要一个已经在 kubectl 中配置的 K8s environment

安装 Operator

为了便于演示,我们提供了一些 Kubernetes 资源文件,以便安装 StackGres operator。

假设您已经安装了 kubectl CLI, 您可以使用以下命令安装 operator:

  1. kubectl apply -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

这将安装所有必需的资源,并将 StackGres operator 添加到新的命名空间 stackgres 中。

stackgres-operator-demo.yml 将使用 LoadBalancer 暴露 UI。

请注意,使用此功能可能会给您的主机提供商带来额外的成本(例如,EKS、GKE 和 AKS 就是这种情况)。

等待 Operator 启动

一旦它准备好了,你会看到 operator pods 的状态是 Running:

  1. kubectl get pods -n stackgres
  2. # 正常会有如下输出
  3. NAME READY STATUS RESTARTS AGE
  4. stackgres-operator-668bf7586d-krh7f 1/1 Running 0 28h
  5. stackgres-restapi-d7f9bd787-dh6tr 2/2 Running 0 28h

创建集群

要创建第一个 StackGres 集群,必须创建一个包含集群配置的简单自定义资源。

下面的命令,使用命令行执行此操作:

  1. cat << 'EOF' | kubectl create -f -
  2. apiVersion: stackgres.io/v1
  3. kind: SGCluster
  4. metadata:
  5. name: simple
  6. spec:
  7. instances: 1
  8. postgres:
  9. version: 'latest'
  10. pods:
  11. persistentVolume:
  12. size: '5Gi'
  13. EOF
  14. # 正常会有如下输出
  15. sgcluster.stackgres.io/simple created

这将使用最新的 PostgreSQL 版本创建一个集群,一个节点,一个 5Gi 的磁盘,使用默认的存储类。

它使用 StackGres 对 PostgreSQL、连接池和资源配置文件的默认配置。

验证已创建的集群

一个名为 simple 的集群将部署在环境中配置的默认名称空间中(通常是名称空间 default)。

查看创建状态:

  1. kubectl get pods --watch

最后,你应该看到这样的东西:

  1. NAME READY STATUS RESTARTS AGE
  2. simple-0 6/6 Running 1 (41s ago) 68s

通过 psql 访问 Postgres

要打开 psql 控制台并管理 PostgreSQL 集群,你可以连接到主实例(标签为 role: master 的 pod )的 postgres-util 容器。

在这个快速入门中,我们只有一个 pod,您可以简单地提供它的名称,但是无论您有多少实例,以下命令都可以工作:

  1. kubectl exec -ti "$(kubectl get pod --selector app=StackGresCluster,stackgres.io/cluster=true,role=master -o name)" -c postgres-util -- psql
  2. # 正常会有如下输出
  3. psql (16.1 (OnGres 16.1-build-6.29))
  4. Type "help" for help.
  5. postgres=#

Note: 直接通过 postgres-util sidecar 连接将授予您使用 postgres 用户的访问权限。它类似于 sudo -i postgres -c psql

请阅读有关 postgres-util side car 以及 how to connect to the Postgres cluster 的详细信息。

通过 Kubernetes Services 访问 Postgres

虽然通过 psql 访问集群是一个很好的快速测试,但应用程序通常使用 Kubernetes 服务连接到我们的实例。

为此,需要对访问进行身份验证,这可以通过添加专用的 postgres 用户来实现,或者,对于这个快速入门,通过使用 postgres 用户( Postgres 中的超级用户)来实现。postgres 用户的密码是创建集群时随机生成的。您可以通过获取 key "superuser-password" 从一个名为 cluster 的 secret 中检索它:

  1. kubectl get secret simple --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'
  2. # 正常会有如下输出
  3. 397a-7aaf-49e3-80d

现在我们可以使用用户 postgres 和刚刚返回的密码进行身份验证。为此,我们已经可以使用一个应用程序,或者,出于测试目的,再次使用 psql,但是从通过 Kubernetes 服务名称连接到 Postgres 的不同容器中:

  1. kubectl run psql --rm -it --image ongres/postgres-util --restart=Never -- psql -h simple postgres postgres
  2. If you don't see a command prompt, try pressing enter.
  3. # 397a-7aaf-49e3-80d 此处输入密码即可
  4. # 成功会有如下输出
  5. psql (16.1 (OnGres 16.1-build-6.29))
  6. Type "help" for help.
  7. postgres=#

这一次,psql 命令将要求输入密码,这是超级用户的密码。

连接到 UI

现在您对 StackGres 有了更多的了解,您可以轻松地从 UI 管理所有集群了。UI 将要求输入用户名和密码。默认情况下,这些是 admin 和随机生成的密码。您可以运行以下命令获取用户和自动生成的密码:

  1. kubectl get secret -n stackgres stackgres-restapi-admin --template '{{ printf "username = %s\npassword = %s\n" (.data.k8sUsername | base64decode) ( .data.clearPassword | base64decode) }}'
  2. # 正常会有如下输出
  3. username = admin
  4. password = 1ba7-235c-4563-8fc

有了凭据,让我们连接到 operator web UI。为此,您可以转发 operator pod 的 HTTPS 端口:

  1. POD_NAME=$(kubectl get pods --namespace stackgres -l "stackgres.io/restapi=true" -o jsonpath="{.items[0].metadata.name}")
  2. kubectl port-forward "$POD_NAME" 8443:9443 --namespace stackgres
  3. # 正常会有如下输出
  4. Forwarding from 127.0.0.1:8443 -> 9443
  5. Forwarding from [::1]:8443 -> 9443
  6. Handling connection for 8443

然后,您可以在以下地址打开浏览器 localhost:8443/admin/

清理

要卸载这个演示生成的所有资源,你可以运行:

  1. kubectl delete --ignore-not-found -f https://stackgres.io/downloads/stackgres-k8s/stackgres/1.6.0/stackgres-operator-demo.yml

有关更多详细信息,请查看 卸载 部分。

此外,请参阅 通过 helm 安装 部分,以改变这些。

更多

StackGres 1.6 数据库平台工程功能介绍以及快速上手的更多相关文章

  1. CYQ.Data V5 数据库读写分离功能介绍

    前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始 ...

  2. Kylin on Parquet 介绍和快速上手

    Apache Kylin on Apache HBase 方案经过长时间的发展已经比较成熟,但是存在着一定的局限性.Kylin 查询节点当前主要的计算是在单机节点完成的,存在单点问题.而且由于 HBa ...

  3. Python-celery介绍与快速上手

    1.celery介绍:   celery是一个基于Python开发的模块,可以帮助我们在开发过程中,对任务进行分发和处理.               详细介绍取自:Python之celery的简介与 ...

  4. 非常好用的弹出层 layer,常用功能demo,快速上手!

    功能强大,实用,操作方便,文档齐全. 参数灵活,丰富.可以作为开发项目的公共模块,多处使用.老文档地址:http://layer.layui.com/api.html 已经停止维护 新文档地址:htt ...

  5. SpringCloud-Nacos/OpenFien/Gateway的基本介绍及快速上手

    一.Spring-Cloud-Alibaba-Nacos 注册中心 1.下载.安装 Nacos 下载地址:https://github.com/alibaba/nacos/releases 下载后解压 ...

  6. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  7. 025 SSM综合练习01--数据后台管理系统--功能介绍及数据库表

    1.功能介绍 (1)环境搭建 主要讲解maven工程搭建,以及基于oracle数据库的商品表信息,并完成SSM整合.(2)商品查询 基于SSM整合基础上完成商品查询,要掌握主面页面main.jsp及商 ...

  8. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  9. 通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍

    通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括 ...

  10. 升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

随机推荐

  1. 【Unity3D】反射和折射

    1 前言 ​ 立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射.菲涅耳反射和折射效果.另外,本文还使用了 Gra ...

  2. Spring Boot通过企业邮箱发邮件被Gmail退回的问题解决方法

    这两天给我们开发的Chrome插件:Youtube中文配音增加了账户注册和登录功能,其中有一步是邮箱验证,所以这边会在Spring Boot后台给用户的邮箱发个验证信息.如果发邮件,之前的文章教程里就 ...

  3. QA||TypeError: ‘module‘ object is not callable报错怎么debugIHRM接口自动化测试

    unittest.py生成测试报告时执行报错:TypeError: 'module' object is not callable 代码如下 原因:结合pycharm自动标注和报错信息,分析出应该是H ...

  4. 多主架构:VLDB技术论文《Taurus MM: bringing multi-master to the cloud》解读

    本文分享自华为云社区<多主创新,让云数据库性能更卓越>,作者: GaussDB 数据库. 华为<Taurus MM: bringing multi-master to the clo ...

  5. 使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅

    大家好!今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群. MinIO 对象存储是什么? 对象是二进制数据,例如图像.音频文件.电子表格甚至二进制可执行代码.对象的大 ...

  6. Vue3+vite路由配置优化(自动化导入)

    今天在维护优化公司中台项目时,发现路由的文件配置非常多非常乱,只要只中大型项目,都会进入很多的路由页面,规范一点的公司还会吧路由进行模块化导入,但是依然存在很多文件夹的和手动导入的问题. 于是我想到了 ...

  7. Solution -「NOI 2020」时代的眼泪

    Description Link. 给出一个二维平面以及一些点,保证点不在同行 / 同列.每次询问求出一个子矩阵里面的顺序对. Solution 卡常,卡你吗. 膜拜 dX. 基本是把 dX 的题解贺 ...

  8. stata中回归分析常用方法

    // 按键盘上的PageUp可以使用上一次输入的代码(Matleb中是上箭头)// 清除所有变量clear// 清屏 和 matlab的clc类似cls // 导入数据(其实是我们直接在界面上粘贴过来 ...

  9. 手撕Vue-数据驱动界面改变下

    经过上一篇的介绍,数据驱动界面改变 v-model 的双向绑定已告一段落, 剩余的就以这篇文章来完成. 首先完成我们的 v-html,v-text, 其实很简单,就是将我们之前的 v-model 创建 ...

  10. 微信小程序image图片自适应宽度比例显示的方法

    我们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性:1.src              图片资源地址2.mode          图片裁剪.缩放的模式3.binderror   ...