关于我
~一个热爱火影的业余小提琴玩家~
Joynaruto

使用Keepalived让OpenWrt永不宕机

前言

今天早上起床,没有小爱主动播报天气及日程,感觉出一丝不对的我拿起手机一看,原来软路由在今天凌晨2点38分已经挂掉了。按以前套路一般是软路由内部积灰过多造成散热问题导致关机,于是乎对其一顿清灰后重新插上电源,但依旧一片安静,主机丝毫没有运转的迹象。最后排查问题后发现可能电源适配器出现故障。

由于我家DHCP服务DNS服务都是由这台软路由负责,所以软路由罢工后,我家的网络基本就是瘫痪了。于是全网搜索19v*6.32A且带7.4*5大针口的电源适配器,最后找到了一家仓库在上海的店家,直接叫了闪送到家。虽然电源适配器参数略有差异,但好在能跑起来。

经过这次之后,我就在想到之前尝试过的一个项目,名字叫keepalived,用于服务器热备冗余。当时在我另一台服务器上虚拟了两个OpenWrt互相热备成功后就没再折腾了,正好这次我把他部署到我主软路由上。

过程

先说下我主备机情况,主机是物理机安装的OpenWrt,版本为18.06.8;备机是服务器虚拟出来的ImmortalWrt,版本为23.05.2

首先运行如下命令拉取升级依赖并安装keepalived

opkg update
opkg install keepalived

之后运行如下命令告诉系统配置文件的路径:

cat > /etc/config/keepalived <<-EOF
config globals 'globals'  
  option alt_config_file "/etc/keepalived/keepalived.conf"
EOF

然后要确定一个关键的东西是VIP(虚拟IP),我的两台软路由的地址分别是:192.168.31.133192.168.31.130。所以给VIP设定为一个不冲突的192.168.31.134

备机

cat > /etc/keepalived/keepalived.conf <<-EOF
global_defs {
    router_id LVS_1
}
vrrp_instance VI_1 {
    interface eth0 # 这里是lan口网卡名,通过ip a查看
    state BACKUP
    virtual_router_id 1  # 主机和备机这个需要一致
    priority 50  # 主机建议设置比这个更高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.134/24 # 这里是虚拟ip地址
    }
}
EOF

这样备机的配置就完成了

主机

cat > /etc/keepalived/keepalived.conf <<-EOF
global_defs {
    router_id LVS_1
}
vrrp_instance VI_1 {
    interface eth0 # 这里是lan口网卡名,通过ip a查看
    state MASTER
    virtual_router_id 1  # 主机和备机这个需要一致
    priority 100  # 主机建议设置比备机高
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.31.134/24 # 这里是虚拟ip地址
    }
}
EOF

这样主机就配置完成了

启动进程

/etc/init.d/keepalived restart

通过ps -ef | grep keepalived来查看进程是否运行

遇到的问题

进程无法启动

在启动进程的时候,备机没问题一次点亮,但主机的进程却起不来,通过keepalived --check-config命令排查问题后发现三条找不到文件的报错

解决方法

其实这些文件都在/usr/lib64/下,只是名字不一样,所以只要复制一份原文件并改成keepalived需要的名字就能解决

cp /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.0.0
cp /usr/lib64/libip4tc.so.2 /usr/lib64/libip4tc.so.0
cp /usr/lib64/libip6tc.so.2 /usr/lib64/libip6tc.so.0

再次运行进程即可正常运行

无法读取使用配置文件

运行进程后,备机还是没有问题,主机却无法读取配置文件。

解决方法

1、先停止主机的keepalived进程

service keepalived stop
service keepalived disable

2、手动启动keepalived

/usr/sbin/keepalived

3、然后输入ip a,查看 网口是否同时有VIPOpenWrt配置的ip。若有,则OpenWrtkeepalived配置和启动成功运行。

4、登录OpenWrtluci界面,把手动启动命令加入系统-启动项exit 0行前面。 这样,下次便会自动启动keepalived

验证

手动关闭主机后,客户端们的网关和DNS会自动切换到备机,同时从备机的主页上也能看到,其StateBACKUP已经切换到MASTER

最后

有了热备冗余后,网络高可用,再也不用担心因为软路由挂掉导致网络瘫痪了 ;-)

发表回复

textsms
account_circle
email

Joynaruto

使用Keepalived让OpenWrt永不宕机
前言 今天早上起床,没有小爱主动播报天气及日程,感觉出一丝不对的我拿起手机一看,原来软路由在今天凌晨2点38分已经挂掉了。按以前套路一般是软路由内部积灰过多造成散热问题导致关机…
扫描二维码继续阅读
2025-01-02