YugabyteDB在GKE上的多区域Helm Chart部署指南
前言
YugabyteDB是一个高性能的分布式SQL数据库,专为云原生环境设计。本文将详细介绍如何在Google Kubernetes Engine(GKE)上使用Helm Chart部署一个多区域的YugabyteDB集群。这种部署方式能够提供高可用性和数据冗余,确保业务连续性。
环境准备
基础要求
在开始部署前,需要确保满足以下条件:
- 已创建多区域或区域性的GKE集群
- 已配置Helm工具
- 已安装kubectl命令行工具
- 节点资源要求:
- 至少3个节点,每个节点配置为n1-standard-8类型(8核CPU,30GB内存)
- 总计12个CPU核心和45GB内存分配给YugabyteDB
工具安装
-
安装Google Cloud SDK:
# 设置默认项目 gcloud config set project yugabyte
-
安装kubectl:
gcloud components install kubectl
-
验证Helm安装:
helm version
确保使用的是Helm 3.4或更高版本
集群创建
创建区域集群
执行以下命令创建一个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
配置存储类
创建自定义存储类以确保卷按Pod的可用区亲和性进行配置:
# 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
应用配置:
kubectl apply -f storage.yaml
YugabyteDB集群部署
添加Helm仓库
helm repo add yugabytedb https://charts.yugabyte.com
helm repo update
准备配置文件
为每个可用区创建独立的覆盖文件:
- 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"
- us-central1-b.yaml和us-central1-c.yaml类似,只需修改AZ和placement_zone参数
部署集群
- 创建命名空间:
kubectl create namespace yb-demo-us-central1-a
kubectl create namespace yb-demo-us-central1-b
kubectl create namespace yb-demo-us-central1-c
- 部署YugabyteDB:
helm install yb-demo-us-central1-a yugabytedb/yugabyte \
--version 2.20 \
--namespace yb-demo-us-central1-a \
-f overrides-us-central1-a.yaml --wait
(其他两个可用区执行类似命令)
集群验证
检查Pod状态
kubectl get pods --all-namespaces
应看到每个可用区都有yb-master和yb-tserver Pod运行
检查服务状态
kubectl get services --all-namespaces
确认yb-master-ui和yb-tserver-service服务已创建并分配了外部IP
访问管理界面
使用任一yb-master-ui服务的外部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"
连接数据库
使用内置Shell
- 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的外部IP,使用以下端口连接:
- YSQL: 5433
- YCQL: 9042
总结
本文详细介绍了在GKE上使用Helm Chart部署多区域YugabyteDB集群的完整流程。这种部署方式提供了高可用性和数据冗余,确保在单个区域故障时仍能保持服务连续性。通过合理配置区域感知副本放置,可以进一步优化数据分布和访问性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考