容灾半自动化的实现思路(二)

简介: 容灾的半自动化的部分,自己写了下面的脚本,也算是一个基本实现,因为时间仓促,还是存在一些不足,稍后完善 整个切换的步骤分为三部分,第一部分是备份当前备库的配置文件,第二部分是使用dg broker决定是failover还是switchover 第三部分是切换之后开始替换参数文件。
容灾的半自动化的部分,自己写了下面的脚本,也算是一个基本实现,因为时间仓促,还是存在一些不足,稍后完善
整个切换的步骤分为三部分,第一部分是备份当前备库的配置文件,第二部分是使用dg broker决定是failover还是switchover 第三部分是切换之后开始替换参数文件。
所以需要的脚本为dg_pre.sh  dg_post.sh
dg_pre.sh是作为基本的备份,内容如下:
#### validate input parameters
#### validate if ip address is available
#### validate if ip address is the same as standby

#### get current ip address
curr_ipadd=`cat /etc/hosts|grep \`hostname\`|awk '{print $1}'`
echo '###### INFO  Current IP ADDRESS IS : '$curr_ipadd
echo .
ip_std_bak=${curr_ipadd}_std_bak
##get network card name
eth_code=`/sbin/ifconfig |grep -B1 ${curr_ipadd}|head -1|awk '{print $1}'`
echo '###### INFO  Current NETWORK CARD NAME IS : '$eth_code
/sbin/ifconfig|grep  -B1 `cat /etc/hosts|grep \`hostname\`|awk '{print $1}'`
echo .
sleep 2
#### backup all conf files
mkdir -p /home/conf/${ip_std_bak};
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print \$2}' `
echo '###### INFO  Current ORACLE_HOME is : '$ORACLE_HOME
echo .
sleep 1
if [ -n "$ORACLE_HOME" ]; then
cp $ORACLE_HOME/network/admin/tnsnames.ora    /home/conf/${ip_std_bak}
cp $ORACLE_HOME/network/admin/listener.ora    /home/conf/${ip_std_bak}
cp $ORACLE_HOME/network/admin/sqlnet.ora    /home/conf/${ip_std_bak}
cp $ORACLE_HOME/dbs/init*.ora   /home/conf/${ip_std_bak}
cp $ORACLE_HOME/dbs/spfile*.ora   /home/conf/${ip_std_bak}
cp $ORACLE_HOME/dbs/orapw*   /home/conf/${ip_std_bak}
echo '###### INFO  BACKUP DB LEVEL CONF FILES ...  DONE'
fi
sleep 1
echo .
cp /etc/hosts   /home/conf/${ip_std_bak}
cp /etc/sysconfig/iptables   /home/conf/${ip_std_bak}
cp /etc/sysconfig/network   /home/conf/${ip_std_bak}
cp /etc/sysconfig/network-scripts/ifcfg-${eth_code} /home/conf/${ip_std_bak}
cp /etc/sysctl.conf /home/conf/${ip_std_bak}
cp /etc/security/limits.conf /home/conf/${ip_std_bak}
echo '###### INFO  BACKUP OS LEVEL CONF FILES ... DONE'
sleep 1
####

dg_post是作为切换之后的补充,脚本如下:
#### validate input parameters
new_ip=$1
if [ ! $new_ip ];then
echo 'Target IP ADDRESS is needed ... '
exit;
fi
if [ ! -d /home/conf/$new_ip ];then
echo 'TARGET IP CONF FILES NOT FOUND,SHOULD BE /home/conf/'$new_ip
exit;
fi
#### validate if ip address is available


#### get current ip address
curr_ipadd=`cat /etc/hosts|grep \`hostname\`|awk '{print $1}'`
echo '###### INFO  Current IP ADDRESS IS : '$curr_ipadd
sleep 1 ;
if [ ! -d /home/conf/$curr_ipadd ];then
echo 'SOURCE IP CONF FILES NOT FOUND,SHOULD BE /home/conf/'${curr_ipadd}_std_bak
exit;
fi

#### validate if ip address is the same as standby
#if [[ ${new_ip} -eq ${curr_ipadd} ]];then
#echo 'SOURCE AND TARGET IP ADDRESS SHOULD NOT BE THE SAME ...'
#fi
echo .
ip_std_bak=${curr_ipadd}_std_bak
##get network card name
eth_code=`/sbin/ifconfig |grep -B1 ${curr_ipadd}|head -1|awk '{print $1}'`
echo '###### INFO  Current NETWORK CARD NAME IS : '$eth_code
/sbin/ifconfig|grep  -B1 `cat /etc/hosts|grep \`hostname\`|awk '{print $1}'`
if [ ! $eth_code ];then
echo 'WARNING... NETWORK CARD CODE IS EMPTY ...'
exit
fi
sleep 1 ;
echo .
#### backup all conf files
mkdir -p /home/conf/${ip_std_bak};
ORACLE_HOME=`cat /etc/oratab | tail -1 | awk -F: '{print \$2}' `
echo '###### INFO  Current ORACLE_HOME is : '$ORACLE_HOME
echo .

if [ -n "$ORACLE_HOME" ]; then
echo '###### INFO  RESTORE DB LEVEL CONF FILES'
echo .
cp /home/conf/${new_ip}/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora   
cp /home/conf/${new_ip}/listener.ora $ORACLE_HOME/network/admin/listener.ora    
cp /home/conf/${new_ip}/sqlnet.ora   $ORACLE_HOME/network/admin/sqlnet.ora  > /dev/null   2>&1
fi
sleep 1 ;

echo '###### INFO  RESTORE OS LEVEL CONF FILES'
echo .
cp /home/conf/${new_ip}/hosts /etc/hosts   
cp /home/conf/${new_ip}/iptables /etc/sysconfig/iptables  
cp /home/conf/${new_ip}/network /etc/sysconfig/network  
sleep 1 ;

####change IP address
echo '###### INFO  IP ADDRESS BEFORE CHANGE AS BELOW'
cat /home/conf/${ip_std_bak}/ifcfg-${eth_code} |tee /home/conf/tmp_eth.lst
sed -i "s/${curr_ipadd}/${new_ip}/g"   /home/conf/tmp_eth.lst
sleep 1;
echo .

echo '###### INFO  IP ADDRESS CHANGED AS BELOW'
cat /home/conf/tmp_eth.lst
cp /home/conf/tmp_eth.lst /etc/sysconfig/network-scripts/ifcfg-${eth_code}
cp /home/conf/$new_ip/network /etc/sysconfig/network
sleep 1;
echo .

new_hostname=`cat /etc/hosts|grep $new_ip|awk '{print $2}'`
echo $new_hostname
sleep 1;
hostname $new_hostname
ifdown ${eth_code}
sleep 1;
ifup ${eth_code}
sleep 1;
service network restart

dg_pre.sh运行的基本日志如下:
###### INFO  Current IP ADDRESS IS : 10.127.133.46
.
###### INFO  Current NETWORK CARD NAME IS : eth0
eth0      Link encap:Ethernet  HWaddr 84:2B:2B:69:EF:F8  
          inet addr:10.127.133.46  Bcast:10.127.133.255  Mask:255.255.255.0
.
###### INFO  Current ORACLE_HOME is : /U01/app/oracle/product/11.2.0.2/db_1
.
###### INFO  BACKUP DB LEVEL CONF FILES ...  DONE
.
###### INFO  BACKUP OS LEVEL CONF FILES ... DONE

dg_post.sh的日志如下:

# cat dg_post.log
###### INFO  Current IP ADDRESS IS : 10.127.133.46
.
###### INFO  Current NETWORK CARD NAME IS : eth0
eth0      Link encap:Ethernet  HWaddr 84:2B:2B:69:EF:F8  
          inet addr:10.127.133.46  Bcast:10.127.133.255  Mask:255.255.255.0
.
###### INFO  Current ORACLE_HOME is : /U01/app/oracle/product/11.2.0.2/db_1
.
###### INFO  RESTORE DB LEVEL CONF FILES
.
###### INFO  RESTORE OS LEVEL CONF FILES
.
###### INFO  IP ADDRESS BEFORE CHANGE AS BELOW
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.127.133.46
NETMASK=255.255.255.0
#GATEWAY=10.127.133.254
ONBOOT=yes
TYPE=Ethernet
.
###### INFO  IP ADDRESS CHANGED AS BELOW
DEVICE=eth0
BOOTPROTO=static
IPADDR=10.127.133.45
NETMASK=255.255.255.0
#GATEWAY=10.127.133.254
ONBOOT=yes
TYPE=Ethernet
.
BX_133_45
Shutting down interface eth0:  [  OK  ]
Shutting down interface eth1:  [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface:  [  OK  ]
Bringing up interface eth0:  [  OK  ]
Bringing up interface eth1:  [  OK  ]
后续继续完善。
目录
相关文章
|
容灾 网络安全 域名解析
容灾半自动化的实现思路(一)
最近也在对容灾的切换做一些改进。 目前碰到的问题有 1.灾难切换后备库的内核参数设置不到位,导致切换后又潜在的性能问题 2.灾难切换后在同机房,网络相关的情况下,需要切换备库的IP为主库,但是跨机房,跨IDC可能不行,可以修改IP的情况下,对应用基本是透明,但是如果修改IP就需要应用修改配置。
978 0
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
386 4
|
8月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
1219 62
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
9月前
|
运维 Linux 网络安全
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
自动化真能省钱?聊聊运维自动化如何帮企业优化IT成本
268 4
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
471 4
|
11月前
|
运维 监控 安全
从实践到自动化:现代运维管理的转型与挑战
本文探讨了现代运维管理从传统人工模式向自动化转型的必要性与路径,分析了传统运维的痛点,如效率低、响应慢、依赖经验等问题,并介绍了自动化运维在提升效率、降低成本、增强系统稳定性与安全性方面的优势。结合技术工具与实践案例,文章展示了企业如何通过自动化实现运维升级,推动数字化转型,提升业务竞争力。
|
机器学习/深度学习 人工智能 运维
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
机器学习+自动化运维:让服务器自己修Bug,运维变轻松!
573 14
|
机器学习/深度学习 运维 监控
智能化运维:从自动化到AIOps的演进之路####
本文深入探讨了IT运维领域如何由传统手工操作逐步迈向高度自动化,并进一步向智能化运维(AIOps)转型的过程。不同于常规摘要仅概述内容要点,本摘要将直接引入一个核心观点:随着云计算、大数据及人工智能技术的飞速发展,智能化运维已成为提升企业IT系统稳定性与效率的关键驱动力。文章详细阐述了自动化工具的应用现状、面临的挑战以及AIOps如何通过预测性分析和智能决策支持,实现运维工作的质变,引领读者思考未来运维模式的发展趋势。 ####
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
667 11