YugabyteDB在GKE上的多可用区Helm Chart部署指南
前言
YugabyteDB是一个高性能的分布式SQL数据库,专为云原生环境设计。本文将详细介绍如何在Google Kubernetes Engine(GKE)上使用Helm Chart部署多可用区的YugabyteDB集群,实现高可用和容灾能力。
环境准备
基础要求
在开始部署前,需要确保满足以下条件:
- 已创建多可用区或区域性的GKE集群
- 已配置Helm工具
- 集群节点资源要求:
- 至少12个CPU核心和45GB内存
- 推荐使用n1-standard-8实例类型(8核30GB内存)
- 软件版本要求:
- Kubernetes 1.18+
- Helm 3.4+
- YugabyteDB 2.1.0+
工具安装
-
安装Google Cloud SDK:
gcloud components install kubectl
-
配置默认项目:
gcloud config set project yugabyte
-
验证Helm安装:
helm version
集群创建
创建区域性GKE集群
执行以下命令创建跨三个可用区的集群:
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
配置存储类
创建自定义存储类以支持跨可用区存储:
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
准备配置文件
为每个可用区创建独立的override文件:
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"
- 类似地创建
overrides-us-central1-b.yaml
和overrides-us-central1-c.yaml
文件,修改对应的AZ参数。
部署YugabyteDB
- 创建命名空间:
kubectl create namespace yb-demo-us-central1-a
kubectl create namespace yb-demo-us-central1-b
kubectl create namespace yb-demo-us-central1-c
- 部署集群:
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:
kubectl get services --namespace yb-demo
使用以下端口连接:
- YSQL: 5433
- YCQL: 9042
总结
通过本文的步骤,您已在GKE上成功部署了一个跨多可用区的高可用YugabyteDB集群。这种部署方式确保了即使单个可用区发生故障,数据库仍能保持可用性。您可以根据实际需求调整副本数量和资源配置,以满足不同的性能和可用性要求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考