lvs主备同步脚本
来源:互联网 发布:网络篮球游戏 编辑:程序博客网 时间:2024/06/08 13:19
#!/bin/bash
# 本脚本用于在188上互相同步主备LVS的keepalived.conf配置文件
# 维护人: 方冲 2015/09/01
# 更新主备网卡识别问题
# 更新网卡识别问题 添加匹配参数"/"
# 2015/10/21 解决bug:在过滤优先级时出现/r字符 使用tr解决
function push_lvs(){
local mode=$1 # m2b或b2m
local src_lvs=$2
local dst_lvs=$3
while : ; do
read -e -p "确认从$src_lvs同步keepalived.conf配置到$dst_lvs? [Yes/No]: " confirm
(echo $confirm |egrep -qi '^no$') && confirm=no && break
(echo $confirm |egrep -qi '^yes$') && confirm=yes && break
done
[ "$confirm" == 'yes' ] || return 0
tmp_dir=`mktemp`
sudo rm -rf $tmp_dir
sudo mkdir -p $tmp_dir/$src_lvs $tmp_dir/$dst_lvs
echo "获取[$src_lvs]的keepalived.conf..."
sudo scp -P12321 $src_lvs:/etc/keepalived/keepalived.conf $tmp_dir/$src_lvs/
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m获取成功 备份路径:'$tmp_dir/$src_lvs/' \033[0m'
echo "获取主备网卡..."
src_net=`sudo ssh -p12321 $src_lvs ip addr | grep "inet $src_lvs/" | awk '{print $NF}'`
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m主'[$src_lvs]'priority: '$src_net'\033[0m'
dst_net=`sudo ssh -p12321 $dst_lvs ip addr | grep "inet $dst_lvs/" | awk '{print $NF}'`
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m备'[$dst_lvs]'priority: '$dst_net'\033[0m'
echo "计算priority优先级..."
src_pri=`grep -v "#" $tmp_dir/$src_lvs/keepalived.conf | tr '\r' ' ' | awk '/priority/{print $2}' `
if ( echo $src_pri |egrep -q '^[0-9]+$' ); then
true
else
echo 获取priority失败 查看$src_lvs是否同时存在两个vrrp,如果是请将两个合成一个。 && return 2
fi
if [ $mode == "m2b" ]; then
let dst_pri=$src_pri-50
echo "主[$src_lvs]priority: $src_pri"
echo "备[$dst_lvs]priority: $dst_pri"
elif [ $mode == "b2m" ]; then
let dst_pri=$src_pri+50
echo "备[$src_lvs]priority: $src_pri"
echo "主[$dst_lvs]priority: $dst_pri"
else
echo mode参数传入不合法 && return 2
fi
#
echo "生成[$dst_lvs]的keepalived.conf..."
sudo sed "/priority/s/$src_pri/$dst_pri/" $tmp_dir/$src_lvs/keepalived.conf >$tmp_dir/$dst_lvs/keepalived.conf
[ $? -ne 0 ] && echo "更新优先级失败" && return 3 || echo -e '\033[32m成功\033[0m'
sudo sed -i s/$src_net/$dst_net/g $tmp_dir/$dst_lvs/keepalived.conf
[ $? -ne 0 ] && echo "更新网卡失败" && return 3 || echo -e '\033[32m成功\033[0m'
echo "发布keepalived.conf到[$dst_lvs]的LVS..."
sudo scp -P12321 $tmp_dir/$dst_lvs/keepalived.conf $dst_lvs:/etc/keepalived/
[ $? -ne 0 ] && echo "发布失败" && return 4 || echo -e '\033[32m发布成功 备份路径:'$tmp_dir/$dst_lvs/'\033[0m'
echo "reload[$dst_lvs]LVS的keepalived配置..."
sudo ssh -p12321 $dst_lvs /etc/init.d/keepalived reload
[ $? -ne 0 ] && echo "reload 失败" && return 5 || echo -e '\033[32m成功\033[0m'
# rm -rf $tmp_dir
}
################
HELP_INFO=`echo -e "\033[33m
注意:
1. 此脚本提供LVS的keepalived.conf的互为同步功能,不支持heartbeat同步
2. 脚本会根据主备同步方向自动增减priority优先级
3. 脚本会自动识别主备机器所使用的网卡
4. 请先在主或备LVS修改keepalived.conf并完成reload后再使用
\033[0m
用法举例:主LVS: 1.1.1.1 备LVS: 2.2.2.2
主 => 备: [priority减小50]
\033[33msudo $0 --m2b 1.1.1.1 2.2.2.2 \033[0m
备 => 主: [priority加大50]
\033[33msudo $0 --b2m 2.2.2.2 1.1.1.1 \033[0m
"`
# precheck
[ $UID -ne 0 ] && echo 请用sudo执行 && exit 1
[ $# -eq 0 ] && echo "$HELP_INFO" && exit 2
ipcalc -c $2 || { echo "[$2]不是合法IP, 请检查" ; exit ; }
ipcalc -c $3 || { echo "[$3]不是合法IP, 请检查" ; exit ; }
case $1 in
--m2b)
push_lvs m2b $2 $3
;;
--b2m)
push_lvs b2m $2 $3
;;
*)
echo "$HELP_INFO"
;;
esac
# 本脚本用于在188上互相同步主备LVS的keepalived.conf配置文件
# 维护人: 方冲 2015/09/01
# 更新主备网卡识别问题
# 更新网卡识别问题 添加匹配参数"/"
# 2015/10/21 解决bug:在过滤优先级时出现/r字符 使用tr解决
function push_lvs(){
local mode=$1 # m2b或b2m
local src_lvs=$2
local dst_lvs=$3
while : ; do
read -e -p "确认从$src_lvs同步keepalived.conf配置到$dst_lvs? [Yes/No]: " confirm
(echo $confirm |egrep -qi '^no$') && confirm=no && break
(echo $confirm |egrep -qi '^yes$') && confirm=yes && break
done
[ "$confirm" == 'yes' ] || return 0
tmp_dir=`mktemp`
sudo rm -rf $tmp_dir
sudo mkdir -p $tmp_dir/$src_lvs $tmp_dir/$dst_lvs
echo "获取[$src_lvs]的keepalived.conf..."
sudo scp -P12321 $src_lvs:/etc/keepalived/keepalived.conf $tmp_dir/$src_lvs/
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m获取成功 备份路径:'$tmp_dir/$src_lvs/' \033[0m'
echo "获取主备网卡..."
src_net=`sudo ssh -p12321 $src_lvs ip addr | grep "inet $src_lvs/" | awk '{print $NF}'`
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m主'[$src_lvs]'priority: '$src_net'\033[0m'
dst_net=`sudo ssh -p12321 $dst_lvs ip addr | grep "inet $dst_lvs/" | awk '{print $NF}'`
[ $? -ne 0 ] && echo 失败 && return 1 || echo -e '\033[32m备'[$dst_lvs]'priority: '$dst_net'\033[0m'
echo "计算priority优先级..."
src_pri=`grep -v "#" $tmp_dir/$src_lvs/keepalived.conf | tr '\r' ' ' | awk '/priority/{print $2}' `
if ( echo $src_pri |egrep -q '^[0-9]+$' ); then
true
else
echo 获取priority失败 查看$src_lvs是否同时存在两个vrrp,如果是请将两个合成一个。 && return 2
fi
if [ $mode == "m2b" ]; then
let dst_pri=$src_pri-50
echo "主[$src_lvs]priority: $src_pri"
echo "备[$dst_lvs]priority: $dst_pri"
elif [ $mode == "b2m" ]; then
let dst_pri=$src_pri+50
echo "备[$src_lvs]priority: $src_pri"
echo "主[$dst_lvs]priority: $dst_pri"
else
echo mode参数传入不合法 && return 2
fi
#
echo "生成[$dst_lvs]的keepalived.conf..."
sudo sed "/priority/s/$src_pri/$dst_pri/" $tmp_dir/$src_lvs/keepalived.conf >$tmp_dir/$dst_lvs/keepalived.conf
[ $? -ne 0 ] && echo "更新优先级失败" && return 3 || echo -e '\033[32m成功\033[0m'
sudo sed -i s/$src_net/$dst_net/g $tmp_dir/$dst_lvs/keepalived.conf
[ $? -ne 0 ] && echo "更新网卡失败" && return 3 || echo -e '\033[32m成功\033[0m'
echo "发布keepalived.conf到[$dst_lvs]的LVS..."
sudo scp -P12321 $tmp_dir/$dst_lvs/keepalived.conf $dst_lvs:/etc/keepalived/
[ $? -ne 0 ] && echo "发布失败" && return 4 || echo -e '\033[32m发布成功 备份路径:'$tmp_dir/$dst_lvs/'\033[0m'
echo "reload[$dst_lvs]LVS的keepalived配置..."
sudo ssh -p12321 $dst_lvs /etc/init.d/keepalived reload
[ $? -ne 0 ] && echo "reload 失败" && return 5 || echo -e '\033[32m成功\033[0m'
# rm -rf $tmp_dir
}
################
HELP_INFO=`echo -e "\033[33m
注意:
1. 此脚本提供LVS的keepalived.conf的互为同步功能,不支持heartbeat同步
2. 脚本会根据主备同步方向自动增减priority优先级
3. 脚本会自动识别主备机器所使用的网卡
4. 请先在主或备LVS修改keepalived.conf并完成reload后再使用
\033[0m
用法举例:主LVS: 1.1.1.1 备LVS: 2.2.2.2
主 => 备: [priority减小50]
\033[33msudo $0 --m2b 1.1.1.1 2.2.2.2 \033[0m
备 => 主: [priority加大50]
\033[33msudo $0 --b2m 2.2.2.2 1.1.1.1 \033[0m
"`
# precheck
[ $UID -ne 0 ] && echo 请用sudo执行 && exit 1
[ $# -eq 0 ] && echo "$HELP_INFO" && exit 2
ipcalc -c $2 || { echo "[$2]不是合法IP, 请检查" ; exit ; }
ipcalc -c $3 || { echo "[$3]不是合法IP, 请检查" ; exit ; }
case $1 in
--m2b)
push_lvs m2b $2 $3
;;
--b2m)
push_lvs b2m $2 $3
;;
*)
echo "$HELP_INFO"
;;
esac
阅读全文
0 0
- lvs主备同步脚本
- Mysql + LVS + KeepAlived 主主同步
- LVS配置脚本
- LVS & realserve 启动脚本
- LVS 配置脚本分析
- Director脚本(LVS)
- LVS配置脚本
- lvs配置脚本
- mysql Lvs+Keepalived+Mysql单点写入主主同步
- python 调用 lvs 脚本 [备忘]
- LVS+KEEPALIVED+MYSQL单点写入读负载均衡主主同步高可用方案
- MySQL + KeepAlived + LVS 单点写入主主同步高可用架构实验
- mysql高可用探究(二)Lvs+Keepalived+Mysql单点写入主主同步高可用方案
- MySQL + KeepAlived + LVS 单点写入主主同步高可用架构实验
- MySQL + KeepAlived + LVS 单点写入主主同步高可用架构
- lvs+keepalived+nginx 搭建主备
- Lvs dr服务器脚本配置
- lvs的realserver健康检查脚本
- eclipse添加本地tomcat
- codeforces803F Coprime Subsequences -- 莫比乌斯函数+容斥
- SQL调优工具包DBMS_SQLTUNE的使用方法
- manacher算法处理最长的回文子串(二)
- Javascript 实现匿名递归
- lvs主备同步脚本
- 修改NavigationView的MenuItem的字体颜色并修改默认选中的item
- Java IO流学习总结
- 移动端类似于百度搜索自动补全功能
- java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用
- manacher算法处理最长的回文子串(一)
- React-Native Redux的基本使用方式
- Android 属性(attr)引用
- 排序之快速排序