【问题标题】:Horizontal scaling of postgres in kubernetes clusterKubernetes集群中postgres的水平扩展
【发布时间】:2020-07-17 21:20:01
【问题描述】:

对于要在 Kubernetes 集群中部署我的应用程序,我有以下要求。我正在尝试提出一个类似于我的其他微服务部署并且并不复杂的架构。

  • 数据库服务器节点应该有预留容量
  • 当 CPU 利用率超过 60% 时,应该生成一个新的数据库实例
  • 应用程序和数据库将驻留在同一个集群中
  • 需要支持高一致性(非最终一致性)

我正在考虑让多个副本连接到同一个卷(在我的例子中是 NAS)。 postgres 实例将位于我的应用程序微服务之类的服务后面。应用程序将连接到服务并且不需要知道它正在与哪个 Postgres 实例通信。这大大简化了我的架构,因为我不必担心设置 Postgres 复制。

此架构中的一个问题是,如果 Postgres 实例在收到写入请求后发生故障,数据会发生什么情况。我可以引入一个带有消费者确认的消息代理来处理这种情况,但这对性能有一些影响。

示例 Postgres K8s 部署配置如下所示。我需要添加服务等。

这种架构有哪些缺陷?有没有人实现过类似的东西?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:latest
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim

【问题讨论】:

    标签: postgresql kubernetes horizontal-scaling


    【解决方案1】:

    我并不完全清楚,但听起来你在谈论Shared Disk Failover

    要回答您的问题,陷阱是:

    • 您的 NAS 存在单点故障
    • 您的副本是备用副本,因此无法用于扩展

    我认为为了获得可扩展性而不仅仅是容错,您需要使用复制。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2021-01-13
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      相关资源
      最近更新 更多