Oracle ADG + Keepalived 切换演练
客户的一套生产环境采用的架构是Oracle ADG + Keepalived,近期需要进行切换演练,要求我这边保障。ADG本身切换倒没啥可说的,但引入keepalived软件,就需要提前研究下这个架构。其实看了下环境配置,整体思路也非常简单,说白了就是利用keepalived软件引入一个VIP,应用侧只需配置连接这个VIP即可。
依据当前生产环境架构模拟了一套自己的测试环境。
1.Keepalived相关配置
关于Keepalived软件的配置和编译安装,可以参考之前《MySQL主主+Keepalived架构安装部署》中Keepalived安装部署章节。
除了利用keepalived软件引入一个VIP,还有一些配置和脚本,脱敏如下:
--------------------------------------------------------
--节点1(192.168.1.124)keepalived.conf文件内容:
--------------------------------------------------------
[root@test04 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_dg_stats {
script "/etc/keepalived/check_dataguard.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
mcast_src_ip 192.168.1.124
virtual_router_id 131
priority 101
inopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 888888
}
virtual_ipaddress {
192.168.1.131
}
track_script {
chk_dg_stats
}
}
--------------------------------------------------------
--节点2(192.168.1.125)keepalived.conf文件内容:
--------------------------------------------------------
[root@test05 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_script chk_dg_stats {
script "/etc/keepalived/check_dataguard.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.1.125
virtual_router_id 131
priority 99
inopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 888888
}
virtual_ipaddress {
192.168.1.131
}
track_script {
chk_dg_stats
}
}
--------------------------------------------------------
--所有节点配置脚本check_dataguard.sh,并确认具有x执行权限:
--------------------------------------------------------
# cat /etc/keepalived/check_dataguard.sh
#!/bin/bash
dbstats=`ps -ef | grep ora_smon | grep -v grep | wc -l`
dgstats=`ps -ef | grep ora_mrp | grep -v grep | wc -l`
if [ "${dbstats}" -eq 0 ]; then
/etc/init.d/keepalived stop
elif [[ "${dbstats}" -gt 0 ]] && [[ "${dgstats}" -gt 0 ]]; then
/etc/init.d/keepalived stop
fi
说明:脚本check_dataguard.sh主要通过对ora_smon和ora_mrp进程的监控,判断哪种场景下该关闭keepalived服务:
场景1:当不存在ora_smon进程时(数据库实例Crash);
场景2:存在ora_smon进程同时存在ora_mrp进程时(已启动mrp进程的备库)。
--添加x执行权限:
chmod u+x /etc/keepalived/check_dataguard.sh
[root@test04 ~]# ls -l /etc/keepalived/check_dataguard.sh
-rwxr--r--. 1 root root 282 Jul 14 22:35 /etc/keepalived/check_dataguard.sh
[root@test05 ~]# ls -l /etc/keepalived/check_dataguard.sh
-rwxr--r--. 1 root root 281 Jul 14 22:36 /etc/keepalived/check_dataguard.sh
2.ADG手工切换步骤
1)在switchover正式切换前先在主库上手工切换几次日志,确认DG备库同步正常:
--PRIMARY(主库192.168.1.124)切换几次日志:
SQL>
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
--Standby (备库192.168.1.125)需确认同步正常没有延迟:
SQL>
select * from v$dataguard_stats;
2)主库切换为备库
-- 在PRIMARY(主库192.168.1.124)查询,确认可切换为备库:
select OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS from v$database;
-- 在PRIMARY(主库192.168.1.124)操作,切换为备库:
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;
3)备库切换为主库
-- 在Standby(备库192.168.1.125)查询,确认可切换为主库:
select OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS from v$database;
-- 在Standby(备库192.168.1.125)操作,切换为主库(根据SWITCHOVER_STATUS值确认用下面哪个命令):
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
4)新主库open,新备库启动并开启MRP,新主库启动keepalived服务
--NEW PRIMARY(新主库192.168.1.125)数据库从mount启动到open状态:
ALTER DATABASE OPEN;
--NEW STANDBY(新备库192.168.1.124)数据库startup启动,开启DG日志应用:
STARTUP
RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
--确认NEW STANDBY(新备库192.168.1.124)DG同步正常,没有延迟:
SQL>
select * from v$dataguard_stats;
5) 新主库启动keepalived服务
--NEW PRIMARY(新主库192.168.1.125)OS层root用户启动keepalived服务:
# /etc/init.d/keepalived start
注意:当演练结束后,若需要switchover主备再次切换,只需要按上面规范步骤重复操作即可(注意主备角色的转换)。
3.VIP和监听的关系
源于最早的一次面试,两个节点的RAC,节点1主机Crash,此时应用通过节点1的VIP是否可以连接到数据库?为什么?
我们都知道节点1主机Crash,其VIP会自动漂移节点2,ping这个IP也是通的,但是通过其连接数据库却不行!会报一个没有监听(ORA-12541: TNS:no listener)的错误。
具体可参考:
RAC 某节点不可用时,对应VIP是否可用
那这里的环境,同样是VIP的设置,为何却可以通过VIP(192.168.1.131)连接呢?
[oracle@test03 ~]$ sqlplus sys/oracle@192.168.1.131/demo as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Tue Jul 14 23:45:23 2020
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
SQL>
实际验证,是因为这里主备库的监听配置统一都是主机名:
[oracle@test04 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = test04)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
[oracle@test05 admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = test05)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jingyus)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = jingyu)
)
)
如果将主机名修改为具体的IP地址,则测试同样会报错(ORA-12541: TNS:no listener)。
Oracle ADG + Keepalived 切换演练的更多相关文章
- Oracle ADG环境搭建
部署 环境介绍 1,软件安装前基础部署 (两台做同样操作) 1.1,关闭selinux和防火墙 因为centos7里面没有/etc/sysconfig/iptables这个配置文件所以我们首先用yum ...
- oracle ADG启动顺序
一.oracle ADG启动顺序 1.启动主备库监听 [oracle@dgdb1 ~]$ lsnrctl start [oracle@dgdb2 ~]$ lsnrctl start 2.启动备库 ...
- Oracle RMAN 学习:演练进阶篇
Oracle RMAN 学习:演练进阶篇 5 Rman备份演练进阶篇 5.1 是否选择增量备份 Backup命令生成的备份集中只备份了那些使用了的数据块,备份集实际大小已经较目标数据库的数据文件小了很 ...
- 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;oracle ADG跨版本搭建;PG解决社保问题;mysqlbinlog解析……
摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.openGauss 正式开源,华为公开发布源代码[摘要]6月1日,华为正式宣布开源数据库能 ...
- Oracle ADG搭建
Oracle Active Data Guard搭建 一:安装 1.基础环境配置 1.1.开启强制日志记录 DG日志发送方式中ARCH进程和LGWR进程的ASYNC模式都是基于日志同步的,所以我们必须 ...
- Oracle ADG环境下的RMAN备份策略
作为IT运维人员,尤其是数据库岗位,数据的备份重于一切. 现在很多用户会有一个普遍误区,认为现在类似ADG这类灾备已经很完善,且实时性也更佳,往往就忽略了传统的备份效用. 但实际上,我们千万不能因为有 ...
- Oracle redo 日志切换时间频率
DB: 11.2.0.3.0 查看Oracle的redo日志切换频率 两条SQL,原理是一样的,第二个用到了统计函数 时间单位:分钟 方法一. select * from v$log a where ...
- Oracle dataguard 正常切换和应急切换
oracle dataguard提供异地容灾方案,能有效的防止单点故障和提供高可用技术,这里介绍dataguard正常主备切换和应急切换(应急切换模拟主库出现问题无法还原,备库脱离dataguard接 ...
- oracle dataguard主从切换
前言: 众所周知DataGuard一般的切换分成两种,一种是系统正常的情况下的切换这种方式为:switchover是无损切换,不会丢失数据:另外一种方式属于灾难情况下的切换,这种情况下一般主库已经启动 ...
- springboot + mybatis 支持oracle和mysql切换含源码
1.springboot 启动类加入bean 如下 // DatabaseIdProvider元素主要是为了支持不同的数据库@Beanpublic DatabaseIdProvider getData ...
随机推荐
- 报错:for..in loops iterate over the entire prototype chain, which is virtually never what you want.
for..in loops iterate over the entire prototype chain, which is virtually never what you want. 意思是使用 ...
- 如何通过canvas实现电子签名
想要实现一个电子签名,可以支持鼠标签名,还能类似书法效果线条有粗有细,同时可以导出成图片. 一.实现连贯的划线 1)首先需要注册鼠标下压.鼠标放开.鼠标移出和鼠标移动事件,通过鼠标下压赋值downFl ...
- SD协议-时序02
SD Bus PAD internal card clock - 对于SD card来讲,时钟信号是一个输入 Data0-3 - inout类型,既可能是输入,又可能是输出 对于Data0-3输出的时 ...
- 汉字在unicode的编码情况-From http://yedict.com/zsts.htm
字符集内容 字数 unicode编码 字符显示说明(除非安装更大字库) 基本区 分页: 一 二 三 四 共20902字 4E00-9FA5 电脑和手机都能显示 基本区补充 共90字 9FA6-9F ...
- 多种数据库获取最近一天记录的SQL整理
多种数据库获取最近一天记录的SQL整理 背景 纯粹当笔记. 数据库种类太多,记不住,每次都需要现查,效率实在是太低了 将获取最近一天记录的SQL整理好 方便后续直接his用 简单总结 Oracle + ...
- [转帖]关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行
关于https://goproxy.cn,direct与https://proxy.golang.org的问题,国内无法访问https://proxy.golang.org设置了GOPROXY仍不可行 ...
- [转帖]正则表达式及在Jmeter中的应用
目录 1.正则表达式 1.1 什么是正则表达式 1.2 为什么使用正则表达式 2.语法 2.1 普通字符 2.2 限定符 2.3 非打印字符 2.4 特殊字符 2.5 定位符 2.6 修饰符(标记) ...
- [转帖]记一次vcsa6修复过程
一. 某天发现一台vmware vCenter Server Appliance services 6偶尔能登陆了,但极不稳定,连shell都偶尔能进...... 然后利用各种手段想方设法进到she ...
- JDK发布版本的总结
https://www.oracle.com/java/technologies/javase/8all-relnotes.html 从官网总结一下每个版本的发布日期 Java SE 8u141 Ad ...
- Spring Boot日志框架Slf4j+logback
一.简介 Slf4j Java的简单日志记录外观(Simple Logging Facade for Java )可作为各种日志记录框架(例如java.util.logging,logback,log ...