博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用lvs+keepalived实现负载均衡
阅读量:2489 次
发布时间:2019-05-11

本文共 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工作原理

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地址。

实现步骤:

  • 1、四台虚拟机,两台做前端负载(一台主,一台备),两台做后台真实服务器,IP地址分配如下:
    • DR1:192.168.64.21
    • DR2:192.168.64.22
    • RS1:192.168.64.61
    • RS2:192.168.64.62
    • VIP:192.168.64.23
  • 2、虚拟机启动后看是否安装有ipvsadm,keepalived,httpd,否则自行利用yum安装。(ipvsadm是用作规则配置与查看的,keepalived用作检查服务器是否健康,http用作测试)。注意要关闭selinux和防火墙,否则可能出现问题。
  • 3、在DR1上配置/etc/keepalived/keepalived.conf(配置了此文件,不再需要配置ipvsadm)
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            }        }    }
  • 直接将DR1的keepalived的配置文件拷贝至DR2的/etc/keepalived/keepalived.conf,并做以下修改:
    vrrp_instaance的state由MASTER改为BACKUP
    priority 的值由100 改为90
  • 在DR1和DR2上 sysctl –w net.ipv4.ip_forward=1 (cat /proc/sys/net/ipv4/ip_forward 查看确认为1则不需要),RS则不需要
  • 手动在rs端绑定虚拟IP(也可以使用脚本)
    ip addr add 192.168.64.23 dev lo label lo:0
    手动在rs端抑制arp响应
cat >>/etc/sysctl.conf<
sysctl -p
  • 分别在几台虚拟机设置hosts文件,并保持一致。
  • 4、开启服务:
  • 在两台DR上分别开启keepalived,network和httpd服务,(http也可不开),在两台RS上开启httpd,network服务,在客户端开启httpd服务用作测试。
  • 在RS1上执行
echo  "192.168.64.61" >> /var/www/html/index.html
  • 在RS2上执行
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实现了高可用。

  • 6、出现的问题及解决方案:
    如果所有设置没问题却只能在DR1或DR2上看到一个连接的服务器,则注意查看keepalived.conf的TCP_CHECK {},此处应有空格。
    每次对DR上的规则做修改之后一定要重新启动keepalived的服务,可以使用“ipvsadm -C”清除规则

转载地址:http://kzorb.baihongyu.com/

你可能感兴趣的文章
iOS在Xcode6中怎么创建OC category文件
查看>>
5、JavaWeb学习之基础篇—标签(自定义&JSTL)
查看>>
8、JavaWEB学习之基础篇—文件上传&下载
查看>>
reRender属性的使用
查看>>
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>