Oracle ADG环境VIP高可用部署实操

在Oracle ADG高可用架构中,配置虚拟IP(VIP)是核心优化手段之一,其核心目的是实现ADG主备切换后,业务应用无需修改数据源IP,大幅降低业务中断时长,这一设计思路同样适用于其他数据库的HA架构。本次实操围绕Oracle ADG主备节点完成VIP自动切换脚本部署,同时解决了脚本运行中su操作日志持续写入/var/log/messages导致日志无限膨胀的问题,相同网卡配置的主备两台服务器,脚本部署与运行配置完全一致,以下为详细实操步骤。

一、环境检查:确认公网业务网卡

本次实操中业务公网网卡为ens33,通过ip a命令检查网卡信息,确认网卡状态及原有IP配置,为后续VIP绑定做准备。

复制代码
[root@euler01 etc]# ip a
# 关键输出:ens33网卡UP状态,绑定物理IP 192.168.X.X/24

二、VIP自动切换脚本部署

本次部署包含两个核心脚本:vip_check.sh为心跳检测脚本,实现定时调用核心脚本;vip_dg.sh为核心逻辑脚本,根据数据库OPEN_MODE状态自动绑定/卸载VIP,同时配置脚本随系统自启动,确保服务器重启后VIP高可用功能正常。

2.1 配置系统自启动

修改/etc/rc.local添加脚本启动命令,同时赋予rc.local可执行权限,保证系统启动时自动运行VIP检测脚本。

复制代码
# 编辑自启动文件,添加脚本后台运行命令
[root@euler01 etc]# cat /etc/rc.local
添加:/etc/vip_check.sh > /dev/null 2>&1 &

# 赋予可执行权限
[root@euler01 etc]# chmod +x /etc/rc.d/rc.local
[root@euler01 etc]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 510 Dec 2 09:48 /etc/rc.d/rc.local

2.2 编写心跳检测脚本:vip_check.sh

该脚本为死循环定时脚本,每3秒调用一次核心脚本vip_dg.sh,实现VIP状态的实时检测,脚本存放路径/etc/vip_check.sh

复制代码
[root@euler01 etc]# cat /etc/vip_check.sh
#!/bin/bash
step=3
while true; do
    /etc/vip_dg.sh > /dev/null 2>&1
    sleep $step
done

2.3 编写核心逻辑脚本:vip_dg.sh

该脚本为VIP切换核心逻辑,通过查询Oracle数据库v$database视图的open_mode判断主备状态(主库为WRITE模式),同时检查VIP(192.168.207.39)是否绑定,实现主库自动绑定VIP、备库自动卸载VIP ,并通过arping广播更新网络arp表,确保VIP网络可达,脚本存放路径/etc/vip_dg.sh

复制代码
[root@euler01 etc]# cat /etc/vip_dg.sh
#!/bin/bash
# 查询数据库是否为WRITE模式(主库),返回1则为主库,0则为备库
dbstats=`su - oracle -c "echo -e 'set pagesize 0\nselect open_mode from v\\$database;' | sqlplus -S / as sysdba"|grep WRITE|wc -l`
# 检查VIP 192.168.X.X是否已绑定在ens33:1
ip=`/usr/sbin/ip a|grep ens33:1|wc -l`

if [[ "${dbstats}" -eq 1 ]] ; then
    # 主库:未绑定VIP则执行绑定,并发送arp广播
    if [[ "${ip}" -eq 0 ]]; then
    /usr/sbin/ifconfig ens33:1 192.168.X.X netmask 255.255.255.0 up
    /usr/sbin/arping -I ens33 -b -s 192.168.X.X 192.168.X.X -c 3
    fi
else
    # 备库:已绑定VIP则执行卸载
    if [[ "${ip}" -gt 0 ]]; then
    /usr/sbin/ifconfig ens33:1 down
    fi
fi

三、脚本运行基础测试

完成脚本部署后,重启服务器验证脚本自启动、VIP绑定状态,确认基础功能正常。

3.1 验证脚本进程运行

服务器重启后,通过ps -ef命令检查VIP脚本进程,确认进程正常后台运行。

复制代码
[root@euler01 etc]# ps -ef|grep vip

3.2 验证主库VIP绑定状态

主库节点下,通过ip a命令检查,确认浮动VIP 192.168.X.X成功绑定在ens33:1子网卡上,VIP状态正常。

复制代码
[root@euler01 etc]# ip a
# 关键输出:ens33:1子网卡绑定VIP 192.168.X.X/24

四、问题解决:屏蔽su操作日志输出

脚本运行中,vip_dg.sh每3秒执行一次su - oracle操作,系统会将该操作日志持续写入/var/log/messages,长期运行会导致日志文件无限增大,本次通过修改rsyslog配置,屏蔽su操作的auth类日志输出至messages。

4.1 检查rsyslog服务状态

确认rsyslog服务正常运行,该服务为系统日志核心服务,修改其配置可实现日志过滤。

复制代码
[root@euler01 etc]# systemctl status rsyslog
# 关键输出:Active: active (running),服务正常运行

4.2 修改rsyslog配置文件

编辑/etc/rsyslog.conf,在messages日志的配置行中添加auth.none,表示屏蔽auth类日志输出至该文件。

复制代码
[root@euler01 etc]# vi /etc/rsyslog.conf
# 修改前
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 修改后
*.info;mail.none;authpriv.none;cron.none;auth.none /var/log/messages

# 验证修改结果
[root@euler01 etc]# cat /etc/rsyslog.conf|grep auth.*
*.info;mail.none;authpriv.none;cron.none;auth.none /var/log/messages

4.3 重启rsyslog服务并验证

重启rsyslog服务使配置生效,随后通过tail -f实时查看messages日志,确认无新的su操作日志输出,问题解决。

复制代码
# 重启服务
[root@euler01 etc]# systemctl restart rsyslog

# 验证日志,无su记录输出
[root@euler01 etc]# tail -f /var/log/messages
# 仅显示rsyslog服务重启日志,无su[xxxx]: (to oracle) root on none相关记录

五、最终验证:通过VIP连接数据库

以Oracle用户身份,通过浮动VIP 192.168.X.X连接数据库,验证VIP网络可达、数据库正常访问,确认整个VIP高可用部署流程生效。

复制代码
[root@euler01 etc]# su - oracle
[oracle@euler01 ~]$ sqlplus zyjc/zyjc@192.168.X.X:1521/cm

SQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 2 13:10:18 2025
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
相关推荐
小高不会迪斯科6 小时前
CMU 15445学习心得(二) 内存管理及数据移动--数据库系统如何玩转内存
数据库·oracle
e***8907 小时前
MySQL 8.0版本JDBC驱动Jar包
数据库·mysql·jar
l1t7 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
失忆爆表症8 小时前
03_数据库配置指南:PostgreSQL 17 + pgvector 向量存储
数据库·postgresql
AI_56788 小时前
Excel数据透视表提速:Power Query预处理百万数据
数据库·excel
SQL必知必会9 小时前
SQL 窗口帧:ROWS vs RANGE 深度解析
数据库·sql·性能优化
Gauss松鼠会9 小时前
【GaussDB】GaussDB数据库开发设计之JDBC高可用性
数据库·数据库开发·gaussdb
Vicky-Min9 小时前
NetSuite中保存Bill时遇到Overage的报错原因
oracle·erp
+VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue鲜花商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
识君啊10 小时前
SpringBoot 事务管理解析 - @Transactional 的正确用法与常见坑
java·数据库·spring boot·后端