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:

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:

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

创建集群

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

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

cat << 'EOF' | kubectl create -f -
apiVersion: stackgres.io/v1
kind: SGCluster
metadata:
name: simple
spec:
instances: 1
postgres:
version: 'latest'
pods:
persistentVolume:
size: '5Gi'
EOF # 正常会有如下输出
sgcluster.stackgres.io/simple created

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

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

验证已创建的集群

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

查看创建状态:

kubectl get pods --watch

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

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

通过 psql 访问 Postgres

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

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

kubectl exec -ti "$(kubectl get pod --selector app=StackGresCluster,stackgres.io/cluster=true,role=master -o name)" -c postgres-util -- psql

# 正常会有如下输出
psql (16.1 (OnGres 16.1-build-6.29))
Type "help" for help. 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 中检索它:

kubectl get secret simple --template '{{ printf "%s" (index .data "superuser-password" | base64decode) }}'

# 正常会有如下输出
397a-7aaf-49e3-80d

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

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

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

连接到 UI

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

kubectl get secret -n stackgres stackgres-restapi-admin --template '{{ printf "username = %s\npassword = %s\n" (.data.k8sUsername | base64decode) ( .data.clearPassword | base64decode) }}'

# 正常会有如下输出
username = admin
password = 1ba7-235c-4563-8fc

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

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

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

清理

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

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. 关于ChatGPT的一些闲扯淡(1)

    这篇写的有点迟了,前者子ChatGPT正火的时候,懒病发作一直拖延.今天对ChatGPT做一个简单的讨论,也是把学习的心得和大家分享一下. 首先什么是GPT,英文全称是Generative Pretr ...

  2. HTML一键打包APK工具最新版1.9.1更新(附下载地址)

    HMTL网址打包APK,可以把本地HTML项目, Egret游戏,网页游戏,或者网站打包为一个安卓应用APK文件,无需编写任何代码,也无需配置安卓开发环境,支持在最新的安卓设备上安装运行. HTML一 ...

  3. MySQL高级10-InnoDB引擎存储架构

    一.逻辑存储结构 表空间(Tablespace):一个mysql实例,及一个数据库实例,可以对应多个表空间(ibd文件),用于存储记录,索引等数据. 段(Segment):分为数据段(Leaf nod ...

  4. ​python爬虫——爬虫伪装和反“反爬”

    前言爬虫伪装和反"反爬"是在爬虫领域中非常重要的话题.伪装可以让你的爬虫看起来更像普通的浏览器或者应用程序,从而减少被服务器封禁的风险:反"反爬"则是应对服务器 ...

  5. 【c#版本Openfeign】Net8 自带OpenFeign实现远程接口调用

    引言 相信巨硬,我们便一直硬.Net版本到现在已经出了7了,8也已经在预览版了,相信在一个半月就会正式发布,其中也有很多拭目以待的新功能了,不仅仅有Apm和Tap的结合,TaskToAscynResu ...

  6. DICOM PS3.7 2021a - Message Exchange

    PS3.7 DICOM PS3.7 2021a - Message Exchange DICOM Standards Committee Copyright 2021 NEMA A DICOM pub ...

  7. 【Cucumber】关于BDD自然语言自动化测试的语法总结

    1.关键字 - Feature 每一个.feature文件必须以关键字Feature开始,Feature关键字之后可以添加该feature的描述,其作用类似于注释,仅仅为了便于理解沟通交流,描述内容中 ...

  8. oracle命令2 和一致性关闭、非一致性关闭

    启动SQL*Plus语法sqlplus [username/password][@server] [as sysdba|sysoper] ,其中username/password如果不输人,SQL*P ...

  9. 优化预算管理流程:Web端实现预算编制的利器

    本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言:什么是预算和预算编制 预算 预算是企业在预测.决策的基础上,以数量和金 ...

  10. Util应用框架快速入门(4) - 集成测试开发入门

    本文演示Util应用框架开发的项目中如何编写集成测试. 准备 完成 Web Api 快速入门,本文将在之前生成的示例项目上讲解集成测试的开发. 测试概述 自动化测试对于Util应用框架的开发非常重要, ...