#全局定义块 
global_defs { 
notification_email { 
email 
email 
} 
notification_email_from email 
smtp_server host 
smtp_connect_timeout num 
lvs_id string 
} 
 
 #VRRP 实例定义块 
vrrp_sync_group string { 
group { 
string 
string 
} 
 
vrrp_instance string { 
state MASTER|BACKUP 
interface string 
mcast_src_ip @IP 
lvs_sync_daemon_interface string 
virtual_router_id num 
priority num 
advert_int num 
smtp_alert 
authentication { 
auth_type PASS|AH 
auth_pass string 
} 
virtual_ipaddress { # Block limited to 20 IP addresses 
@IP 
@IP 
@IP 
} 
virtual_ipaddress_excluded { # Unlimited IP addresses number 
@IP 
@IP 
@IP 
} 
 
 
#虚拟服务器定义块 
virtual_server (@IP PORT)|(fwmark num) { 
delay_loop num 
lb_algo rr|wrr|lc|wlc|sh|dh|lblc 
lb_kind NAT|DR|TUN 
(nat_mask @IP) 
persistence_timeout num 
persistence_granularity @IP 
virtualhost string 
protocol TCP|UDP 
sorry_server @IP PORT 
 real_server @IP PORT { 
weight num 
TCP_CHECK { 
connect_port num 
connect_timeout num 
} 
} 
real_server @IP PORT { 
weight num 
MISC_CHECK { 
misc_path /path_to_script/script.sh 
(or misc_path “/path_to_script/script.sh <arg_list>”) 
} 
} 
 
real_server @IP PORT { 
weight num 
HTTP_GET|SSL_GET { 
url { # You can add multiple url block 
path alphanum 
digest alphanum 
} 
connect_port num 
connect_timeout num 
nb_get_retry num 
delay_before_retry num 
} 
} 
}

全局定义块 

1、 email 通知。作用:有故障,发邮件报警。这是可选项目,建议不用,用 nagios 全面监


控代替之。 


2、 Lvs 负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 


3、 花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived 运行时,


不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,


这点要特别注意。 

VRRP 定义块 

1、 同步 vrrp 组 vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个


数。即在有 2 个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一


个负载均衡器的实例是哪些? 


2、 实例组 group.至少包含一个 vrrp 实例。 


3、 Vrrp 实例 vrrp_instance.实例名出自实例组 group 所包含的那些名字。 (1) 实例状态 state.只有 MASTER 和 BACKUP 两种状态,并且需要大写这些单词。其中


MASTER 为工作状态,BACKUP 为备用状态。当 MASTER 所在的服务器失效时,


BACKUP 所在的系统会自动把它的状态有 BACKUP 变换成 MASTER;当失效的


MASTER 所在的系统恢复时,BACKUP 从 MASTER 恢复到 BACKUP 状态。 


(2) 通信接口 interface。对外提供服务的网络接口,如 eth0,eth1.当前主流的服务器都有


2 个或 2 个以上的接口,在选择服务接口时,一定要核实清楚。 


(3) lvs_sync_daemon_inteface。负载均衡器之间的监控接口,类似于 HA HeartBeat


的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先


级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface 与服务接


口 interface 使用同一个网络接口。 


(4) 虚拟路由标识 virtual_router_id.这个标识是一个数字,并且同一个 vrrp 实例使


用唯一的标识。即同一个 vrrp_stance,MASTER 和 BACKUP 的 virtual_router_id 是


一致的,同时在整个 vrrp 内是唯一的。 


(5) 优先级 priority.这是一个数字,数值愈大,优先级越高。在同一个 vrrp_instance


里,MASTER 的优先级高于 BACKUP。若 MASTER 的 priority 值为 150,那么 BACKUP


的 priority 只能是 140 或更小的数值。 


(6) 同步通知间隔 advert_int .MASTER 与 BACKUP 负载均衡器之间同步检查的时间间


隔,单位为秒。 


(7) 验证 authentication。包含验证类型和验证密码。类型主要有 PASS、AH 两种,


通常使用的类型为 PASS,据说 AH 使用时有问题。验证密码为明文,同一 vrrp 实例


MASTER 与 BACKUP 使用相同的密码才能正常通信。 


4、 虚拟 ip 地址 virtual_ipaddress . 可以有多个地址,每个地址占一行,不需要指定子


网掩码。注意:这个 ip 必须与我们在 lvs 客户端设定的 vip 相一致! 


虚拟服务器 virtual_server 定义块 

虚拟服务器定义是 keepalived 框架最重要的项目了,是 keepalived.conf 必不可少的部分。 


1、 虚拟服务器 virtual_server. 这个 ip 来自于 vrrp 定义块的第“4”步,后面一个空格,然


后加上端口号。定义一个 vip,可以实现多个 tcp 端口的负载均衡功能。 


(1) delay_loop。健康检查时间间隔,单位是秒。 


(2) lb_algo. 负载均衡调度算法,互联网应用常使用 wlc 或 rr。 


(3) lb_kind. 负载均衡转发规则。一般包括 DR,NAT,TUN3 种,在我的方案中,都使用


DR 的方式。 


(4) persistence_timeout.会话保持时间,单位是秒。这个选项对动态网站很有用处:当用


户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发


给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个 lvs 环境,使


用 DR 转发模式,真实服务器有 3 个,负载均衡器不启用会话保持功能。当用户第


一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一


个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这


时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会


把第 2 次的请求转发到其他的服务器。 


(5) 转发协议 protocol.一般有 tcp 和 udp 两种。实话说,我还没尝试过 udp 协议类的转发。 


2、 真实服务器 real_server.也即服务器池。Real_server 的值包括 ip 地址和端口号。多个连续


的真实 ip,转发的端口相同,是不是可以以范围表示?需要进一步实验。如写成


real_server 61.135.20.1-10 80 . (1) 权重 weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在


于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性


能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。 


(2) Tcp 检查 tcp_check. 


 


关于配置文件的理论我们就先讲到这里。由于应用场景的不同,配置文件也会有很大的差异,


在接下来的章节里,我将以两个具体的应用来展示 keepalived 神奇功效。