当前位置: 移动技术网 > 网络运营>服务器>Linux > 用shell脚本实现自动切换内网和外网实现高可用

用shell脚本实现自动切换内网和外网实现高可用

2017年12月12日  | 移动技术网网络运营  | 我要评论

首先说明下我们的配置文件,都是类似格式的,假如内网是192.168.0.3,外网是123.123.123.123,配置文件如下:

$db['salver']['hostname'] = '192.168.0.3:3306';
//$db['salver']['hostname'] = '123.123.123.123:3306';

这个时候就是外网是注释的状态。走的是内网。
说下思路,就是一个配置文件,复制出来2分放到别的地方,这两份一个里面设置的是内网,一个里面设置的是外网,如果内网不通的情况下,判断当前用的是内网还是外网,如果是内网的情况下,就把外网的配置文件复制到网站文件里,如果内网通了,就把内网的配置文件再复制到网站文件里。就相当于是内网ip是主,外网ip是备一样。把这个脚本放在计划任务里,1分钟执行一次。

复制代码 代码如下:

#!/bin/bash
#主从数据库的内外网ip
master_ip_n=
master_ip_w=
salver_ip_n=
salver_ip_w=
#mongo的内外网ip
mongo_ip_w=
mongo_ip_n=
#redis的主从内外网ip
redis_master_ip_w=
redis_master_ip_n=
redis_slave_ip_w=
redis_slave_ip_n=
#sphinx的内外网ip
sphinx_ip_w=
sphinx_ip_n=
#网站配置文件的位置
database_path=/home/caoy/database.php
mongo_path=/home/caoy/over_sea_stock.php
redis_path=/home/caoy/rediska_connector.php
sphinx_path=/home/caoy/sphinxconnector.php
config_path=/data/check_ip_config/
#检测当前使用的网卡
function check_ip(){
ip_config=`cat $1  |grep $2 | cut -c1-2`
if [ "$ip_config" == "//" ];then
        ip_status=1
else
        ip_status=0
fi
}
#判断内网网卡是否故障
function check_network(){
nmap -sp $1 | grep "1 host up" >/dev/null || (sleep 5 ; nmap -sp $1) | grep "1 host up" >/dev/null
#ping $1 -c 5 > /dev/null
if [[ "$?" == "1" ]]; then
        check_ip $database_path $1
        if [[ "$ip_status" == "0" ]];then
                cp -r $config_path/database_w.php $database_path
                echo "cp database_w.php is ok!"
        fi
        check_ip $mongo_path $1
        if [[ "$ip_status" == "0" ]];then
                cp -r $config_path/over_sea_stock_w.php $mongo_path
                echo "cp over_sea_stock_w.php is ok!"
        fi
        check_ip $redis_path $1
        if [[ "$ip_status" == "0" ]];then
                cp -r $config_path/rediska_connector_w.php $redis_path
                echo "cp rediska_connector_w.php is ok!"
        fi
        check_ip $sphinx_path $1
        if [[ "$ip_status" == "0" ]];then
                cp -r $config_path/sphinxconnector_w.php $sphinx_path
                echo "cp sphinxconnector_w.php is ok!"
        fi
else
        check_ip $database_path $1
        if [[ "$ip_status" == "1" ]];then
                cp -r $config_path/database_n.php $database_path
                echo "cp database_n.php is ok!"
        fi
        check_ip $mongo_path $1
        if [[ "$ip_status" == "1" ]];then
                cp -r $config_path/over_sea_stock_n.php $mongo_path
                echo "cp over_sea_stock_n.php is ok!"
        fi
        check_ip $redis_path $1
        if [[ "$ip_status" == "1" ]];then
                cp -r $config_path/rediska_connector_n.php $redis_path
                echo "cp rediska_connector_n.php is ok!"
        fi
        check_ip $sphinx_path $1
        if [[ "$ip_status" == "1" ]];then
                cp -r $config_path/sphinxconnector_n.php $sphinx_path
                echo "cp sphinxconnector_n.php is ok!"
        fi
fi
}
#检测各个网卡是否通畅
check_network $master_ip_n
check_network $salver_ip_n
check_network $mongo_ip_n
check_network $redis_master_ip_n
check_network $redis_slave_ip_n
check_network $sphinx_ip_n

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网