lvs主备同步脚本

本文介绍了一个用于同步LVS集群中keepalived配置文件的Shell脚本。该脚本支持自动调整主备节点的优先级,并能识别主备节点的网络接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/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
### 路由实现原理 路由的核心在于通过某种机制实现在路由器发生故障时,用路由器能够迅速接管网络流量,从而保障网络服务的连续性和稳定性。这种功能通常依赖于虚拟路由冗余协议(VRRP),它是一种用于提高网络可靠性的标准协议。 #### VRRP 协议的工作原理 VRRP 的要目标是解决局域网中静态网关可能出现的单点失效问题[^2]。该协议允许多台物理路由器组成一个虚拟路由器组,并由其中一台担任路由器(Master),其他作为份路由器(Backup)。这些路由器共享一个虚拟 IP 地址,对外表现为单一的逻辑实体。正常情况下,只有 Master 路由器处理数据包;如果 Master 出现故障,则 Backup 中的一台会自动升级为新的 Master 继续提供服务[^3]。 以下是 VRRP 工作的具体过程: - **选举机制**:在启动阶段或者检测到当前 Master 不可达时,各成员根据优先级参数决定谁成为新任 Master。 - **通告消息**:Master 定期发送免费 ARP 广播通知客户端更新 MAC 映射表项至最新状态下的虚拟地址关联关系。 - **抢占模式**:支持更高优先级别的节点重新加入群集后立即夺回控制权的功能选项,默认开启此特性以便尽快恢复最优路径连接质量。 ### Keepalived 配置方法 Keepalived 是一种广泛使用的开源软件工具,专门用来构建基于 Linux 系统环境中的服务器集群架构下达到负载均衡以及高可用目的解决方案之一[^4]。下面介绍如何利用 keepalived 来设置简单的双机热模型: #### 基本配置文件结构 编辑 `/etc/keepalived/keepalived.conf` 文件,定义全局属性、实例名称及相关监听端口等内容如下所示: ```bash global_defs { router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.200 } } ``` 上述脚本片段设置了 master 和 backup 两种角色之间的转换条件,包括接口绑定、认证密码保护措施等方面的信息描述。 完成以上步骤之后记得重启服务使更改生效即可测试效果啦! ### 网络高可用设计要点 为了确保整个系统的健壮性,在规划过程中还需要注意以下几个方面事项: - 数据同步策略制定; - 故障探测灵敏度调整优化; - 日志记录详尽程度增强便于后续排查分析工作开展顺利进行下去等等。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值