lvs在我之前的博客《 高负载集群实战之lvs负载均衡-技术流ken》中已经进行了详细的介绍和应用,在这里就不再赘述。这篇博文将把lvs与keepalived相结合使用,在实际工作中搭建高可用,高负载,高性能的服务器集群。
“Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。”--摘自360百科
2.keepalived的主要功能 1. healthcheck检查后端节点是否正常工作
如果发现后端节点异常,就将该异常节点从调度规则中删除;
如果发现后端的异常节点恢复正常了,就将该节点重新加入到调度规则中;
2. failover是对调度器的主节点做健康检测。
将备用节点升级为主节点
接管主节点上的资源(vip、lvs规则)
3.keepalived实现故障切换的原理
1.keepalived是基于vrrp写于实现的故障切换
2.正常情况下,主节点会每隔一段时间向备节点发送一个心跳信息,这个就是告诉备节点自己正常。
当主节点发生故障,那么备节点无法接收都心跳信息,就认定主节点故障,那么就会接收主节点的业务和资源(包括vip)
当主节点又恢复的时候,那么备节点释放所接收到资源和业务
4.简单说说vrrp协议
1. VRRP((Virtual Router Redundancy Protocol),虚拟路由冗余协议,为了解决静态路由的单点故障问题
2. VRRP的工作机制是基于竞选机制选择一个路由来完成任务处理
3. VRRP协议是通过发送多播数据包实现竞选的(Multicat)
4. 竞选出来主节点会一直发送广播包,backup节点一直监听这些广播包(处于监听状态)
5. 当备用节点无法接收到广播包的是时候,就会重新进行竞选,选出一个新的节点作为主节点
5.keepalived可以完成如下工作
1. 自动生成vip(vip给用户提供服务)
2. 自动配置lvs规则
3. 可以实现各种服务的高可用
4. failover的时候,做vip的漂移
6.keepalived的配置文件
第一段:global_defs,全局配置段 global_defs { notification_email { 237745635@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id id1 <<< 当前主机的ID值,这个值必须是唯一的[要确保标红的三处不同] } 第二段:vrrp_instance,实例配置段(虚拟服务段) 【该段是定义虚拟服务的vip等信息】 vrrp_instance VI_1 { <<< 指定实例的名称 state MASTER <<< 指定节点的状态,MASTER表示主,BACKUP表示备用节点 interface eth0 <<< 指定将VIP绑定在哪个网卡上 virtual_router_id 51 <<< 虚拟路由ID,用于标识哪些个节点是一组,同一组的主机的虚拟id需要相同 priority 100 <<< 指定该节点的优先级(主这节点的优先级大于备节点) advert_int 1 <<< 指定备节点在几秒之内没有接收到主节点的心跳信息,就接管其业务和资源 authentication { <<< 指定keepalived集群中各个主备节点做认证的方式 auth_type PASS auth_pass 1111 } virtual_ipaddress { <<< 指定用于提供服务的ip地址(也就是VIP) 10.220.5.233 } } 第三段:virtual_server,虚拟主机配置段 【该段主要是给lvs来用,用来定义后端RS节点】 virtual_server 10.220.5.222 80 { #指定实例对应的VIP delay_loop 6 # 对后端节点做健康检查的时间间隔 lb_algo rr # 指定负载均衡调度算法 lb_kind DR # 指定所使用的lvs模型 nat_mask 255.255.255.0 persistence_timeout 50 # 同一IP的请求50秒内被分配到同一台真实主机 protocol TCP # 用TCP协议对真实节点做健康检查 real_server 10.220.5.190 80 { # 指定一台真实服务器的IP和端口 weight 1 # 设置权重 TCP_CHECK { # 用建立tcp连接的方式做健康检测 connect_timeout 10 # 设置建立tcp连接的超时时间 delay_before_retry 3 # 超时后多久重试 nb_get_retry 3 # 重试次数 connect_port 80 # 健康检查使用的端口号 } } real_server 10.220.5.191 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }