keepalived 配置文件详解

Keep 的配置文件可以分为三类、


1、全局配置文件  

2、VRRPD 配置

3、LVS 配置


全局配置:对整个 Keepalive 配置生效的,不管是否使用 LVS

VRRPD 是 Keepalived 的核心

LVS 配置只在使用 Keepalived 来配置和管理 LVS 时才需要使用,如果仅仅使用 Keepalived做 HA,LVS 的配置完全是不需要的。配置文件都是以块(block)形式组织的,每个块都在{和}包围的范围内。#和!开头的行都是注释



#全局配置--包括两个子配置,全局定义(global definition)和静态地址路由(static ipaddress/routes)

! Configuration File for keepalived


global_defs {#全局配置

notification_email {#发生事件切换的时候,发送的邮箱,可以有多个,每行一个

[email protected]#需要接收邮箱1

[email protected]#需要接收邮箱2

}


notification_email_from [email protected]  #发件箱

smtp_server 127.0.0.1#指定邮件服务的地址

smtp_connect_timeout 30#连接 smtp 超时间隔

router_id LVS_DEVEL#运行 keepalive 机器的标示,注意每个机器需要唯一的标示

}



#静态地址和路由

所谓的静态(static)就是说不会随 vrrpd instance 的开/关而变化,VIP 就不是 static 的,会随着 vrrpd而添加/删除。整个配置可以用来给服务器配置静态的 IP 地址/路由,当然如果服务器的配置里面已经有这些配置,这里就不需要设置了。

static_ipaddress

{

192.168.1.1/24 brd + dev eth0 scope global

#keepalive 最终运行的命令是 ip addr add 192.168.1.1/24 brd + dev eth0 scope global

#这里的配置要符合 linux 下的命令规则

}

static_routes

{

src $SRC_IP to $DST_IP dev $SRC_DEVICE

#源地址,目的地址

src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE

}

==============================================全局配置到此结束==========================================================================


#VRRPD 的配置包括2部分:VRRPD 同步组(synchroizstion group)和 VRRPD 实例(VRRPD instance)VRRPD Sync Groups

不适用 Sync Group 的话,如果机器(或者说 router)有两个网段,一个内网,一个外网,每个网段开启一个 VRRPD 实例,假设 VRRPD 配置为检查内网,那么当外网出现问题时,VRRPD 认为自己仍然健 康,那么不会发送 Master 和 Backup 的切换,从而导致了问题。Sync group 就是为了解决这个问题,可以把两个实例放进一个 Sync Group,这样的话,group 里面任何一个实例出现问题都会发生切换。

vrrp_syncv_group VG_1 {

group {

inside_network

outside_network

}

notify_master /path/to/to_master.sh

notify_backup /path/to/to_backup.sh

notify_fault "/path/fault.sh VG_1"

notify /path/to/notify.sh

smtp_alter

}

#notify_mater 指定当切换到 Master 时,指定的脚本,这个脚本可以传入参数(引号引起),其他2个类推

#notify 指定有3个参数,这些参数由 Keepalived 提供:$1(GROUP-INSTANCE),$2(group 或者 instance 的名字),$3(MASTER_BACKUP-FAULT)

#smtp_alter 使用 global_defs 里面定义的邮件地址和 smtp 服务器在切换后发送邮件通知

#VIP

vrrp_instance VI_1 {


state MASTER#两种角色,MASTER or BACKUP 备份服务器此处是 BACKUP


#state 指定 instance 的初始(initial)状态,在两台 router 都启动后,马上会发生竞选,高 priority 的会竞选为 Master,所以这里的额 state 并不表示这台就是一直是 Master

interface eth0#实例绑定的网卡

dont_track_primary#忽略 VRRP 的 interface 错误(默认不设置)



track_interface {#设置额外的监控,里面的任意一个网卡出现问题,都会进入 FAULT 状态

eth0

eth1

}



mcast_src_ip <IPADDR>#发送多播包的地址,如果不设置,默认使用绑定的网卡的 primary IP




Garp_master_delay 10#在切换到 MASTER 状态后,延迟进行 gratuitous ARP 请求

virtual_router_id 51#VRID 标记(0...255)

priority 100#优先级,另一台改为90

advert_int 1#检查间隔,默认1s

nopreempt#不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置



lvs_sync_daemon_interface #lvs syncd 绑定的网卡


authentication {#认证

auth_type PASS#认证的方式,支持 PASS 和 AH

auth_pass 1111#认证的密码

}

virtual_ipaddress {#指定漂移地址(VIP)

192.168.16.200#如果有多个 VIP,继续换行填写

 }


virtual_routes {#发生切换的时候添加/删除路由

src 192.168.16.1 to 192.168.1.0/24 via 192.168.16.21 dev eth1

192.168.2.0/24via 192.168.16.21 dev eth1

192.168.3.0/24 dev eth2

192.168.4.0/24 via 192.168.16.21


preempt_deay#抢占延迟,默认为5分钟

Debug#debug 级别

}

}

#=============================================VRRPD 配置到此结束===============================================================================

#LVS 配置-包括两部分:虚拟主机组(virtual server group)和虚拟主机(virtual server),这些配置都会传递给 ipvsadm 作为参数

虚拟主机组

这个配置段是可选的,目的是为了让一台 RealServer 上的某个 service 可 以 属 于 多 个 Virtual Server,并且只做一次监控检查。

virtual_server_group <STRING> {

#VIP port

<IPADDR> <PORT>

<IPADDR> <PORT>

fwmark <INT>

}

虚拟主机 可以用下面三种方式中的任意一种配置

1.virtual_server IPport

2.virtual_server fwmark int

3.virtual_server group sting



virtual_server 192.168.16.200 80 {#设置 VIP port

delay_loop 2#每个2秒检查一次 real_server 状态

lb_algo wrr#LVS 调度算法 #lb_algo rr|wrr|lc|wlc|sh|dh|lblc

lb_kind DR#LVS 集群模式 #lb_kind NAT|DR|TUN

persistence_timeout 60 #会话保持时间

#pertsistence_granularity <NETMASK>  #lvs 会话保持度,ipvsadm中的-M 参数,默认是0xffffffff,即根据每个客户端做会话保持


#virtualhost <sting>#HTTP_GET 做健康检查时,检查的 Web 服务器的虚拟主机(即 Host:头)

protocol TCP#使用协议 TCP 或者 UDP #protocol TCP|UDP

ha_suspend#suspendhealthchecker's activity

#sorry_server @IP PORT #备用机,当所有的 realserver 失效后使用



real_server 192.168.16.253 80 {


weight 3#权重,默认为1;0为失效

inhibit_on-failure#在服务器健康检查失败时,将weight 设置为0,而不是直接从 IPVS 里面删除


#notify_down "/root/realserver.sh start"  #检测到服务 down 后执行的脚本

#notify_up "/root/realserver.sh stop"#检测到服务器 up 后执行的脚本



TCP_CHECK {#tcp 健康检查

connect_timeout 10#连接超时时间

nb_get_retry 3#重连次数

delay_before_retry 3#重连间隔时间

connect_port 80#健康检查端口

  }

}

real_server 192.168.16.252 80 {

weight 3#权重

#notify_down "/root/realserver.sh start"#检测到服务 down 后执行的脚本

#notify_up"/root/realserver.sh start" #检测到服务 up 后执行的脚本


#TCP 方式的监控检查

TCP_CHECK {


connect_port 80#健康检查端口

bindto 192.168.16.200

connect_timeout 10#连接超时时间

nb_get_retry 3#重连次数

delay_before_retry 3#重连间隔时间


}

#MISC 健康检查方式,执行一个程序


MISC_CHECK#检测脚本

{


misc_path /path_to_script/script.sh#外部程序脚本路径

misc_timeout <INT>#脚本执行的超时时间

misc_dynamic

如果设置了 misc_dynamic 的话,healthecechker 程序的退出状态码会用来动态调整服务器的权重(weight)

返回0:健康检查 OK,权重不被修改

返回1:健康检查失败,权重设为0

返回2-255,健康检查 OK,权重设置为:退出状态码-2,比如返回255,那么 weight=255-2=253

(or misc_path "/path_to_script/script.sh

}


#HTTP_GET|SSL_GET#健康检测的方式 TCP_CHECK |SSL_GET|HTTP_GET|

{


url{#HTTP/SSL 检查的 URL,这里可以指定多个 url


# You can add multiple url block


path /#路径

digest 1a23dddd32ddddd#SSL 检查后的摘要信息(genhash 工具算出)

status_code 200#HTTP 检查的返回状态码

}

connect_port 80#监控检查端口

bindto 192.168.16.200#以此地址发送请求对服务器进行监控检查

connect_timeout num#连接超时时间

nb_get_retry num#重试次数

delay_before_retry num#重连间隔时间



}

}



}

}


#===================================================扩展参数======================================================================



vrrp_sync_group string {

group {

string

}

notify_master /path_to_script/script_master.sh

(or notify_master “ /path_to_script/script_master.sh <arg_list>”)

notify_backup /path_to_script/script_backup.sh

(or notify_backup “ /path_to_script/script_backup.sh <arg_list>”)

notify_fault /path_to_script/script_fault.sh

(or notify_fault “/path_to_script/script_fault.sh <arg_list>”)

}

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

}

virtual_ipaddress_excluded { # Unlimited IP addresses number

@IP

@IP

}

notify_master /path_to_script/script_master.sh

(or notify_master “ /path_to_script/script_master.sh <arg_list>”)

notify_backup /path_to_script/script_backup.sh

(or notify_backup “ /path_to_script/script_backup.sh <arg_list>”)

notify_fault /path_to_script/script_fault.sh

(or notify_fault “/path_to_script/script_fault.sh <arg_list>”)

}


real_server @IP PORT

{

weight num 权重

MISC_CHECK 检测脚本

{

misc_path /path_to_script/script.sh 脚本路径

(or misc_path "/path_to_script/script.sh

}

}



real_server @IP PORT

{


weight num#权重                        

HTTP_GET|SSL_GET#健康检测的方式 TCP_CHECK |SSL_GET|HTTP_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 两次成功 retry 之间的时间间隔

 }

}

#############################################################################################

一些需要注意的事项:

全局定义块


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种。

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


当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个 lvs 环境,使用 DR 转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了―登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。

(5) 转发协议 protocol.一般有 tcp 和 udp 两种。

2、 真实服务器 real_server.也即服务器池。Real_server 的值包括 ip 地址和端口号。多个连续的真实 ip,转发的端口相同,是不是可以以范围表示?需要进一步实验。如写成 real_server 61.135.20.1-10 80 .


(1)权重 weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。


(2)Tcp 检查 tcp_check.








你可能感兴趣的:(lvs.keepalived)