本文共 4103 字,大约阅读时间需要 13 分钟。
当客户端向服务器请求服务时,前端负载均衡服务器接受请求,此时先是根据lvs的调度算法来决定将请求发送给哪个服务器节点,然后根据自己的工作模式(3种)来决定如何将请求发送给节点服务器,节点服务器又如何将处理结果发送给客户端。
由于lvs/DR模式使用最广,故此处只介绍lvs的DR模式: 客户端向服务器请求服务,此时源IP为CIP,目的IP为VIP,请求到达负载端时,根据lvs的调度算法(10种)决定将请求发送给哪个RS,再根据lvs的DR工作模式(DR模式下,不修改IP地址,不封装IP报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址)将数据帧发送给RS,RS响应完毕之后直接将响应发送给客户端,不需要经过LB。keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。 keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。其中的专业术语 LB: 负载均衡器 DS:Director Server。 指的是前端负载均衡器。 RS:Real Server。 后端真实的工作服务器。 VIP: 向外部直接面向用户请求,作为用户请求的目标的IP地址。 DIP:Director Server IP, 主要用于和内部主机通讯的IP地址。 RIP:Real Server IP, 后端服务器的IP地址。 CIP:Client IP, 客户端的IP地址。
global_defs { router_id LVS_Server 指定标识该机器的route_id}vrrp_instance VI_1 { state MASTER #指定该keepalived节点的初始状态 interface eth0 # 实例绑定的VIP接口,用于发送VRRP包 virtual_router_id 51 # 指定VRRP实例ID priority 100 #指定优先级,优先级高的将成为MASTER # nopreempt #设置为不抢占。默认是抢占的 advert_int 1 authentication { auth_type PASS #指定认证方式 auth_pass password #指定认证所使用的密码。 } virtual_ipaddress { 192.168.64.23 #指定VIP地址 } } virtual_server 192.168.64.23 80 { delay_loop 3 lvs_sched rr #LVS的调度算法 lvs_method #LVS 模式 nat_mask 255.255.255.0 persistence_timeout 50 #在50秒内会被连接到同一台真实服务器 protocol TCP #4层协议 real_server 192.168.64.61 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 #get尝试次数 delay_before_retry 10 #在尝试之前延迟多长时间 } } real_server 192.168.64.23 80 { #注:在真实服务器设置的端口必须与虚拟机设置的端口一致 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 10 } } }
cat >>/etc/sysctl.conf<
sysctl -p
echo "192.168.64.61" >> /var/www/html/index.html
echo "192.168.64.62" >> /var/www/html/index.html
5、测试
在客户端浏览器上输入,不断进行刷新,可以看到交替显示192.168.64.61和192.168.64.62(可能会长时间登录一台服务器,这与keepalived.conf里面persistence_timeout 50 的设置有关,还可能是浏览器缓存的问题。)在DR1上查看“ipvsadm -L -n” ,如果各个服务器都正常则可以看到两个连接成功的服务器,使用”ip a”可以看到虚拟IP192.168.64.23在DR1上,在DR2上查看则不显示虚拟IP,此时,模拟DR1断网,则只能在DR2上看到虚拟IP了,若恢复DR1的网络,则只能在DR1上看到虚拟IP,这样就利用keepalived实现了高可用。
转载地址:http://kzorb.baihongyu.com/