keepalived简易教程

keepalived的作用为保持存活服务,服务启动后会在两台物理机器之间维护一个vip,但是仅有一台物理机器拥有该vip,这样就保证了两台机器之间是主备。

安装

在ubuntu下直接执行:sudo apt-get install keepalived.

使用

本例子两台机器的物理ip地址分别为10.101.185和10.101.1.186,要增加的虚拟ip地址为10.101.0.101、10.101.0.102、10.101.0.107和10.101.0.108,其中10.101.0.101和10.101.0.102在10.101.185上为主,10.101.0.107和10.101.0.108在10.101.1.186上为主。

keepalived的默认配置文件位于/etc/keepalived/keepalived.conf目录下,由于两台物理机器之间的主辅关系不同,配置文件也不相同。

10.101.185机器上的配置文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
! Configuration File for keepalived

global_defs {
   # 报警邮箱配置
   notification_email {
     ops@yidian-inc.com
   }
   smtp_server 10.101.1.139
   smtp_connect_timeout 30
   router_id 101-1-185-lg-201-l10.yidian.com  // 运行机器的唯一标识,每个机器应该都不一样,可以直接使用hostname代替,具体用在什么地方暂时不是很清楚
}

vrrp_instance ha-internal-1 {
    state MASTER
    interface eth0
    virtual_router_id 1	// VRID标记,可以设置为0-255,对应VRRD协议中的Virtual Rtr Id
    priority 100  // 对应VRRD协议中的priority选项
    advert_int 1	// 检测间隔,默认为1s,对应VRRD协议中的adver int
    authentication {
        auth_type PASS // 认证方式,支持PASS和AH
        auth_pass 1-internal-ha  // 认证的密码,从抓取的包中看到
    }
    // 声明的虚拟ip地址,这些ip会在VRRP一些的一个包发送
    // 另外VRRP协议中还有一个Count IP Addrs用来指明需要声明多少个VIP
    virtual_ipaddress {
        10.101.0.101/22 dev eth0
        10.101.0.102/22 dev eth0
    }
}

vrrp_instance ha-internal-2 {
    state BACKUP
    interface eth0
    virtual_router_id 2
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2-internal-ha
    }
    virtual_ipaddress {
        10.101.0.107/22 dev eth0
        10.101.0.108/22 dev eth0
    }
}

10.101.1.186上的配置文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
! Configuration File for keepalived

global_defs {
   notification_email {
     ops@yidian-inc.com
   }
   smtp_server 10.101.1.139
   smtp_connect_timeout 30
   router_id 101-1-186-lg-201-l10.yidian.com
}

vrrp_instance ha-internal-1 {
    state BACKUP
    interface eth0
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1-internal-ha
    }
    virtual_ipaddress {
        10.101.0.101/22 dev eth0
        10.101.0.102/22 dev eth0
    }
}

vrrp_instance ha-internal-2 {
    state MASTER
    interface eth0
    virtual_router_id 2
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 2-internal-ha
    }
    virtual_ipaddress {
        10.101.0.107/22 dev eth0
        10.101.0.108/22 dev eth0
    }
}

配置文件搭建完毕后,通过sudo service keepalived start即可启动服务,执行ip addr命令即可看到vip。需要注意的是,通过ifconfig命令是看不到vip的。

有了vip,其他服务就可以利用该vip做一些绑定vip的端口来作为主辅热备模式了。

about vrrp

关于VRRP的详细说明可以查看RFC3768,我这里记录几点说明。

协议中的以太网Destination Address的值必须为多播地址224.0.0.18。

当前正在使用的VRRP版本为version 2,认证功能已经取消,但为了向下兼容,仍然可用。在抓取的包中,仍在使用认证信息

download

这里提供两个vrrp协议的pcap包