Linux 使用 keepalived 实现双机热备

环境说明

两台 linux 服务器,我的服务器是 centOs 7

172.16.100.122 (主)

172.16.100.124 (备)


查看网卡信息,两台服务器使用的都是 eno4 网卡

ip addr

psd1403

psd1403

下载keepalived源码

访问 https://www.keepalived.org/download.html 获取最新的 keepalived 版本下载地址

psd1403

两台服务器分别下载 keepalived 安装包,国外资源网速不太好,1M我这下载了5分钟。下载不成功的,自己百度一下资源。

wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz

psd1403

解压安装包,进入安装目录

cd keepalived-2.0.20

psd1403

配置 keepalived 安装目录

./configure --prefix=/etc/keepalived

psd1403

出现了一个错误,提示缺少IPv6依赖,yum安装IPv6组件

psd1403

yum -y install libnl libnl-devel

psd1403

IPv6组件安装完成,再次配置 keepalived 安装目录

./configure --prefix=/etc/keepalived

psd1403

运行后没有报错,直接安装

 make && make install

psd1403

安装完成,启动

keepalived service keepalived start

psd1403

启动失败了,提示查看错误日志, 查看错误日志

 journalctl -xe

psd1403

提示没有找到配置文件

 /etc/keepalived/keepalived.conf

从源码包里复制配置文件、启动脚本、启动文件  

cp keepalived/etc/init.d/keepalived /etc/init.d/

chmod +x /etc/init.d/keepalived

cp /etc/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp /etc/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

再次启动 keepalived,启动成功

service keepalived start

psd1403

ip addr 查看网卡信息

先拷贝一份 keepalived 配置文件,留作备份。然后修改配置文件

psd1403

主服务器

global_defs {
    # (VI_1) the virtual router id must be set,运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息
    router_id chk_niginx_122
    # default user 'keepalived_script' for script execution does not exist - please create.需添加下面配置
    script_user root
    enable_script_security
}
# keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后,priority较小将会接管。
vrrp_instance VI_1 {
    # 指定keepalived的角色,主机设置为MASTER,备用机设置为BACKUP,注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER。
    state MASTER
    # 指定HA监测网络的接口。centos7使用 ip addr 获取
    interface eno4
    # 发送多播数据包时的源IP地址,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
    # mcast_src_ip 192.168.88.xx
    # 主备的virtual_router_id必须一样,可以设置为IP后一组:must be between 1 & 255
    virtual_router_id 220
    # 优先级值,在同一个vrrp_instance下, MASTRE 一定要高于 BAUCKUP,MASTER恢复后,BACKUP自动交接
    priority 100
    # VRRP 广播周期秒数,如果没检测到该广播,就被认为服务挂了,将切换主备
    advert_int 1
    # 设置验证类型和密码。主从必须一样
    authentication {
        # 设置vrrp验证类型,主要有PASS和AH两种
        auth_type PASS
        # 加密的密码,两台服务器一定要一样,才能正常通信
        auth_pass passwd
    }
    virtual_ipaddress {
        # VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
        172.16.100.220
    }
}

备份服务器

global_defs {
    # (VI_1) the virtual router id must be set,运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息
    router_id chk_niginx_124
    # default user 'keepalived_script' for script execution does not exist - please create.需添加下面配置
    script_user root
    enable_script_security
}
# keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后,priority较小将会接管。
vrrp_instance VI_1 {
    # 指定keepalived的角色,主机设置为MASTER,备用机设置为BACKUP,注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER。
    state MASTER
    # 指定HA监测网络的接口。centos7使用 ip addr 获取
    interface eno4
    # 发送多播数据包时的源IP地址,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
    # mcast_src_ip 192.168.88.xx
    # 主备的virtual_router_id必须一样,可以设置为IP后一组:must be between 1 & 255
    virtual_router_id 220
    # 优先级值,在同一个vrrp_instance下, MASTRE 一定要高于 BAUCKUP,MASTER恢复后,BACKUP自动交接
    priority 90
    # VRRP 广播周期秒数,如果没检测到该广播,就被认为服务挂了,将切换主备
    advert_int 1
    # 设置验证类型和密码。主从必须一样
    authentication {
        # 设置vrrp验证类型,主要有PASS和AH两种
        auth_type PASS
        # 加密的密码,两台服务器一定要一样,才能正常通信
        auth_pass passwd
    }
    virtual_ipaddress {
        # VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
        172.16.100.220
    }
}

分别重启两台服务器 keepalived

service keepalived restart

再次 ip addr 查看两台服务器IP,配置完成

psd1403

psd1403

109
0
9月前