首页
/ Oracle Docker镜像中部署RAC集群的权限问题分析与解决

Oracle Docker镜像中部署RAC集群的权限问题分析与解决

2025-06-01 16:59:17作者:何举烈Damon

问题背景

在使用Oracle官方提供的docker-images项目中OracleRealApplicationClusters容器部署RAC集群时,许多用户会遇到权限配置和存储挂载方面的问题。本文详细分析了一个典型部署失败案例,并提供了完整的解决方案。

关键错误现象

部署过程中主要出现以下几类错误:

  1. ASM磁盘权限问题

    • 磁盘映像文件的所有者和组不符合要求
    • 预期所有者应为"grid",但实际为"oracle"
    • 预期组应为"asmadmin",但实际为"oinstall"
  2. 存储挂载配置问题

    • NFS挂载选项不符合Oracle要求
    • 缺少必要的挂载参数如rsize、wsize等
  3. 系统资源检查失败

    • 交换空间不足(要求16GB)
    • 内存配置不符合最低要求

根本原因分析

经过深入分析,这些问题主要源于以下几个配置不当:

  1. 存储卷挂载方式错误:直接使用了主机目录挂载而非通过Docker volume机制
  2. NFS挂载参数不完整:缺少Oracle RAC必需的NFS挂载选项
  3. 容器资源限制不足:未配置足够的内存和交换空间

完整解决方案

1. 正确配置网络环境

首先需要创建两个隔离的网络环境:

docker network create --driver=bridge --subnet=172.16.1.0/24 rac_pub1_nw
docker network create --driver=bridge --subnet=192.168.17.0/24 rac_priv1_nw

2. 部署DNS服务器容器

docker create --hostname racdns \
  --dns-search=example.com \
  --cap-add=AUDIT_WRITE \
  -e DOMAIN_NAME="example.com" \
  -e WEBMIN_ENABLED=false \
  -e RAC_NODE_NAME_PREFIXD="racnoded" \
  -e SETUP_DNS_CONFIG_FILES="setup_true" \
  --privileged=false \
  --name rac-dnsserver \
  oracle/rac-dnsserver:latest

3. 配置存储服务器容器

export ORACLE_DBNAME=ORCLCDB
mkdir -p /docker_volumes/asm_vol/$ORACLE_DBNAME

docker run -d -t --hostname racnode-storage \
  --dns-search=example.com \
  --cap-add SYS_ADMIN \
  --cap-add AUDIT_WRITE \
  --volume /docker_volumes/asm_vol/$ORACLE_DBNAME:/oradata \
  --init \
  --network=rac_priv1_nw \
  --ip=192.168.17.80 \
  --tmpfs=/run \
  --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
  --name racnode-storage \
  oracle/rac-storage-server:19.3.0

4. 创建并配置存储卷

关键步骤是正确创建NFS类型的Docker volume:

docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.17.80,rw,bg,hard,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0 \
  --opt device=192.168.17.80:/oradata \
  racstorage

5. 部署RAC节点容器

docker create -t -i \
  --hostname racnoded1 \
  --volume /boot:/boot:ro \
  --volume /dev/shm \
  --tmpfs /dev/shm:rw,exec,size=4G \
  --volume /opt/containers/rac_host_file:/etc/hosts \
  --volume /opt/.secrets:/run/secrets:ro \
  --dns=172.16.1.25 \
  --dns-search=example.com \
  --privileged=false \
  --volume racstorage:/oradata \
  --cap-add=SYS_NICE \
  --cap-add=SYS_RESOURCE \
  --cap-add=NET_ADMIN \
  -e DNS_SERVERS="172.16.1.25" \
  -e NODE_VIP=172.16.1.130 \
  -e VIP_HOSTNAME=racnoded1-vip \
  -e PRIV_IP=192.168.17.100 \
  -e PRIV_HOSTNAME=racnoded1-priv \
  -e PUBLIC_IP=172.16.1.100 \
  -e PUBLIC_HOSTNAME=racnoded1 \
  -e SCAN_NAME=racnodedc1-scan \
  -e OP_TYPE=INSTALL \
  -e DOMAIN=example.com \
  -e ASM_DISCOVERY_DIR=/oradata \
  -e ASM_DEVICE_LIST=/oradata/asm_disk01.img,/oradata/asm_disk02.img,/oradata/asm_disk03.img,/oradata/asm_disk04.img,/oradata/asm_disk05.img \
  -e CMAN_HOSTNAME=racnodedc1-cman \
  -e CMAN_IP=172.16.1.164 \
  -e COMMON_OS_PWD_FILE=common_os_pwdfile.enc \
  -e PWD_KEY=pwd.key \
  -e RESET_FAILED_SYSTEMD="true" \
  --restart=always \
  --tmpfs=/run \
  -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
  --cpu-rt-runtime=95000 \
  --ulimit rtprio=99 \
  --memory 16G \
  --memory-swap 32G \
  --name racnoded1 \
  oracle/database-rac:21.3.0

关键配置要点

  1. 必须使用Docker volume:不能直接挂载主机目录,必须通过NFS类型的Docker volume挂载
  2. NFS挂载参数:必须包含rw,bg,hard,tcp,vers=3,timeo=600等关键参数
  3. 资源限制:确保配置足够的内存(16G)和交换空间(32G)
  4. 网络隔离:公共网络和私有网络必须分开配置
  5. 权限继承:通过正确的volume配置确保ASM磁盘文件具有正确的所有者和组

验证部署成功

成功部署后,容器日志中会显示以下信息:

ORACLE RAC DATABASE IS READY TO USE!

通过遵循上述步骤和配置要点,可以避免常见的权限问题和存储配置错误,顺利完成Oracle RAC在Docker环境中的部署。

登录后查看全文
热门项目推荐

热门内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K