yashandb教程FG189-YashanDB容器高可用部署
本文档风哥主要介绍YashanDB容器高可用部署相关知识,包括YashanDB容器化的概念、高可用架构、优势、规划与环境要求、部署实现、监控、故障排查、生产案例与实战讲解等内容,风哥教程参考YashanDB官方文档容器部署内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 YashanDB容器化的概念
YashanDB容器化是指将YashanDB数据库部署在容器环境中,通过容器技术实现数据库的隔离、标准化和快速部署。容器化是现代应用部署的主流方式,为数据库部署带来了新的可能性。更多视频教程www.fgedu.net.cn
- 容器:轻量级的隔离环境,包含应用及其依赖
- 镜像:容器的模板,包含应用及其运行环境
- Docker:流行的容器引擎
- Kubernetes:容器编排平台,用于管理容器集群
- 持久化存储:容器数据的持久化方案
1.2 YashanDB容器高可用架构
YashanDB容器高可用架构通常包括以下组件:
- 容器编排平台:如Kubernetes,用于管理容器集群
- YashanDB主实例:处理主要的数据库操作
- YashanDB备实例:作为主实例的备份,提供高可用
- 负载均衡器:分发客户端请求
- 持久化存储:存储数据库数据
- 监控系统:监控容器和数据库状态
1.3 YashanDB容器高可用的优势
YashanDB容器高可用的优势包括:
- 快速部署:容器化部署速度快,减少部署时间
- 标准化:容器镜像标准化,确保环境一致性
- 弹性伸缩:根据负载自动调整容器数量
- 高可用性:通过多副本和自动故障转移实现高可用
- 资源隔离:容器之间资源隔离,提高安全性
- 易于管理:通过容器编排平台统一管理
Part02-生产环境规划与建议
2.1 YashanDB容器高可用规划
YashanDB容器高可用规划建议:
– 评估业务需求:明确业务对数据库可用性的要求
– 选择合适的容器编排平台:如Kubernetes
– 设计高可用架构:主备架构、多副本架构等
– 规划存储方案:选择合适的持久化存储
– 制定网络策略:确保容器间通信安全可靠
– 设计监控方案:监控容器和数据库状态
# 高可用架构选择
– 主备架构:一个主实例,一个或多个备实例
– 多主架构:多个主实例,数据同步
– 集群架构:多个节点组成集群,共同提供服务
# 存储方案选择
– 本地存储:性能高,但可靠性低
– 网络存储:如NFS、iSCSI等,可靠性高
– 云存储:如AWS EBS、Azure Disk等
– 分布式存储:如Ceph、GlusterFS等
2.2 YashanDB容器高可用环境要求
YashanDB容器高可用环境要求:
– Docker版本:19.03+
– Kubernetes版本:1.18+
– 节点数量:至少3个节点
– 内存:每个节点至少8GB内存
– CPU:每个节点至少4核CPU
– 存储:每个节点至少100GB磁盘空间
– 网络:节点间网络延迟低于10ms
# 持久化存储要求
– 存储类型:SSD
– 容量:根据数据量确定,建议至少200GB
– IOPS:至少1000 IOPS
– 延迟:低于10ms
# 网络要求
– 网络带宽:至少1Gbps
– 网络延迟:节点间延迟低于10ms
– 网络稳定性:99.99%可用性
2.3 YashanDB容器高可用最佳实践
YashanDB容器高可用最佳实践:
# 1. 容器镜像管理
– 使用官方镜像:从官方仓库获取YashanDB镜像
– 自定义镜像:根据业务需求定制镜像
– 镜像版本控制:使用固定版本标签,避免使用latest
# 2. 持久化存储
– 使用PV/PVC:在Kubernetes中使用持久卷
– 数据备份:定期备份数据库数据
– 存储加密:对敏感数据进行加密存储
# 3. 网络配置
– 使用Service:通过Service暴露数据库服务
– 使用Ingress:实现外部访问
– 网络策略:配置网络访问控制
# 4. 资源管理
– 资源限制:设置容器的CPU和内存限制
– 资源请求:设置容器的CPU和内存请求
– 节点亲和性:将数据库容器部署在特定节点
# 5. 高可用配置
– 多副本:部署多个数据库实例
– 自动故障转移:配置自动故障转移机制
– 健康检查:配置容器健康检查
Part03-生产环境项目实施方案
3.1 YashanDB容器高可用部署实现
3.1.1 使用Docker部署YashanDB
# 1. 拉取YashanDB镜像
$ docker pull yashandb/yashandb:latest
# 2. 运行YashanDB容器
$ docker run -d \
–name yashandb \
-p 1521:1521 \
-v /yashandb/data:/data \
-e DB_NAME=fgedudb \
-e DB_USER=fgedu \
-e DB_PASSWORD=fgedu123 \
yashandb/yashandb:latest
# 3. 查看容器状态
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123def456 yashandb/yashandb:latest “/bin/sh -c ‘start.sh'” 5 minutes ago Up 5 minutes 0.0.0.0:1521->1521/tcp yashandb
# 4. 进入容器
$ docker exec -it yashandb bash
# 5. 连接数据库
$ sqlplus fgedu/fgedu123@localhost:1521/fgedudb
SQL*Plus: Release 19.0.0.0.0 – Production on Thu Apr 1 10: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
3.1.2 使用Kubernetes部署YashanDB高可用集群
# 1. 创建命名空间
$ kubectl create namespace yashandb
# 2. 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashandb-pvc
namespace: yashandb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 200Gi
storageClassName: standard
$ kubectl apply -f pvc.yaml
# 3. 创建YashanDB主实例
$ cat yashandb-master.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashandb-master
namespace: yashandb
spec:
replicas: 1
selector:
matchLabels:
app: yashandb
role: master
template:
metadata:
labels:
app: yashandb
role: master
spec:
containers:
– name: yashandb
image: yashandb/yashandb:latest
ports:
– containerPort: 1521
env:
– name: DB_NAME
value: fgedudb
– name: DB_USER
value: fgedu
– name: DB_PASSWORD
value: fgedu123
volumeMounts:
– name: yashandb-data
mountPath: /data
volumes:
– name: yashandb-data
persistentVolumeClaim:
claimName: yashandb-pvc
$ kubectl apply -f yashandb-master.yaml
# 4. 创建YashanDB备实例
$ cat yashandb-slave.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: yashandb-slave
namespace: yashandb
spec:
replicas: 1
selector:
matchLabels:
app: yashandb
role: slave
template:
metadata:
labels:
app: yashandb
role: slave
spec:
containers:
– name: yashandb
image: yashandb/yashandb:latest
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: yashandb-master
– name: MASTER_PORT
value: “1521”
– name: MASTER_USER
value: replication
– name: MASTER_PASSWORD
value: replication123
volumeMounts:
– name: yashandb-data-slave
mountPath: /data
volumes:
– name: yashandb-data-slave
persistentVolumeClaim:
claimName: yashandb-pvc-slave
$ kubectl apply -f yashandb-slave.yaml
# 5. 创建Service
$ cat yashandb-service.yaml
apiVersion: v1
kind: Service
metadata:
name: yashandb
namespace: yashandb
spec:
selector:
app: yashandb
ports:
– port: 1521
targetPort: 1521
type: ClusterIP
$ kubectl apply -f yashandb-service.yaml
# 6. 查看部署状态
$ kubectl get all -n yashandb
NAME READY STATUS RESTARTS AGE
pod/yashandb-master-5d7f9b8c9d-6x7k9 1/1 Running 0 5m
pod/yashandb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 3m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/yashandb ClusterIP 10.96.0.100
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/yashandb-master 1/1 1/1 1/1 5m
deployment.apps/yashandb-slave 1/1 1/1 1/1 3m
3.1.3 配置YashanDB容器高可用
# 1. 配置主实例
$ docker exec -it yashandb-master bash
# 启用归档模式
SQL> ALTER DATABASE ARCHIVELOG;
# 创建复制用户
SQL> CREATE USER replication IDENTIFIED BY replication123;
SQL> GRANT REPLICATION SLAVE ON *.* TO replication;
# 查看主实例状态
SQL> SELECT status FROM v$instance;
STATUS
——-
OPEN
# 2. 配置备实例
$ docker exec -it yashandb-slave bash
# 启动备实例
SQL> STARTUP MOUNT;
# 配置复制
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
# 查看备实例状态
SQL> SELECT status FROM v$instance;
STATUS
——-
MOUNTED
# 3. 测试高可用
# 模拟主实例故障
$ kubectl delete pod yashandb-master-5d7f9b8c9d-6x7k9 -n yashandb
# 查看新的主实例
$ kubectl get pods -n yashandb
NAME READY STATUS RESTARTS AGE
pod/yashandb-master-5d7f9b8c9d-7x8k9 1/1 Running 0 1m
pod/yashandb-slave-6f8d7c5b4c-7p8q2 1/1 Running 0 5m
# 验证数据库连接
$ sqlplus fgedu/fgedu123@yashandb: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
3.2 YashanDB容器高可用监控
3.2.1 YashanDB容器监控
# 1. 使用Docker stats监控容器
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
abc123def456 yashandb 0.50% 1.2GB / 8GB 15.00% 10MB / 5MB 100MB / 50MB 50
# 2. 使用Kubernetes监控
$ kubectl top pod -n yashandb
NAME CPU(cores) MEMORY(bytes)
yashandb-master-5d7f9b8c9d-6x7k9 500m 1.2Gi
yashandb-slave-6f8d7c5b4c-7p8q2 300m 1.0Gi
# 3. 使用Prometheus监控
# 部署Prometheus和Grafana
$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm install prometheus prometheus-community/kube-prometheus-stack
# 查看监控面板
# 访问Grafana UI: http://
3.2.2 YashanDB容器监控脚本
# container_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
# 容器监控脚本
# 输出文件
output_file=”/tmp/container_monitor_$(date +%Y%m%d_%H%M%S).log”
echo “开始监控YashanDB容器” > ${output_file}
echo “监控时间: $(date)” >> ${output_file}
echo “” >> ${output_file}
# 查看容器状态
echo “===== 容器状态 ====” >> ${output_file}
docker ps | grep yashanb >> ${output_file}
echo “” >> ${output_file}
# 查看容器资源使用情况
echo “===== 容器资源使用情况 ====” >> ${output_file}
docker stats –no-stream | grep yashanb >> ${output_file}
echo “” >> ${output_file}
# 查看数据库状态
echo “===== 数据库状态 ====” >> ${output_file}
docker exec -it 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}
docker exec -it yashanb-slave 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容器高可用故障排查
3.3.1 YashanDB容器故障排查步骤
# 1. 检查容器状态
$ docker ps | grep yashanb
$ kubectl get pods -n yashanb
# 2. 检查容器日志
$ docker logs yashanb
$ kubectl logs yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb
# 3. 检查数据库状态
$ docker exec -it yashanb bash -c “sqlplus -s fgedu/fgedu123@localhost:1521/fgedudb << EOF
SELECT status FROM v\$instance;
EXIT;
EOF"
# 4. 检查复制状态
$ docker exec -it yashanb-slave bash -c "sqlplus -s fgedu/fgedu123@localhost:1521/fgedudb << EOF
SELECT status FROM v\$instance;
EXIT;
EOF"
# 5. 检查存储状态
$ kubectl get pvc -n yashanb
$ docker exec -it yashanb bash -c "df -h"
# 6. 检查网络状态
$ docker exec -it yashanb bash -c "ping yashanb-slave"
$ kubectl exec -it yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb -- ping yashanb-slave
# 7. 解决问题
# 重启容器
$ docker restart yashanb
$ kubectl delete pod yashanb-master-5d7f9b8c9d-6x7k9 -n yashanb
# 检查存储
$ kubectl describe pvc yashanb-pvc -n yashanb
3.3.2 YashanDB容器常见错误及解决方法
# 错误1:容器启动失败
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:复制失败
ERROR: ORA-16047: DGID mismatch between destination standby and source primary
# 解决方法:检查复制配置,确保主备实例的DGID一致
# 错误4:网络连接失败
ERROR: ORA-12154: TNS:could not resolve the connect identifier specified
# 解决方法:检查网络配置,确保容器间通信正常
# 错误5:资源不足
ERROR: failed to create container: rpc error: code = ResourceExhausted desc = failed to allocate memory: container requires 8GB but only 4GB available
# 解决方法:增加节点资源,或调整容器资源限制
Part04-生产案例与实战讲解
4.1 YashanDB容器高可用部署案例一
案例背景:某企业需要在Kubernetes集群中部署YashanDB高可用集群,确保数据库服务的可靠性。
# 1. 环境准备
– Kubernetes集群:3个节点
– Docker版本:20.10.8
– Kubernetes版本:1.20.4
– 存储:NFS持久化存储
# 2. 部署步骤
# 创建命名空间
$ kubectl create namespace yashanb
# 创建持久卷
$ cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: yashanb-pv
labels:
type: nfs
spec:
capacity:
storage: 200Gi
accessModes:
– ReadWriteOnce
nfs:
server: 192.168.1.100
path: /nfs/yashanb
$ kubectl apply -f pv.yaml
# 创建持久卷声明
$ cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yashanb-pvc
namespace: yashanb
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 200Gi
selector:
matchLabels:
type: nfs
$ 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
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容器高可用部署案例二
案例背景:某电商系统需要在Docker Swarm中部署YashanDB高可用集群,确保数据库服务的可靠性。
# 1. 环境准备
– Docker Swarm集群:3个节点
– Docker版本:20.10.8
– 存储:GlusterFS分布式存储
# 2. 部署步骤
# 初始化Docker Swarm
$ docker swarm init –advertise-addr 192.168.1.100
# 加入其他节点
$ docker swarm join –token
# 创建网络
$ docker network create -d overlay yashanb-network
# 创建服务
$ docker service create \
–name yashanb-master \
–network yashanb-network \
–replicas 1 \
–mount type=volume,source=yashanb-data,target=/data \
–env DB_NAME=fgedudb \
–env DB_USER=fgedu \
–env DB_PASSWORD=fgedu123 \
–publish 1521:1521 \
yashanb/yashanb:19c
$ docker service create \
–name yashanb-slave \
–network yashanb-network \
–replicas 1 \
–mount type=volume,source=yashanb-data-slave,target=/data \
–env DB_NAME=fgedudb \
–env DB_USER=fgedu \
–env DB_PASSWORD=fgedu123 \
–env REPLICATION_ROLE=slave \
–env MASTER_HOST=yashanb-master \
–env MASTER_PORT=1521 \
–env MASTER_USER=replication \
–env MASTER_PASSWORD=replication123 \
yashanb/yashanb:19c
# 3. 验证部署
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
yashanb-master replicated 1/1 yashanb/yashanb:19c *:1521->1521/tcp
yashanb-slave replicated 1/1 yashanb/yashanb:19c
# 4. 测试高可用
# 模拟主实例故障
$ docker service update –force yashanb-master
# 查看服务状态
$ docker service ps yashanb-master
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
abc123def456 yashanb-master.1 yashanb/yashanb:19c node1 Running Running 2 minutes ago
# 验证数据库连接
$ sqlplus fgedu/fgedu123@localhost: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容器高可用部署案例三
案例背景:某金融系统需要在云环境中部署YashanDB高可用集群,确保数据库服务的可靠性和安全性。
# 1. 环境准备
– 云平台:AWS
– Kubernetes集群:EKS
– 存储:EBS
– 网络:VPC
# 2. 部署步骤
# 创建EKS集群
$ eksctl create cluster \
–name yashanb-cluster \
–region us-west-2 \
–nodegroup-name standard-workers \
–node-type t3.xlarge \
–nodes 3 \
–nodes-min 3 \
–nodes-max 5
# 配置kubectl
$ aws eks update-kubeconfig –name yashanb-cluster –region us-west-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
# 创建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
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/yashanb ClusterIP 10.96.0.100
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.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
Part05-风哥经验总结与分享
5.1 YashanDB容器高可用部署经验总结
YashanDB容器高可用部署经验总结:
- 环境准备:确保容器环境的稳定性和资源充足
- 存储方案:选择合适的持久化存储,确保数据安全
- 网络配置:确保容器间通信正常,网络延迟低
- 高可用设计:采用主备架构或多副本架构,确保服务可靠性
- 监控机制:建立完善的监控系统,及时发现和解决问题
- 备份策略:定期备份数据库数据,确保数据安全
- 故障演练:定期进行故障演练,确保高可用机制有效
- 版本管理:管理容器镜像版本,确保环境一致性
5.2 YashanDB容器高可用部署检查清单
– [ ] 容器环境是否准备就绪
– [ ] 持久化存储是否配置正确
– [ ] 网络配置是否合理
– [ ] 高可用架构是否设计合理
– [ ] 监控系统是否建立
– [ ] 备份策略是否制定
– [ ] 故障演练是否进行
– [ ] 版本管理是否规范
– [ ] 安全配置是否完善
– [ ] 性能优化是否考虑
# 容器高可用部署实施流程
1. 需求分析:明确业务对数据库可用性的要求
2. 环境准备:搭建容器环境,配置存储和网络
3. 部署实施:部署YashanDB容器,配置高可用
4. 测试验证:测试高可用机制,确保故障转移正常
5. 监控配置:配置监控系统,建立告警机制
6. 运维管理:制定运维流程,定期进行维护
7. 持续优化:根据实际运行情况,持续优化部署方案
5.3 YashanDB容器高可用部署工具推荐
YashanDB容器高可用部署常用工具:
- Docker:容器引擎,用于构建和运行容器
- Kubernetes:容器编排平台,用于管理容器集群
- Docker Swarm:Docker内置的容器编排工具
- Prometheus:监控系统,用于监控容器和数据库状态
- Grafana:可视化平台,用于展示监控数据
- Helm:Kubernetes包管理工具,用于部署应用
- Ansible:自动化工具,用于配置管理
- Terraform:基础设施即代码工具,用于云资源管理
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
