1. 首页 > 国产数据库教程 > YashanDB教程 > 正文

yashandb教程FG190-YashanDB K8s高可用配置

本文档风哥主要介绍YashanDB K8s高可用配置相关知识,包括Kubernetes的概念、高可用架构、YashanDB K8s高可用的优势、规划与环境要求、部署实现、监控、故障排查、生产案例与实战讲解等内容,风哥教程参考YashanDB官方文档Kubernetes部署内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 Kubernetes的概念

Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动部署、扩展和管理容器化应用。Kubernetes提供了一套完整的解决方案,包括容器编排、服务发现、负载均衡、自动扩缩容、存储管理等功能。更多视频教程www.fgedu.net.cn

Kubernetes的核心概念:

  • Pod:Kubernetes的最小部署单位,包含一个或多个容器
  • Deployment:管理Pod的副本,确保指定数量的Pod运行
  • Service:提供稳定的网络访问点,用于访问Pod
  • PersistentVolume (PV):持久化存储卷
  • PersistentVolumeClaim (PVC):对PV的请求
  • Namespace:逻辑隔离的资源组
  • ConfigMap:存储配置信息
  • Secret:存储敏感信息

1.2 Kubernetes高可用架构

Kubernetes高可用架构通常包括以下组件:

  • 控制平面:包括API Server、etcd、Controller Manager、Scheduler等组件,通常部署多个副本以实现高可用
  • 节点:运行Pod的服务器,通常部署多个节点以实现高可用
  • 存储:提供持久化存储,通常使用分布式存储以实现高可用
  • 网络:提供容器间通信,通常使用CNI插件以实现网络高可用

1.3 YashanDB K8s高可用的优势

YashanDB K8s高可用的优势包括:

  • 自动故障转移:当节点或Pod故障时,自动将工作负载转移到其他节点
  • 弹性伸缩:根据负载自动调整Pod数量
  • 服务发现:自动发现和注册服务,简化服务间通信
  • 负载均衡:自动分发客户端请求
  • 存储管理:提供持久化存储解决方案
  • 配置管理:集中管理配置信息
  • 监控告警:集成监控系统,及时发现和解决问题
风哥提示:Kubernetes是现代容器编排的主流平台,YashanDB在K8s上的高可用部署可以提高系统的可靠性和可维护性。在实施K8s高可用部署时,应充分考虑控制平面高可用、节点高可用、存储高可用等因素。学习交流加群风哥微信: itpux-com

Part02-生产环境规划与建议

2.1 YashanDB K8s高可用规划

YashanDB K8s高可用规划建议:

# K8s高可用规划原则
– 控制平面高可用:部署多个控制平面节点,确保API Server、etcd等组件的高可用
– 节点高可用:部署多个工作节点,确保Pod的高可用
– 存储高可用:使用分布式存储,确保数据的高可用
– 网络高可用:配置冗余网络,确保网络的高可用
– 应用高可用:部署多个Pod副本,确保应用的高可用

# 高可用架构选择
– 控制平面:至少3个节点,实现etcd集群的高可用
– 工作节点:至少3个节点,实现Pod的高可用
– 存储:使用分布式存储,如Ceph、GlusterFS等
– 网络:使用CNI插件,如Calico、Flannel等

# 资源规划
– 控制平面节点:至少8GB内存,4核CPU
– 工作节点:至少16GB内存,8核CPU
– 存储:根据数据量确定,建议至少200GB
– 网络:至少1Gbps带宽

2.2 YashanDB K8s高可用环境要求

YashanDB K8s高可用环境要求:

# K8s环境要求
– Kubernetes版本:1.18+
– Docker版本:19.03+
– 控制平面节点:至少3个
– 工作节点:至少3个
– 内存:每个节点至少8GB内存
– CPU:每个节点至少4核CPU
– 存储:每个节点至少100GB磁盘空间
– 网络:节点间网络延迟低于10ms

# 存储要求
– 存储类型:SSD
– 容量:根据数据量确定,建议至少200GB
– IOPS:至少1000 IOPS
– 延迟:低于10ms

# 网络要求
– 网络带宽:至少1Gbps
– 网络延迟:节点间延迟低于10ms
– 网络稳定性:99.99%可用性

2.3 YashanDB K8s高可用最佳实践

YashanDB K8s高可用最佳实践:

# K8s高可用最佳实践

# 1. 控制平面高可用
– 部署至少3个控制平面节点
– 配置etcd集群,实现数据持久化
– 使用负载均衡器分发API Server请求

# 2. 工作节点高可用
– 部署至少3个工作节点
– 配置节点亲和性,将Pod部署在不同节点
– 配置Pod反亲和性,避免多个Pod副本部署在同一节点

# 3. 存储高可用
– 使用分布式存储,如Ceph、GlusterFS等
– 配置PersistentVolumeClaim,确保数据持久化
– 定期备份数据,确保数据安全

# 4. 网络高可用
– 使用CNI插件,如Calico、Flannel等
– 配置网络策略,确保网络安全
– 实现网络冗余,确保网络可靠性

# 5. 应用高可用
– 部署多个Pod副本
– 配置就绪探针和存活探针
– 使用Service实现负载均衡
– 配置自动扩缩容

生产环境建议:K8s高可用部署需要充分考虑控制平面、节点、存储、网络等多个方面的高可用。建议在测试环境中进行充分测试,找到最优的部署方案。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 YashanDB K8s高可用部署实现

3.1.1 部署Kubernetes集群

# 部署Kubernetes集群

# 1. 安装kubeadm、kubelet、kubectl
$ apt-get update && apt-get install -y kubeadm kubelet kubectl

# 2. 初始化控制平面节点
$ kubeadm init –control-plane-endpoint “vip:6443” –upload-certs

# 3. 加入其他控制平面节点
$ kubeadm join vip:6443 –token –discovery-token-ca-cert-hash sha256: –control-plane

# 4. 加入工作节点
$ kubeadm join vip:6443 –token –discovery-token-ca-cert-hash sha256:

# 5. 安装网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

# 6. 验证集群状态
$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
master1 Ready control-plane,master 1h v1.20.4
master2 Ready control-plane,master 1h v1.20.4
master3 Ready control-plane,master 1h v1.20.4
worker1 Ready 1h v1.20.4
worker2 Ready 1h v1.20.4
worker3 Ready 1h v1.20.4

3.1.2 部署YashanDB高可用集群

# 部署YashanDB高可用集群

# 1. 创建命名空间
$ kubectl create namespace yashanb

# 2. 创建存储类
$ cat storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: yashanb-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
iopsPerGB: “10”
encrypted: “true”
reclaimPolicy: Retain
allowVolumeExpansion: true

$ kubectl apply -f storageclass.yaml

# 3. 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashanb-pvc
namespace: yashanb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 200Gi
storageClassName: yashanb-storage

$ kubectl apply -f pvc.yaml

# 4. 创建YashanDB主实例
$ cat yashanb-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-master
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: master
template:
metadata:
labels:
app: yashanb
role: master
spec:
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
volumeMounts:
– name: yashanb-data
mountPath: /data
volumes:
– name: yashanb-data
persistentVolumeClaim:
claimName: yashanb-pvc

$ kubectl apply -f yashanb-master.yaml

# 5. 创建YashanDB备实例
$ cat yashanb-slave.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-slave
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: slave
template:
metadata:
labels:
app: yashanb
role: slave
spec:
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
– name: REPLICATION_ROLE
value: slave
– name: MASTER_HOST
value: yashanb-master
– name: MASTER_PORT
value: “1521”
– name: MASTER_USER
value: replication
– name: MASTER_PASSWORD
value: replication123
volumeMounts:
– name: yashanb-data-slave
mountPath: /data
volumes:
– name: yashanb-data-slave
persistentVolumeClaim:
claimName: yashanb-pvc-slave

$ kubectl apply -f yashanb-slave.yaml

# 6. 创建Service
$ cat yashanb-service.yaml
apiVersion: v1
kind: Service
metadata:
name: yashanb
namespace: yashanb
spec:
selector:
app: yashanb
ports:
– port: 1521
targetPort: 1521
type: ClusterIP

$ kubectl apply -f yashanb-service.yaml

# 7. 创建Ingress
$ cat yashanb-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yashanb-ingress
namespace: yashanb
spec:
rules:
– host: yashanb.fgedu.net.cn
http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: yashanb
port:
number: 1521

$ kubectl apply -f yashanb-ingress.yaml

3.1.3 配置YashanDB K8s高可用

# 配置YashanDB K8s高可用

# 1. 配置PodDisruptionBudget
$ cat pdb.yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: yashanb-pdb
namespace: yashanb
spec:
minAvailable: 1
selector:
matchLabels:
app: yashanb

$ kubectl apply -f pdb.yaml

# 2. 配置HorizontalPodAutoscaler
$ cat hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: yashanb-hpa
namespace: yashanb
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: yashanb-master
minReplicas: 1
maxReplicas: 3
metrics:
– type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
– type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80

$ kubectl apply -f hpa.yaml

# 3. 配置Pod亲和性和反亲和性
$ cat yashanb-master-affinity.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-master
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: master
template:
metadata:
labels:
app: yashanb
role: master
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
– labelSelector:
matchExpressions:
– key: app
operator: In
values:
– yashanb
topologyKey: “kubernetes.io/hostname”
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
volumeMounts:
– name: yashanb-data
mountPath: /data
volumes:
– name: yashanb-data
persistentVolumeClaim:
claimName: yashanb-pvc

$ kubectl apply -f yashanb-master-affinity.yaml

3.2 YashanDB K8s高可用监控

3.2.1 K8s监控配置

# K8s监控配置

# 1. 部署Prometheus和Grafana
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm install prometheus prometheus-community/kube-prometheus-stack

# 2. 查看Prometheus和Grafana服务
$ kubectl get svc -n monitoring

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-operated ClusterIP None 9090/TCP 10m
prometheus-operator ClusterIP 10.96.0.100 8080/TCP 10m
grafana ClusterIP 10.96.0.101 3000/TCP 10m

# 3. 访问Grafana
# 端口转发
$ kubectl port-forward svc/grafana 3000:3000 -n monitoring

# 访问http://localhost:3000
# 默认用户名:admin
# 默认密码:prom-operator

# 4. 导入YashanDB监控面板
# 在Grafana中导入面板ID:12345(示例)

3.2.2 YashanDB K8s监控脚本

#!/bin/bash
# k8s_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# K8s监控脚本

# 输出文件
output_file=”/tmp/k8s_monitor_$(date +%Y%m%d_%H%M%S).log”

echo “开始监控YashanDB K8s高可用” > ${output_file}
echo “监控时间: $(date)” >> ${output_file}
echo “” >> ${output_file}

# 查看集群状态
echo “===== 集群状态 ====” >> ${output_file}
kubectl cluster-info >> ${output_file}
echo “” >> ${output_file}

# 查看节点状态
echo “===== 节点状态 ====” >> ${output_file}
kubectl get nodes >> ${output_file}
echo “” >> ${output_file}

# 查看Pod状态
echo “===== Pod状态 ====” >> ${output_file}
kubectl get pods -n yashanb >> ${output_file}
echo “” >> ${output_file}

# 查看Service状态
echo “===== Service状态 ====” >> ${output_file}
kubectl get svc -n yashanb >> ${output_file}
echo “” >> ${output_file}

# 查看存储状态
echo “===== 存储状态 ====” >> ${output_file}
kubectl get pvc -n yashanb >> ${output_file}
echo “” >> ${output_file}

# 查看数据库状态
echo “===== 数据库状态 ====” >> ${output_file}
kubectl exec -it $(kubectl get pods -n yashanb -l app=yashanb,role=master -o name) -n yashanb — bash -c “sqlplus -s fgedu/fgedu123@localhost:1521/fgedudb << EOF SELECT status FROM v\$instance; EXIT; EOF" >> ${output_file}
echo “” >> ${output_file}

echo “监控完成,结果保存至:${output_file}” >> ${output_file}
echo “监控完成,结果保存至:${output_file}”

3.3 YashanDB K8s高可用故障排查

3.3.1 YashanDB K8s故障排查步骤

# K8s故障排查步骤

# 1. 检查集群状态
$ kubectl cluster-info
$ kubectl get nodes

# 2. 检查Pod状态
$ kubectl get pods -n yashanb
$ kubectl describe pod -n yashanb

# 3. 检查Pod日志
$ kubectl logs -n yashanb
$ kubectl logs -n yashanb –previous

# 4. 检查Service状态
$ kubectl get svc -n yashanb
$ kubectl describe svc -n yashanb

# 5. 检查存储状态
$ kubectl get pvc -n yashanb
$ kubectl describe pvc -n yashanb

# 6. 检查网络状态
$ kubectl exec -it -n yashanb — ping
$ kubectl exec -it -n yashanb — curl :

# 7. 检查数据库状态
$ kubectl exec -it -n yashanb — bash -c “sqlplus -s fgedu/fgedu123@localhost:1521/fgedudb << EOF SELECT status FROM v\$instance; EXIT; EOF" # 8. 解决问题 # 重启Pod $ kubectl delete pod -n yashanb

# 检查存储
$ kubectl describe pvc -n yashanb

# 检查网络
$ kubectl get networkpolicies -n yashanb

3.3.2 YashanDB K8s常见错误及解决方法

# 常见错误及解决方法

# 错误1:Pod启动失败
ERROR: failed to start container “yashanb”: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused “exec: \”start.sh\”: executable file not found in $PATH”

# 解决方法:检查镜像是否正确,确保启动脚本存在

# 错误2:持久化存储失败
ERROR: failed to mount volume “yashanb-data”: failed to mount volume: timed out waiting for the condition

# 解决方法:检查存储配置,确保存储可用

# 错误3:Service无法访问
ERROR: ORA-12154: TNS:could not resolve the connect identifier specified

# 解决方法:检查Service配置,确保Service名称正确

# 错误4:Pod调度失败
ERROR: 0/6 nodes are available: 3 node(s) had taints that the pod didn’t tolerate, 3 node(s) didn’t match pod affinity/anti-affinity rules.

# 解决方法:检查节点亲和性配置,确保Pod可以调度到节点

# 错误5:资源不足
ERROR: 0/6 nodes are available: 6 Insufficient memory.

# 解决方法:增加节点资源,或调整Pod资源限制

风哥提示:K8s高可用部署需要充分的监控和故障排查机制,及时发现和解决问题。建议建立完善的监控系统,确保K8s集群和YashanDB的稳定运行。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 YashanDB K8s高可用部署案例一

案例背景:某企业需要在Kubernetes集群中部署YashanDB高可用集群,确保数据库服务的可靠性。

# 案例配置

# 1. 环境准备
– Kubernetes集群:3个控制平面节点,3个工作节点
– Kubernetes版本:1.20.4
– Docker版本:20.10.8
– 存储:AWS EBS
– 网络:Calico

# 2. 部署步骤

# 创建命名空间
$ kubectl create namespace yashanb

# 创建存储类
$ cat storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
iopsPerGB: “10”
encrypted: “true”
reclaimPolicy: Retain
allowVolumeExpansion: true

$ kubectl apply -f storageclass.yaml

# 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashanb-pvc
namespace: yashanb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 200Gi
storageClassName: gp2

$ kubectl apply -f pvc.yaml

# 创建YashanDB主实例
$ cat yashanb-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-master
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: master
template:
metadata:
labels:
app: yashanb
role: master
spec:
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
volumeMounts:
– name: yashanb-data
mountPath: /data
volumes:
– name: yashanb-data
persistentVolumeClaim:
claimName: yashanb-pvc

$ kubectl apply -f yashanb-master.yaml

# 创建YashanDB备实例
$ cat yashanb-slave.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-slave
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: slave
template:
metadata:
labels:
app: yashanb
role: slave
spec:
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
– name: REPLICATION_ROLE
value: slave
– name: MASTER_HOST
value: yashanb-master
– name: MASTER_PORT
value: “1521”
– name: MASTER_USER
value: replication
– name: MASTER_PASSWORD
value: replication123
volumeMounts:
– name: yashanb-data-slave
mountPath: /data
volumes:
– name: yashanb-data-slave
persistentVolumeClaim:
claimName: yashanb-pvc-slave

$ kubectl apply -f yashanb-slave.yaml

# 创建Service
$ cat yashanb-service.yaml
apiVersion: v1
kind: Service
metadata:
name: yashanb
namespace: yashanb
spec:
selector:
app: yashanb
ports:
– port: 1521
targetPort: 1521
type: ClusterIP

$ kubectl apply -f yashanb-service.yaml

# 3. 验证部署
$ kubectl get all -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-6x7k9 1/1 Running 0 5m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 3m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/yashanb ClusterIP 10.96.0.100 1521/TCP 2m

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/yashanb-master 1/1 1/1 1/1 5m
deployment.apps/yashanb-slave 1/1 1/1 1/1 3m

# 4. 测试高可用
# 模拟主实例故障
$ kubectl delete pod yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb

# 查看新的主实例
$ kubectl get pods -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-7x8k9 1/1 Running 0 1m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 5m

# 验证数据库连接
$ sqlplus fgedu/fgedu123@yashanb:1521/fgedudb

SQL*Plus: Release 19.0.0.0.0 – Production on Thu Apr 1 10:30:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
YashanDB Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
Version 19.3.0.0.0

SQL> SELECT * FROM dual;

DUMMY
——-
X

SQL> exit

4.2 YashanDB K8s高可用部署案例二

案例背景:某电商系统需要在Kubernetes集群中部署YashanDB高可用集群,确保数据库服务的可靠性和弹性。

# 案例配置

# 1. 环境准备
– Kubernetes集群:3个控制平面节点,5个工作节点
– Kubernetes版本:1.21.0
– Docker版本:20.10.8
– 存储:Ceph分布式存储
– 网络:Flannel

# 2. 部署步骤

# 创建命名空间
$ kubectl create namespace yashanb

# 创建存储类
$ cat storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph
provisioner: kubernetes.io/rbd
parameters:
monitors: 192.168.1.100:6789,192.168.1.101:6789,192.168.1.102:6789
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: kube-system
pool: kubernetes
userId: kube
userSecretName: ceph-user-secret
userSecretNamespace: kube-system
imageFormat: “2”
imageFeatures: layering
reclaimPolicy: Retain
allowVolumeExpansion: true

$ kubectl apply -f storageclass.yaml

# 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashanb-pvc
namespace: yashanb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: ceph

$ kubectl apply -f pvc.yaml

# 创建YashanDB主实例
$ cat yashanb-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-master
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: master
template:
metadata:
labels:
app: yashanb
role: master
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
– labelSelector:
matchExpressions:
– key: app
operator: In
values:
– yashanb
topologyKey: “kubernetes.io/hostname”
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
resources:
requests:
cpu: 4
memory: 8Gi
limits:
cpu: 8
memory: 16Gi
volumeMounts:
– name: yashanb-data
mountPath: /data
volumes:
– name: yashanb-data
persistentVolumeClaim:
claimName: yashanb-pvc

$ kubectl apply -f yashanb-master.yaml

# 创建YashanDB备实例
$ cat yashanb-slave.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-slave
namespace: yashanb
spec:
replicas: 2
selector:
matchLabels:
app: yashanb
role: slave
template:
metadata:
labels:
app: yashanb
role: slave
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
– labelSelector:
matchExpressions:
– key: app
operator: In
values:
– yashanb
topologyKey: “kubernetes.io/hostname”
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
– name: REPLICATION_ROLE
value: slave
– name: MASTER_HOST
value: yashanb-master
– name: MASTER_PORT
value: “1521”
– name: MASTER_USER
value: replication
– name: MASTER_PASSWORD
value: replication123
resources:
requests:
cpu: 4
memory: 8Gi
limits:
cpu: 8
memory: 16Gi
volumeMounts:
– name: yashanb-data-slave
mountPath: /data
volumes:
– name: yashanb-data-slave
persistentVolumeClaim:
claimName: yashanb-pvc-slave

$ kubectl apply -f yashanb-slave.yaml

# 创建Service
$ cat yashanb-service.yaml
apiVersion: v1
kind: Service
metadata:
name: yashanb
namespace: yashanb
spec:
selector:
app: yashanb
ports:
– port: 1521
targetPort: 1521
type: ClusterIP

$ kubectl apply -f yashanb-service.yaml

# 创建HorizontalPodAutoscaler
$ cat hpa.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: yashanb-hpa
namespace: yashanb
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: yashanb-master
minReplicas: 1
maxReplicas: 3
metrics:
– type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
– type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80

$ kubectl apply -f hpa.yaml

# 3. 验证部署
$ kubectl get all -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-6x7k9 1/1 Running 0 5m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 3m
pod/yashanb-slave-6f8d7c5b4c-8r9s3 1/1 Running 0 3m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/yashanb ClusterIP 10.96.0.100 1521/TCP 2m

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/yashanb-master 1/1 1/1 1/1 5m
deployment.apps/yashanb-slave 2/2 2/2 2/2 3m

# 4. 测试高可用
# 模拟主实例故障
$ kubectl delete pod yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb

# 查看新的主实例
$ kubectl get pods -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-7x8k9 1/1 Running 0 1m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 5m
pod/yashanb-slave-6f8d7c5b4c-8r9s3 1/1 Running 0 5m

# 验证数据库连接
$ sqlplus fgedu/fgedu123@yashanb:1521/fgedudb

SQL*Plus: Release 19.0.0.0.0 – Production on Thu Apr 1 11:00:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
YashanDB Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
Version 19.3.0.0.0

SQL> SELECT * FROM dual;

DUMMY
——-
X

SQL> exit

4.3 YashanDB K8s高可用部署案例三

案例背景:某金融系统需要在Kubernetes集群中部署YashanDB高可用集群,确保数据库服务的可靠性、安全性和性能。

# 案例配置

# 1. 环境准备
– Kubernetes集群:3个控制平面节点,4个工作节点
– Kubernetes版本:1.22.0
– Docker版本:20.10.8
– 存储:OpenEBS
– 网络:Calico

# 2. 部署步骤

# 创建命名空间
$ kubectl create namespace yashanb

# 部署OpenEBS
$ helm repo add openebs https://openebs.github.io/charts
$ helm install openebs openebs/openebs –namespace openebs –create-namespace

# 创建存储类
$ cat storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-jiva-csi-default
provisioner: jiva.csi.openebs.io
parameters:
cas-type: jiva
replica-count: “3”
storage: “8Gi”
reclaimPolicy: Retain
allowVolumeExpansion: true

$ kubectl apply -f storageclass.yaml

# 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashanb-pvc
namespace: yashanb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 500Gi
storageClassName: openebs-jiva-csi-default

$ kubectl apply -f pvc.yaml

# 创建YashanDB主实例
$ cat yashanb-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-master
namespace: yashanb
spec:
replicas: 1
selector:
matchLabels:
app: yashanb
role: master
template:
metadata:
labels:
app: yashanb
role: master
spec:
securityContext:
runAsUser: 0
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
resources:
requests:
cpu: 8
memory: 16Gi
limits:
cpu: 16
memory: 32Gi
volumeMounts:
– name: yashanb-data
mountPath: /data
volumes:
– name: yashanb-data
persistentVolumeClaim:
claimName: yashanb-pvc

$ kubectl apply -f yashanb-master.yaml

# 创建YashanDB备实例
$ cat yashanb-slave.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashanb-slave
namespace: yashanb
spec:
replicas: 2
selector:
matchLabels:
app: yashanb
role: slave
template:
metadata:
labels:
app: yashanb
role: slave
spec:
securityContext:
runAsUser: 0
containers:
– name: yashanb
image: yashanb/yashanb:19c
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
– name: REPLICATION_ROLE
value: slave
– name: MASTER_HOST
value: yashanb-master
– name: MASTER_PORT
value: “1521”
– name: MASTER_USER
value: replication
– name: MASTER_PASSWORD
value: replication123
resources:
requests:
cpu: 8
memory: 16Gi
limits:
cpu: 16
memory: 32Gi
volumeMounts:
– name: yashanb-data-slave
mountPath: /data
volumes:
– name: yashanb-data-slave
persistentVolumeClaim:
claimName: yashanb-pvc-slave

$ kubectl apply -f yashanb-slave.yaml

# 创建Service
$ cat yashanb-service.yaml
apiVersion: v1
kind: Service
metadata:
name: yashanb
namespace: yashanb
spec:
selector:
app: yashanb
ports:
– port: 1521
targetPort: 1521
type: ClusterIP

$ kubectl apply -f yashanb-service.yaml

# 创建Ingress
$ cat yashanb-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yashanb-ingress
namespace: yashanb
spec:
rules:
– host: yashanb.fgedu.net.cn
http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: yashanb
port:
number: 1521

$ kubectl apply -f yashanb-ingress.yaml

# 3. 验证部署
$ kubectl get all -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-6x7k9 1/1 Running 0 5m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 3m
pod/yashanb-slave-6f8d7c5b4c-8r9s3 1/1 Running 0 3m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/yashanb ClusterIP 10.96.0.100 1521/TCP 2m

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/yashanb-master 1/1 1/1 1/1 5m
deployment.apps/yashanb-slave 2/2 2/2 2/2 3m

# 4. 测试高可用
# 模拟主实例故障
$ kubectl delete pod yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb

# 查看新的主实例
$ kubectl get pods -n yashanb

NAME READY STATUS RESTARTS AGE
pod/yashanb-master-5d7f9b8c9d-7x8k9 1/1 Running 0 1m
pod/yashanb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 5m
pod/yashanb-slave-6f8d7c5b4c-8r9s3 1/1 Running 0 5m

# 验证数据库连接
$ sqlplus fgedu/fgedu123@yashanb.fgedu.net.cn:1521/fgedudb

SQL*Plus: Release 19.0.0.0.0 – Production on Thu Apr 1 11:30:00 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Connected to:
YashanDB Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
Version 19.3.0.0.0

SQL> SELECT * FROM dual;

DUMMY
——-
X

SQL> exit

生产环境建议:K8s高可用部署需要根据实际环境和业务需求进行调整。建议在实施前进行充分的测试和评估,确保部署方案的可行性和可靠性。from yashanDB视频:www.itpux.com

Part05-风哥经验总结与分享

5.1 YashanDB K8s高可用部署经验总结

YashanDB K8s高可用部署经验总结:

  • 控制平面高可用:部署多个控制平面节点,确保API Server、etcd等组件的高可用
  • 节点高可用:部署多个工作节点,确保Pod的高可用
  • 存储高可用:使用分布式存储,确保数据的高可用
  • 网络高可用:配置冗余网络,确保网络的高可用
  • 应用高可用:部署多个Pod副本,确保应用的高可用
  • 监控告警:建立完善的监控系统,及时发现和解决问题
  • 备份策略:定期备份数据库数据,确保数据安全
  • 故障演练:定期进行故障演练,确保高可用机制有效
风哥提示:K8s高可用部署是一个复杂的系统工程,需要综合考虑多个因素。建议在实施前进行充分的规划和测试,确保部署方案的可行性和可靠性。

5.2 YashanDB K8s高可用部署检查清单

# YashanDB K8s高可用部署检查清单
– [ ] Kubernetes集群是否部署完成
– [ ] 控制平面是否高可用
– [ ] 工作节点是否足够
– [ ] 存储是否配置正确
– [ ] 网络是否配置合理
– [ ] YashanDB是否部署完成
– [ ] 高可用机制是否配置正确
– [ ] 监控系统是否建立
– [ ] 备份策略是否制定
– [ ] 故障演练是否进行

# K8s高可用部署实施流程
1. 需求分析:明确业务对数据库可用性的要求
2. 环境准备:搭建Kubernetes集群,配置存储和网络
3. 部署实施:部署YashanDB,配置高可用
4. 测试验证:测试高可用机制,确保故障转移正常
5. 监控配置:配置监控系统,建立告警机制
6. 运维管理:制定运维流程,定期进行维护
7. 持续优化:根据实际运行情况,持续优化部署方案

5.3 YashanDB K8s高可用部署工具推荐

YashanDB K8s高可用部署常用工具:

  • kubeadm:Kubernetes集群部署工具
  • Helm:Kubernetes包管理工具
  • Prometheus:监控系统
  • Grafana:可视化平台
  • Calico:网络插件
  • OpenEBS:容器原生存储
  • Ansible:自动化工具
  • Terraform:基础设施即代码工具
持续改进:Kubernetes技术在不断发展,YashanDB K8s高可用部署方案也需要不断更新和优化。建议关注Kubernetes的最新发展,及时调整部署方案,确保系统的可靠性和性能。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息