91-Oracle 11g RAC RHEL 7+上手动创建ohashd

在RHEL 7+(或是类似的衍生Centos等)上安装oracle 11g 11.2.0.4,必然会遇见CRS-2101: The OLR was formatted using version 3.或者ohasd进程无法启动,进而导致整个集群安装失败。

原因是在在RHEL 7之前的版本中,系统使用传统的init进程来管理服务启动。Oracle 11g RAC的root.sh脚本会创建并启动ohasd(Oracle High Availability Services Daemon)进程,该进程负责启动整个集群。然而,RHEL 7及更高版本使用systemd作为初始化系统。systemd与传统的init系统在服务管理上有很大不同。当运行root.sh脚本时,它会尝试通过init脚本来启动ohasd,但systemd无法正确管理这种传统服务,导致启动失败。

按照手册操作的时候,当在RAC一个节点上新建了服务后,不要在另外一个节点上再新建,需要拷贝到另外一个节点。

一、问题背景

在RHEL 7及以上版本中,系统使用systemd替代传统的init作为初始化系统。Oracle 11g RAC的ohasd(Oracle High Availability Services Daemon)守护进程设计基于init系统,导致以下兼容性问题:
服务管理机制冲突​:
  • systemd使用.service单元文件管理服务,而ohasd依赖传统的/etc/init.d脚本
  • root.sh脚本尝试通过init方式启动ohasd,但systemd无法正确处理这种启动方式
进程监控差异​:
  • systemd对守护进程有更严格的监控要求
  • ohasd启动后可能被systemd错误识别为"failed"状态
启动顺序问题​:
  • systemd并行启动机制可能导致依赖ohasd的服务过早启动
错误表现​:
CRS-2101: The OLR was formatted using version 3
Failed to start Oracle High Availability Services

二、根本原因

Oracle 11g RAC未原生支持systemd,导致以下关键组件失效:
  • ohasd.bin无法被systemd正确识别为守护进程
  • 缺少systemd所需的.service单元文件
  • 传统init脚本在systemd环境下执行异常

三、实操步骤

1. 创建systemd服务单元文件

--创建服务文件
sudo tee /usr/lib/systemd/system/ohasd.service > /dev/null <<'EOF'
[Unit]
Description=Oracle High Availability Services
After=syslog.target network.target

[Service]
Type=forking
Environment=ORACLE_HOME=/u01/app/11.2.0/grid
ExecStart=$ORACLE_HOME/bin/ohasd.bin start
ExecStop=$ORACLE_HOME/bin/ohasd.bin stop
Restart=always
RestartSec=30
User=grid
Group=oinstall

[Install]
WantedBy=multi-user.target
EOF

2. 设置文件权限并重载systemd 

--设置适当权限
sudo chmod 644 /usr/lib/systemd/system/ohasd.service

--重载systemd配置
sudo systemctl daemon-reload

 3. 启用并启动服务

--启用开机自启
sudo systemctl enable ohasd

# 启动服务
sudo systemctl start ohasd

4. 验证服务状态

--检查服务状态
sudo systemctl status ohasd

# 输出包含:
#   Active: active (running) since [timestamp]
#   Main PID: [pid] (ohasd.bin)

 5. 执行root.sh安装脚本

--进入Grid Infrastructure目录
cd /u01/app/11.2.0/grid

# 以root身份执行安装脚本
sudo ./root.sh

四、关键操作注意事项

1. 安装过程中的特殊处理

当运行root.sh时,需监控init.ohasd文件的生成:

--在单独终端中监控文件生成
while [ ! -f /etc/init.d/init.ohasd ]; do
    sleep 2
done

# 文件生成后立即启动服务
sudo systemctl start ohasd

2. 多节点集群处理(除了第一个节点新建以外,其他都是拷贝)

在RAC环境中,所有节点均需执行相同配置:
  1. 在主节点完成上述配置
  2. 将服务文件copy到其他节点,:
scp /usr/lib/systemd/system/ohasd.service root@node2:/usr/lib/systemd/system/

 在其他节点执行以上步骤

五、验证与诊断脚本

1. 服务状态验证脚本

bash#!/bin/bash
# ohasd_service_check.sh

# 检查服务状态
systemctl status ohasd > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "ohasd.service status: ACTIVE"
else
    echo "ohasd.service status: INACTIVE"
    exit 1
fi

# 检查进程运行状态
if pgrep -f "ohasd.bin" > /dev/null; then
    echo "ohasd.bin process: RUNNING"
else
    echo "ohasd.bin process: NOT FOUND"
    exit 1
fi

# 检查集群状态
ORACLE_HOME=/u01/app/11.2.0/grid
$ORACLE_HOME/bin/crsctl check has

exit 0

2. 错误诊断命令 

--查看服务详细日志
journalctl -u ohasd -n 100 --no-pager

# 检查服务依赖关系
systemctl list-dependencies ohasd

# 检查环境变量配置
sudo -u grid env | grep ORA

# 验证SELinux状态(应禁用)
sestatus

六、故障排除指南 

故障现象

可能原因

解决方案

ohasd.service启动失败

1. ORACLE_HOME路径错误

2. 权限不足

1. 检查服务文件中的ORACLE_HOME

2. 确认grid用户权限

3. 检查目录权限:

sudo chown -R grid:oinstall $ORACLE_HOME

root.sh执行卡住

ohasd未及时启动

1. 手动启动ohasd服务

2. 监控/etc/init.d/init.ohasd生成情况

节点间状态不一致

配置未同步

1. 确保所有节点配置相同

2. 重新同步配置文件

3. 重启集群服务

OLR版本错误

ohasd未正确初始化

1. 清理OLR配置:

$GRID_HOME/bin/crsctl unpin css -n

2. 重新执行root.sh

七、使用体验

系统配置前检查​:
--禁用SELinux
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 禁用防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld

文件权限规范​:

--设置标准权限
sudo chown -R grid:oinstall /u01/app/11.2.0/grid
sudo chmod -R 775 /u01/app/11.2.0/grid
sudo chmod 6750 /u01/app/11.2.0/grid/bin/oracle

 定期维护脚本(可选,当地发现ohasd不存在的时候,也就不存在维护之说)​:

--ohasd维护脚本
sudo tee /usr/local/bin/ohasd_maintenance.sh > /dev/null <<'EOF'
#!/bin/bash
# 停止服务
systemctl stop ohasd

# 清理缓存
rm -f $ORACLE_HOME/crs/init/*

# 重启服务
systemctl start ohasd
EOF

sudo chmod +x /usr/local/bin/ohasd_maintenance.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值