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

yashandb教程FG189-YashanDB容器高可用部署

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

Part01-基础概念与理论知识

1.1 YashanDB容器化的概念

YashanDB容器化是指将YashanDB数据库部署在容器环境中,通过容器技术实现数据库的隔离、标准化和快速部署。容器化是现代应用部署的主流方式,为数据库部署带来了新的可能性。更多视频教程www.fgedu.net.cn

YashanDB容器化的核心概念:

  • 容器:轻量级的隔离环境,包含应用及其依赖
  • 镜像:容器的模板,包含应用及其运行环境
  • Docker:流行的容器引擎
  • Kubernetes:容器编排平台,用于管理容器集群
  • 持久化存储:容器数据的持久化方案

1.2 YashanDB容器高可用架构

YashanDB容器高可用架构通常包括以下组件:

  • 容器编排平台:如Kubernetes,用于管理容器集群
  • YashanDB主实例:处理主要的数据库操作
  • YashanDB备实例:作为主实例的备份,提供高可用
  • 负载均衡器:分发客户端请求
  • 持久化存储:存储数据库数据
  • 监控系统:监控容器和数据库状态

1.3 YashanDB容器高可用的优势

YashanDB容器高可用的优势包括:

  • 快速部署:容器化部署速度快,减少部署时间
  • 标准化:容器镜像标准化,确保环境一致性
  • 弹性伸缩:根据负载自动调整容器数量
  • 高可用性:通过多副本和自动故障转移实现高可用
  • 资源隔离:容器之间资源隔离,提高安全性
  • 易于管理:通过容器编排平台统一管理
风哥提示:容器化是现代应用部署的趋势,YashanDB容器高可用部署可以提高系统的可靠性和可维护性。在实施容器化部署时,应充分考虑持久化存储、网络配置、监控等因素。学习交流加群风哥微信: itpux-com

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. 高可用配置
– 多副本:部署多个数据库实例
– 自动故障转移:配置自动故障转移机制
– 健康检查:配置容器健康检查

生产环境建议:容器高可用部署需要充分考虑系统资源、网络配置、存储方案等因素。建议在测试环境中进行充分测试,找到最优的部署方案。学习交流加群风哥QQ113257174

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

3.1 YashanDB容器高可用部署实现

3.1.1 使用Docker部署YashanDB

# 使用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高可用集群

# 使用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 1521/TCP 2m

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容器高可用

# 配置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容器监控

# 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://:3000

3.2.2 YashanDB容器监控脚本

#!/bin/bash
# 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

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

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

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 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容器高可用部署案例二

案例背景:某电商系统需要在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 192.168.1.100:2377

# 创建网络
$ 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 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.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

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

Part05-风哥经验总结与分享

5.1 YashanDB容器高可用部署经验总结

YashanDB容器高可用部署经验总结:

  • 环境准备:确保容器环境的稳定性和资源充足
  • 存储方案:选择合适的持久化存储,确保数据安全
  • 网络配置:确保容器间通信正常,网络延迟低
  • 高可用设计:采用主备架构或多副本架构,确保服务可靠性
  • 监控机制:建立完善的监控系统,及时发现和解决问题
  • 备份策略:定期备份数据库数据,确保数据安全
  • 故障演练:定期进行故障演练,确保高可用机制有效
  • 版本管理:管理容器镜像版本,确保环境一致性
风哥提示:容器高可用部署是一个复杂的系统工程,需要综合考虑多个因素。建议在实施前进行充分的规划和测试,确保部署方案的可行性和可靠性。

5.2 YashanDB容器高可用部署检查清单

# YashanDB容器高可用部署检查清单
– [ ] 容器环境是否准备就绪
– [ ] 持久化存储是否配置正确
– [ ] 网络配置是否合理
– [ ] 高可用架构是否设计合理
– [ ] 监控系统是否建立
– [ ] 备份策略是否制定
– [ ] 故障演练是否进行
– [ ] 版本管理是否规范
– [ ] 安全配置是否完善
– [ ] 性能优化是否考虑

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

5.3 YashanDB容器高可用部署工具推荐

YashanDB容器高可用部署常用工具:

  • Docker:容器引擎,用于构建和运行容器
  • Kubernetes:容器编排平台,用于管理容器集群
  • Docker Swarm:Docker内置的容器编排工具
  • Prometheus:监控系统,用于监控容器和数据库状态
  • Grafana:可视化平台,用于展示监控数据
  • Helm:Kubernetes包管理工具,用于部署应用
  • Ansible:自动化工具,用于配置管理
  • Terraform:基础设施即代码工具,用于云资源管理
持续改进:容器技术在不断发展,YashanDB容器高可用部署方案也需要不断更新和优化。建议关注容器技术的最新发展,及时调整部署方案,确保系统的可靠性和性能。

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

联系我们

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

微信号:itpux-com

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