使用Helm Chart在GKE上部署YugabyteDB多可用区集群

使用Helm Chart在GKE上部署YugabyteDB多可用区集群

yugabyte-db yugabyte/yugabyte-db: 是 YugaByte DB 的官方仓库,一个高性能、高可扩展、分布式的 SQL 数据库,支持 PostgreSQL 兼容性。适合对分布式数据库、SQL 数据库和云原生应用的开发者。 yugabyte-db 项目地址: https://gitcode.com/gh_mirrors/yu/yugabyte-db

前言

YugabyteDB是一款高性能的分布式SQL数据库,专为云原生环境设计。本文将详细介绍如何在Google Kubernetes Engine(GKE)上使用Helm Chart部署一个跨多可用区的YugabyteDB集群。这种部署方式能够提供高可用性和数据冗余,确保业务连续性。

准备工作

环境要求

在开始部署前,请确保满足以下条件:

  1. GKE集群:需要准备一个多可用区或区域性的GKE集群
  2. Helm工具:已安装Helm 3.4或更高版本
  3. 资源规格
    • 至少3个节点
    • 每个节点至少4个CPU核心和15GB内存
    • 推荐使用n1-standard-8实例类型(8CPU/30GB内存)

工具安装

  1. 安装Google Cloud SDK

    curl https://sdk.cloud.google.com | bash
    exec -l $SHELL
    gcloud init
    
  2. 配置默认项目

    gcloud config set project [您的项目ID]
    
  3. 安装kubectl

    gcloud components install kubectl
    
  4. 验证Helm安装

    helm version
    

创建GKE集群

区域性集群创建

执行以下命令创建一个跨3个可用区的区域性集群:

gcloud container clusters create my-regional-cluster \
   --machine-type=n1-standard-8 \
   --num-nodes 1 \
   --region us-central1 \
   --node-locations us-central1-a,us-central1-b,us-central1-c

创建存储类

YugabyteDB需要特定的存储类配置以确保卷能够根据Pod的可用区亲和性正确分配:

  1. 创建storage.yaml文件:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: yb-storage
provisioner: kubernetes.io/gce-pd
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: pd-ssd
  fsType: xfs
  1. 应用配置:
kubectl apply -f storage.yaml

部署YugabyteDB集群

添加Helm仓库

helm repo add yugabytedb https://charts.yugabyte.com
helm repo update

准备配置文件

我们需要为每个可用区创建独立的覆盖文件:

  1. us-central1-a覆盖文件 (overrides-us-central1-a.yaml):
isMultiAz: True
AZ: us-central1-a
masterAddresses: "yb-master-0.yb-masters.yb-demo-us-central1-a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-b.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-c.svc.cluster.local:7100"
storage:
  master:
    storageClass: "yb-storage"
  tserver:
    storageClass: "yb-storage"
replicas:
  master: 1
  tserver: 1
  totalMasters: 3
gflags:
  master:
    placement_cloud: "gke"
    placement_region: "us-central1"
    placement_zone: "us-central1-a"
  tserver:
    placement_cloud: "gke"
    placement_region: "us-central1"
    placement_zone: "us-central1-a"
  1. 类似地创建us-central1-bus-central1-c的覆盖文件

安装YugabyteDB

  1. 创建命名空间:
kubectl create namespace yb-demo-us-central1-a
kubectl create namespace yb-demo-us-central1-b
kubectl create namespace yb-demo-us-central1-c
  1. 在每个可用区部署YugabyteDB:
helm install yb-demo-us-central1-a yugabytedb/yugabyte \
  --namespace yb-demo-us-central1-a \
  -f overrides-us-central1-a.yaml --wait

helm install yb-demo-us-central1-b yugabytedb/yugabyte \
  --namespace yb-demo-us-central1-b \
  -f overrides-us-central1-b.yaml --wait

helm install yb-demo-us-central1-c yugabytedb/yugabyte \
  --namespace yb-demo-us-central1-c \
  -f overrides-us-central1-c.yaml --wait

验证集群状态

检查Pod状态

kubectl get pods --all-namespaces

预期输出应显示每个可用区都有master和tserver Pod在运行。

检查服务状态

kubectl get services --all-namespaces

访问管理界面

通过任一yb-master-ui服务的External IP访问管理界面:

http://<external-ip>:7000

配置可用区感知副本放置

默认配置不会考虑可用区因素,我们需要手动配置:

kubectl exec -it -n yb-demo-us-central1-a yb-master-0 -- bash \
-c "/home/yugabyte/master/bin/yb-admin --master_addresses yb-master-0.yb-masters.yb-demo-us-central1-a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-b.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-central1-c.svc.cluster.local:7100 modify_placement_info gke.us-central1.us-central1-a,gke.us-central1.us-central1-b,gke.us-central1.us-central1-c 3"

连接数据库

使用YSQL Shell

kubectl exec -n yb-demo-us-central1-a -it yb-tserver-0 -- ysqlsh \
  -h yb-tserver-0.yb-tservers.yb-demo-us-central1-a

使用YCQL Shell

kubectl exec -n yb-demo-us-central1-a -it yb-tserver-0 -- ycqlsh \
yb-tserver-0.yb-tservers.yb-demo-us-central1-a

外部客户端连接

获取yb-tserver-service的External IP后,可以使用以下端口连接:

  • YSQL: 5433
  • YCQL: 9042

最佳实践

  1. 监控资源使用:定期检查CPU和内存使用情况
  2. 备份策略:配置定期备份到Google Cloud Storage
  3. 性能调优:根据工作负载特点调整内存分配和并发设置
  4. 安全配置:启用TLS加密和认证机制

通过以上步骤,您已经在GKE上成功部署了一个跨多可用区的高可用YugabyteDB集群。这种部署方式能够确保即使单个可用区发生故障,数据库仍能保持可用性和数据一致性。

yugabyte-db yugabyte/yugabyte-db: 是 YugaByte DB 的官方仓库,一个高性能、高可扩展、分布式的 SQL 数据库,支持 PostgreSQL 兼容性。适合对分布式数据库、SQL 数据库和云原生应用的开发者。 yugabyte-db 项目地址: https://gitcode.com/gh_mirrors/yu/yugabyte-db

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯茵沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值