########################Keepalived的工作原理####################
说明:
1、keepalived是lvs的扩展项目,因此它们之间具备良好的兼容性。这点应该是keepalived部署比其他类似工具能更简洁的原因吧!
2、通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离。
3、负载均衡器之间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol)stack实现的。
##VRRP工作原理
1. VRRP即,虚拟路由冗余协议(Virtual Router Redundancy Protocol)
两台(或多台)设备组成一个组,所有的组成员设备都运行VRRP协议。彼此发送vrrp报文,并根据设置的优先级和IP地址来竟选出一台设备作为MASTER,并在其上面虚拟出一台路由器来作为提供数据转发,提供相应arp请求的设备。而所有的其他设备都处于BACKUP状态,并通过发送VRRP报文来监听MASTER设备是否出现问题,以在MASTER出现问题时及时接管虚拟路由器。
##keepalived工作原理
keepalived是模块化设计,不同的模块负责不同的功能,其模块有:
1. core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等。
2. checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换句话说,可以没有VRRPStack,但健康检查healthchecking是一定要有的。
3. VRRPStack 负责负载均衡器之间的失败切换FailOver。如果只用一个负载均衡器,则VRRP不是必须的。
4. IPVS wrapper 用来发送设定的规则到内核ipvs代码。
5. Netlink Reflector 用来设定vrrp的vip地址等。
6.WatchDog:负责监控checkers和VRRP进程的状况。
keepalived正常运行时,共有3个进程:
1.父进程:负责监控其子进程。
2.vrrp子进程
3.checkers子进程
##keepalived.conf的配置
配置文件分三部分:
1.全局定义部分
2.VRRP实例定义部分
3.虚拟服务定义部分
##################Global Defined###################
global_defs {
router_id LVS_MASTER #定义标识主机的字符,可以不必是主机名
}
vrrp_sync_group VGM { #定义一同进行故障转移的IP组的名称
group {
http #定义vrrp实例的名称,也就是后面定义实例的名称。
}
}
#####################Vrrp Instance###################
vrrp_instance http {
state MASTER #定义初始化状态,MASTER或BACKUP
interface eth0 #定义运行vrrp协议的网口
lvs_sync_daemon_interface eth0 #定义lvs syncd的接口
virtual_router_id 51 #定义虚拟路由组id,属于同一组的组成员的id必须是一样的
priority 100 #定义组成员的优先级,数值愈大,优先级越高。
advert_int 1 #定义MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #定义外界访问的VIP
192.168.1.100
}
}
####################Virtual Service Defined###############
virtual_server 192.168.1.100 80 { #定义为哪个服务提供虚拟IP服务
delay_loop 6 #对RealServer进行健康检查的时间间隔
lb_algo rr #调度算法
lb_kind DR #LVS三种模式DR,TUN,NAT之一
# persistence_timeout 20 #会话保持时间,对于动态网页非常有用。
protocol TCP #指定转发协议的类型,有TCP和UDP两种
real_server 192.168.1.106 80 {
weight 100 #配置服务节点权值,数字越大权值越高。
TCP_CHECK { #对realserver状态的TCP监测
connect_timeout 3 #链接超时时间
nb_get_retry 3 #超时后的重试次数
delay_before_retry 3 #每次重试的间隔时间
connect_port 80
}
}
real_server 192.168.1.107 80 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
注:以上配置属于处于MASTER状态的配置文件
若要配置BACKUP状态的组成员机器只需修改如下几项即可:
1.router_id LVS_SLAVE
2.priority 80
3. state BACKUP