在Amazon EKS上使用Helm Chart部署多可用区YugabyteDB集群
前言
YugabyteDB是一款高性能、云原生的分布式SQL数据库,能够在Kubernetes环境中提供强大的数据服务。本文将详细介绍如何在Amazon EKS(Elastic Kubernetes Service)上使用Helm Chart部署一个跨多可用区的YugabyteDB集群,确保高可用性和数据冗余。
环境准备
系统要求
在开始部署前,请确保满足以下要求:
- Amazon EKS集群:运行Kubernetes 1.18或更高版本
- 节点资源:至少3个节点,每个节点能分配4个CPU核心和15GB内存给YugabyteDB
- Helm客户端:版本3.4或更高
- YugabyteDB镜像:版本2.1.0或更高
工具安装
- AWS CLI:用于与AWS服务交互
- eksctl:EKS集群管理工具
- kubectl:Kubernetes集群管理工具
- Helm:Kubernetes包管理工具
部署步骤
1. 创建EKS集群
使用eksctl创建跨三个可用区的EKS集群:
eksctl create cluster \
--name yb-multizone \
--version 1.14 \
--region us-east-1 \
--zones us-east-1a,us-east-1b,us-east-1c \
--nodegroup-name standard-workers \
--node-type m5.2xlarge \
--nodes 3 \
--nodes-min 1 \
--nodes-max 4 \
--managed
2. 配置存储类
创建自定义存储类yb-storage
,设置volumeBindingMode
为WaitForFirstConsumer
:
kind: StorageClass
metadata:
name: yb-storage
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
provisioner: kubernetes.io/aws-ebs
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp2
fsType: xfs
应用配置:
kubectl apply -f storage.yaml
3. 部署YugabyteDB集群
添加Helm仓库
helm repo add yugabytedb https://charts.yugabyte.com
helm repo update
创建命名空间
kubectl create namespace yb-demo-us-east-1a
kubectl create namespace yb-demo-us-east-1b
kubectl create namespace yb-demo-us-east-1c
准备配置文件
为每个可用区创建覆盖配置文件(以us-east-1a为例):
isMultiAz: True
AZ: us-east-1a
masterAddresses: "yb-master-0.yb-masters.yb-demo-us-east-1a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-east-1b.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-east-1c.svc.cluster.local:7100"
storage:
master:
storageClass: "yb-storage"
tserver:
storageClass: "yb-storage"
replicas:
master: 1
tserver: 1
totalMasters: 3
gflags:
master:
placement_cloud: "aws"
placement_region: "us-east-1"
placement_zone: "us-east-1a"
tserver:
placement_cloud: "aws"
placement_region: "us-east-1"
placement_zone: "us-east-1a"
部署集群
helm install yb-demo-us-east-1a yugabytedb/yugabyte \
--version <version> \
--namespace yb-demo-us-east-1a \
-f overrides-us-east-1a.yaml --wait
重复上述命令为其他两个可用区部署。
集群验证
检查Pod状态
kubectl get pods --all-namespaces
检查服务状态
kubectl get services --all-namespaces
访问管理界面
通过任一yb-master-ui
服务的External IP访问管理界面(端口7000):
http://<external-ip>:7000
配置区域感知副本放置
默认配置不会考虑区域因素分配副本。执行以下命令启用区域感知副本放置:
kubectl exec -it -n yb-demo-us-east-1a yb-master-0 -- bash \
-c "/home/yugabyte/master/bin/yb-admin --master_addresses yb-master-0.yb-masters.yb-demo-us-east-1a.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-east-1b.svc.cluster.local:7100,yb-master-0.yb-masters.yb-demo-us-east-1c.svc.cluster.local:7100 modify_placement_info aws.us-east-1.us-east-1a,aws.us-east-1.us-east-1b,aws.us-east-1.us-east-1c 3"
连接数据库
使用YSQL Shell
kubectl exec -n yb-demo-us-east-1a -it yb-tserver-0 -- ysqlsh \
-h yb-tserver-0.yb-tservers.yb-demo-us-east-1a
使用YCQL Shell
kubectl exec -n yb-demo-us-east-1a -it yb-tserver-0 -- ycqlsh \
yb-tserver-0.yb-tservers.yb-demo-us-east-1a
外部客户端连接
获取yb-tserver-service
的External IP,使用以下端口连接:
- YSQL:5433
- YCQL:9042
总结
通过上述步骤,我们成功在Amazon EKS上部署了一个跨多可用区的YugabyteDB集群。这种部署方式不仅提供了高可用性,还能确保数据在多个可用区之间有冗余备份,大大提高了系统的容错能力。YugabyteDB与Kubernetes的深度集成,使得在云环境中部署和管理分布式数据库变得更加简单高效。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考