keepalived
keepalived的实现是依据vrrp协议,
Keepalived的介绍
- LVS的缺点
1. Director的单点。只有一台Director,如果Director出现故障,无法提供服务。
2. Direct将所有的请求根据所指定的算法发送到后端服务器,如果后端服务器出现异常,则客户端的访问出现问题。Director无法提供对后端服务器的健康状态检查。
- keepalived的体系结构
Keepalived大致分为两层空间:user space和kernel space。
watchdog:负责监控checkers和VRRP Stack进程的状况。
checkers:负责真实服务器的健康检查(health checking),是keepalived最主要的功能。换句话说,可以没有VRRP Stack,但是不能没有Checkers。
VRRP Stack:负责负载均衡器之间的失败切换FailOver,如果只有一个负载均衡器,则VRRP Stack不是必须的。
IPVS Wrappers:用来发送设定的规则(通过ipvsadm设置的规则)到内核ipvs的代码。
Netlink Reflector:用来设定VRRP的VIP等。
Keepalived配置
keepalived 版本为:1.3.2
全局配置
- 全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
说明:
notification_email:指定当keepalived出现问题时,发送邮件给哪些用户。
notification_emai_from:发送邮件时,邮件的来源地址。
smtp_server <DOMAIN|IP> [<PORT>]:smtp服务器的地址或域名。默认端口为25.如:smtp_server smtp.felix.com 25
smtp_helo_name <HOST_NAME>:指定在HELO消息中所使用的名称。默认为本地主机名。
smtp_connect_timeout:指定smtp服务器连接的超时时间。单位是秒。
router_id:指定标识该机器的route_id. 如:route_id LVS_01
vrrp_mcast_group4 224.0.0.18:指定发送VRRP组播消息使用的IPV4组播地址。默认是224.0.0.18
vrrp_mcast_group6 ff02::12 指定发送VRRP组播消息所使用的IPV6组播地址。默认是ff02::12
default_interface eth0:设置静态地址默认绑定的端口。默认是eth0。
lvs_sync_daemon <INTERFACE> <VRRP_INSTANCE> [id <SYNC_ID>] [maxlen <LEN>] [port <PORT>] [ttl <TTL>] [group <IP ADDR>]
设置LVS同步服务的相关内容。可以同步LVS的状态信息。
INTERFACE:指定同步服务绑定的接口。
VRRP_INSTANCE:指定同步服务绑定的VRRP实例。
id <SYNC_ID>:指定同步服务所使用的SYNCID,只有相同的SYNCID才会同步。范围是0-255.
maxlen:指定数据包的最大长度。范围是1-65507
port:指定同步所使用的UDP端口。
group:指定组播IP地址。
lvs_flush:在keepalived启动时,刷新所有已经存在的LVS配置。
vrrp_garp_master_delay 10:当转换为MASTER状态时,延迟多少秒发送第二组的免费ARP。默认为5s,0表示不发送第二组免的免费ARP。
vrrp_garp_master_repeat 1:当转换为MASTER状态时,在一组中一次发送的免费ARP数量。默认是5.
vrrp_garp_lower_prio_delay 10:当MASTER收到更低优先级的通告时,延迟多少秒发送第二组的免费ARP。
vrrp_garp_lower_prio_repeat 1:当MASTER收到更低优先级的通告时,在一组中一次发送的免费ARP数量。
vrrp_garp_master_refresh 60:当keepalived成为MASTER以后,刷新免费ARP的最小时间间隔(会再次发送免费ARP)。默认是0,表示不会刷新。
vrrp_garp_master_refresh_repeat 2: 当keepalived成为MASTER以后,每次刷新会发送多少个免费ARP。默认是1.
vrrp_garp_interval 0.001:在一个接口发送的两个免费ARP之间的延迟。可以精确到毫秒级。默认是0.
vrrp_lower_prio_no_advert true|false:默认是false。如果收到低优先级的通告,不发送任何通告。
vrrp_version 2|3:设置默认的VRRP版本。默认是2.
vrrp_check_unicast_src:在单播模式中,开启对VRRP数据包的源地址做检查,源地址必须是单播邻居之一。
vrrp_skip_check_adv_addr:默认是不跳过检查。检查收到的VRRP通告中的所有地址可能会比较耗时,设置此命令的意思是,如果通告与接收的上一个通告来自相同的master路由器,则不执行检查(跳过检查)。
vrrp_strict:严格遵守VRRP协议。下列情况将会阻止启动Keepalived:1. 没有VIP地址。2. 单播邻居。3. 在VRRP版本2中有IPv6地址。
vrrp_iptables:不添加任何iptables规则。默认是添加iptables规则的。
如果vrrp进程或check进程超时,可以用下面的4个选项。可以使处于BACKUP状态的VRRP实例变成MASTER状态,即使MASTER实例依然在运行。因为MASTER或BACKUP系统比较慢,不能及时处理VRRP数据包。
vrrp_priority <-20 -- 19>:设置VRRP进程的优先级。
checker_priority <-20 -- 19>:设置checker进程的优先级。
vrrp_no_swap:vrrp进程不能够被交换。
checker_no_swap:checker进程不能够被交换。
script_user <username> [groupname]:设置运行脚本默认用户和组。如果没有指定,则默认用户为keepalived_script(需要该用户存在),否则为root用户。默认groupname同username。
enable_script_security:如果脚本路径的任一部分对于非root用户来说,都具有可写权限,则不会以root身份运行脚本。
nopreempt 默认是抢占模式 要是用非抢占式的就加上nopreempt
注意:上述为global_defs中的指令
- 添加静态地址和静态路由