主备切换的准备工作(二)

简介: 之前也强调过元数据的重要性,而且强调过备库需要考虑的很多方面,如果考虑不周到,其实我们的备库还没有做好切换的准备,而且最近也连连处理了多起问题,发现灾备中还是有很多的思考的东西,所谓实践出真知,这些地方不注意,只能保证数据不丢失,对于业务连接,应用响应和影响范围来说都是不可估量的。
之前也强调过元数据的重要性,而且强调过备库需要考虑的很多方面,如果考虑不周到,其实我们的备库还没有做好切换的准备,而且最近也连连处理了多起问题,发现灾备中还是有很多的思考的东西,所谓实践出真知,这些地方不注意,只能保证数据不丢失,对于业务连接,应用响应和影响范围来说都是不可估量的。
很多次的灾备切换中,如果在同机房的情况下,在failover的场景中,为了尽可能减少应用的影响范围,一般都是直接修改备库的IP为原来主库的IP,那么防火墙的配置就尤为重要,防火墙是一个方面,应用连接的端口是否主备统一,可能对于不同的应用指定了不同的访问端口,哪些主机配置了更多的信任关系,可以走域名解析,所以这些看起来很细小的问题,如果在大半夜问题发生的时候再去处理,还是让人有些上火,尤其在这个时候就特别希望能有个简单的备份改多好。
有两篇文章可以参考,以前写的一些思路。现在都在实践这些,具体技术的各个击破还是好做,能把它做成体系和标准真心不易。
运维平台的建设思考-元数据管理
你的备库做好准备了吗
所以内部使用先尝到了甜头,就会不断改进,愿意融入这个体系,那一切都好说了。
目前的思路是可以像八爪鱼一般把所有主库服务器的信息都抓取下来,放到中控的指定目录下。目前的实现脚本如下:
说明一下,根据 sh /home/yangjr/new.lst 得到了一个元数据列表,然后再这个基础上根据得到的主库IP信息进行备份。这个时候备份的主要还是主库的配置信息。
看起来脚本思路比较简单,我来说说里面的一些细节,也确实花了我一些时间。
首先tnsnames.ora,listener.ora甚至initxxx.ora等等都是依赖ORACLE_HOME这个变量的,在这个地方花了不少时间,最开始的解析思路是从profile里面解析,但是解析发现profile的格式和方式还是有很大的差别,默认是按照.bash_profile来解析ORACLE_HOME的,但是测试运行,得到了一半的错误都是下面的格式。
/home/oracle/.bash_profile: line 25: /root/.bidbprofile: No such file or directory
/home/oracle/.bash_profile: line 13: /root/.testprofile: No such file or directory
当然这个也可以逐步规范,但是这个profile的使用也是合理的,如果一台服务器有多个实例,那么就需要多个profile,可能profile还是嵌套调用的。这样去解析就非常麻烦了。
如果单纯在profile解析$ORACLE_HOME的值,其实$ORACLE_HOME一般都是设置为ORACLE_HOME=$ORACLE_BASE/xxxx
那么问题来了,这个ORACLE_BASE改怎么解析,可以实现,但是感觉比较繁琐,而且很容易出现不兼容的情况,那么还有什么招,一种方法就是/etc/oratab了。这个里面会存放ORACLE_HOME的信息,但凡数据库实例安装的规范,这个变量值都是有效的,取出一条即可。

对于元数据的抓取,数据库层面目前是抓取了listener.ora,sqlnet.ora,tnsnames.ora,系统层面抓取了iptables和/etc/hosts的配置
对于sqlnet.ora如果有些服务配置中没有显式设置,就不需要生成这个文件,如果是listener.ora和tnsnames.ora文件则是必须的。
所以在这些地方脚本中也做了检查和校验。
最后的脚本内容如下:
##get primary db list
for ip in `sh /home/yangjr/new.lst|grep -i PRIMARY|grep -v AIX|grep -v nopingdb |awk '{print $1}'|sort|uniq` ;
#for ip in `cat a.sh|grep -i PRIMARY|grep -v Solaris|grep -v nopingdb |awk '{print $1}'|sort|uniq` ;
do
#echo $ip;cat a.sh|grep -w $ip  ;done > server_sum.txt
#ssh $ip        "cat /home/oracle/.bash_profile|grep -w ORACLE_HOME=|awk -F= '{print $2}'"

mkdir -p /home/conf/$ip;
ORACLE_HOME=`ssh $ip "cat /etc/oratab | tail -1 | awk -F: '{print \\$2}'"  2>\&1 `
echo  $ip" "$ORACLE_HOME
if [ -n "$ORACLE_HOME" ]; then
ssh $ip "cat $ORACLE_HOME/network/admin/tnsnames.ora 2>\&1"  > /home/conf/$ip/tnsnames.ora
ssh $ip "cat $ORACLE_HOME/network/admin/listener.ora 2>\&1"  > /home/conf/$ip/listener.ora
ssh $ip "cat $ORACLE_HOME/network/admin/sqlnet.ora 2>\&1"  > /home/conf/$ip/sqlnet.ora
scp $ip:$ORACLE_HOME/dbs/init*.ora   /home/conf/$ip 2>&1
scp $ip:$ORACLE_HOME/dbs/spfile*.ora   /home/conf/$ip 2>&1
fi
ssh $ip "cat /etc/hosts"  > /home/conf/$ip/hosts
ssh $ip "cat /etc/sysconfig/iptables"  > /home/conf/$ip/iptables
ssh $ip "cat /etc/sysconfig/network"  > /home/conf/$ip/network

#validate if tnsnames.ora,listener.ora is empty or not
if [ ! -s /home/conf/$ip/sqlnet ];then
rm -f /home/conf/$ip/sqlnet.ora
fi

if [ ! -s /home/conf/$ip/listener.ora ] ||[ ! -s /home/conf/$ip/tnsnames.ora ];then
echo 'WARNING: there is empty files, tnsnames.ora,listener.ora, please check again.'
fi
done




目录
相关文章
|
9月前
|
SQL 存储 关系型数据库
京东二面:MySQL 主备延迟有哪些坑?主备切换策略
一、什么是高可用? 维基百科定义: 高可用性(high availability,缩写 HA),指系统无中断地执行其功能的能力,代表系统的可用性程度。高可用性通常通过提高系统的容错能力来实现。 MySQL 的高可用是如何实现的呢?
|
8月前
|
网络安全
VRRP 主备切换的时间
VRRP 主备切换的时间
483 2
|
存储 运维 NoSQL
数据复制系统设计(3)-配置新的从节点及故障切换过程详解
1.3 配置新的从节点 有时需考虑新增一个从节点: 提高容错能力 或替换失败的副本节点
105 0
|
关系型数据库 MySQL Linux
Mysql主从复制与高可用主备切换搭建完整详细版
Mysql主从复制与高可用主备切换搭建完整详细版
|
SQL 负载均衡 网络协议
关于Linux下Mysql集群同步(主从、一主多从、主从从)部署及同步策略的一些笔记
和小伙们分享一些Mysql集群主从同步部署相关的笔记 博文内容涉及: 为什么需要mysql集群主从同步 主从同步原理 部署不同主从结构的Mysql集群 一主一从 一主多从 主从从 主从同步使用的复制模式介绍配置 食用方式:了解Linux、Mysql即可 理解不足小伙伴帮忙指正
678 0
关于Linux下Mysql集群同步(主从、一主多从、主从从)部署及同步策略的一些笔记
|
监控 NoSQL Redis
如何解决 “主节点故障恢复的自动化” 问题?
工作 & 面试中,当面试官问你主服务器宕机了,怎么办,如何处理?那么“哨兵”它来了~~~
如何解决 “主节点故障恢复的自动化” 问题?
|
监控 关系型数据库 MySQL
|
关系型数据库 MySQL 数据库