1. 创建PVC
在K8S中,数据是存储在持久化存储卷(Persistent Volume, PV)中的。为了使数据持久化,我们需要先在集群中创建一个Persistent Volume Claim(PVC)
[root@k8s-master nfs]# cat nfs-subdir-external-provisioner-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: oracle-pvc
namespace: oracle
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
[root@k8s-master nfs]# kubectl apply -f nfs-subdir-external-provisioner-pvc.yaml
persistentvolumeclaim/oracle-pvc created
2. 创建Deployment
上面创建好了PVC,那么接下来需要创建Deployment,用于启动Oracle数据库的容器
[root@k8s-master oracle]# cat oracle-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: oracle
namespace: oracle
spec:
replicas: 1
selector:
matchLabels:
role: oracle
template:
metadata:
labels:
role: oracle
spec:
containers:
- name: oracle
imagePullPolicy: IfNotPresent
image: oracledb19c/oracle.19.3.0-ee:oracle19.3.0-ee
ports:
- containerPort: 1521
name: oralce1521
- containerPort: 8080
name: oralce8080
resources:
limits:
cpu: "2"
memory: "6Gi"
requests:
cpu: "500m"
memory: "512Mi"
env:
- name: ORACLE_ALLOW_REMOTE
value: "true"
- name: ORACLE_CHARACTERSET
value: "AL32UTF8"
volumeMounts:
- name: data
mountPath: /opt/oracle/oradata
volumes:
- name: data
persistentVolumeClaim:
claimName: oracle-pvc
[root@k8s-master oracle]# kubectl apply -f oracle-deployment.yaml
deployment.apps/oracle created
3. 创建Service
为了让其他容器能连接oracle,那么需要创建一个Service来暴露1521端口给集群内其他容器
[root@k8s-master oracle]# cat oracle-service.yaml
apiVersion: v1
kind: Service
metadata:
name: oracle-svc
namespace: oracle
spec:
ports:
- name: oralce1521
port: 1521
targetPort: 1521
nodePort: 31521
- name: oralce8080
port: 8080
targetPort: 8080
nodePort: 30080
selector:
role: oracle
type: NodePort
[root@k8s-master oracle]# kubectl apply -f oracle-service.yaml
service/oracle-svc created
4. 连接oracle数据库
我们可以使用客户端来尝试连接oracle数据库
5. oracle相关拓展
5.1 oracle RAC
Oracle数据库可以通过两种方式进行配置:作为单实例(SI)数据库(非集群)或者Real Application Clusters(RAC)数据库。
单实例数据库将Oracle软件、数据库文件、内存和进程全部存储到一台服务器上,单实例数据库在实例(内存和进程)和数据库(数据库文件)之间具有一对一的关系,然而,Oracle RAC环境在数据库和实例之间具有一对多关系。一个Oracle RAC数据库可以有100个实例,所有实例都访问一个数据库。Oracle RAC环境中单个数据库的所有服务器必须属于同一个Oracle Real Application Clusters。
所有的Real Application Clusters都有某些共同点:每个集群都在每个节点上本地安装了Grid Infrastructure(网格基础设施,GI)。Grid Infrastructure包括多种产品:自动存储管理、Oracle Clusterware等等。
Oracle RAC集群中的每个实例都访问共享存储上存储的数据库文件。每个节点还需要本地存储,用于存储GI和Oracle数据库软件。每个节点至少需要公共接口和一个私有接口。每个网络可以使用多个网络接口卡来增加带宽、可用性或者容错能力。
集群由多台互联的计算机或者服务器组成,对于最终用户和应用程序来说,它们就像一台服务器。Oracle数据库的Oracle RAC选项使我们能都对Oracle数据库进行集群。Oracle RAC使用Oracle Clusterware作为基础架构来绑定多个服务器,以便它们作为单个系统运行。
Real Application Clusters(RAC)数据库在RAC集群上托管有多个数据库实例。这些实例访问共享存储上的一组数据库文件。通常,共享存储由托管RAC数据库实例的节点本地的ASM实例提供。在Oracle ASM 19c中,只有一种配置选项,即Flex ASM,Flex ASM可以为集群中的ASM实例提供多种放置方式,通过设置集群中的基数(即ASM实例的数量)来控制。
总体来说,Oracle RAC是一种Oracle数据库架构,它允许在多台服务器上运行Oracle数据库实例,这些实例共享相同的数据存储。RAC涉及如下几个关键点:
- 共享存储:Oracle RAC使用共享存储,如共享磁盘阵列或者网络文件系统(NFS),使多个数据库实例能够访问相同的数据文件。这意味着多个服务器上的不同数据库实例可以同时访问和修改相同的数据,实现数据共享和协作。
- 集群架构:RAC基于集群架构,其中多个数据库实例在多台服务器上并行运行。这些实例可以共同处理用户请求,并通过高速互联网络(如InfiniBand或以太网)相互通信。
- Cache Fusion技术:这是RAC的关键部分,用于在不同节点之间同步数据块的内存缓存。当一个节点需要访问另一个节点的数据时,Cache Fusion会在节点之间传输数据块而不是磁盘I/O。这样可以减少磁盘I/O操作,提高性能并降低延迟。
- 高可用性和负载均衡:RAC提高高可用性,即使一个节点出现故障,那么其他节点仍然可以继续工作。负载均衡确保用户请求在各个节点之间均匀分布,防止某些节点过载而导致性能下降。
- Clusterware管理:Oracle提供Clusterware来管理RAC环境中的资源。Clusterware负责监控节点状态、故障检测和恢复、资源分配等任务,确保集群的稳定运行。