欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)

程序员文章站 2022-06-13 10:28:09
...

Load Balancer

负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换NAT(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。

LVS组成:

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。
1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是
集群服务,而谁是后端真实的服务器(Real Server)

LVS相关术语:

  1. DS:Director Server。指的是前端负载均衡器节点。
  2. RS:Real Server。后端真实的工作服务器。
  3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
  5. RIP:Real Server IP,后端服务器的IP地址。
  6. CIP:Client IP,访问客户端的IP地址。

Virtual Server via Direct Routing

跟VS/TUN方法一样,VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。这可以极大地提高LVS集群系统的伸缩性。
跟VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上。
LVS-DR模式采的IP地址全部为外网IP。
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
实验操作:
配置多个yum源:

vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.30.250/rhel6.5
enabled=1
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.30.250/rhel6.5/HighAvailability
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.30.250/rhel6.5/LoadBalancer
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.30.250/rhel6.5/ResilientStorage
gpgcheck=0
yum repolist

DR:client -> VS -> RS -> client
Load Balancer:

  1  ip addr add 172.25.30.100/24 dev eth0#添加虚拟的IP到eth0网卡
  2  yum install ipvsadm -y
  3  ipvsadm -A -t 172.25.30.100:80 -s rr添加虚拟主机,-A添加虚拟服务,rr调度算法,rr伦叫
  4  ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.3:80 -g
  #添加到同一个局域网,-g直连模式,在同一个局域网,-t表示tcp协议,-a端口不可改变
  5  ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.2:80 -g

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)

在客户端发送请求:
调度站会收到请求并响应把请求扔给后台web服务器
ipvsadm -nL #查看受到并响应客户端请求次数有解析
ipvsadm -L #查看受到并响应客户端请求次数无解析
由于三个IP均是100在同一个局域网(vlan)会有偶然性:并不知道server1会不会被一直当作调度器来使用:通过添加访问server2和server3时服务被拒绝的策略来解决偶然性:
在server2安装服务添加策略:
REAL SERVER:
后台web服务器需要安装arptables并设置VIP用户才能完成客户端请求,从http获得数据这里用到了三次握手要达到均衡负载必须有多台服务器,才能从多台web服务器上面均衡调度数据.所以两台服务器上面部署相同

ARP (地址解析协议)

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。
两个web在arp中接收virtual-IP规则相同:

  1  /etc/init.d/httpd start
  2  ip addr add 172.25.30.100/24 dev eth0
  3  ip addr
  4  yum install arptables_jf -y
  5  arptables -A IN -d 172.25.30.100 -j DROP #在V-ip进入时执行DROP动作当访问时候直接丢弃
  6  arptables -A OUT -s 172.25.30.100 -j mangle --mangle-ip-s 172.25.30.2 #V-ip出去时执行mangle
  8  /etc/init.d/arptables_jf save
  9  arptables -L

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)

客户端测试:
arp -d 172.25.30.100 #删除arp中缓存
arp -an |grep 100
crul 172.25.30.100

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
DR中没有安装ld检测后台服务器时,当后台服务器坏掉时,他是不会检测出来的,这样当客户端访问时,他还是会把客户端要求轮循扔给后台服务器,此时挂掉的服务器接收到请求就会反馈给客户端一个无服务的信息。如下图:
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
此时,我们需要在前期对后台服务器进行检测,当后台服务器坏掉时,负载均衡端不会把请求扔给坏掉的服务器,这样客户就会得到准确信息。
ld检测后台web服务器并更新调度站信息.一旦有服务器坏掉调度站不会把客户端要求扔给坏掉的服务,客户端也不会得到错误的信息

   1 yum install ldirectord-3.9.5-3.1.x86_64.rpm 
   2 rpm -ql ldirectord
   3 cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
   4 cd /etc/ha.d/
   5 ls
   6 vim ldirectord.cf 
virtual=172.25.30.100:80 #虚拟ip
        real=172.25.30.2 gate #real server
        real=172.25.30.3 gate
        fallback=127.0.0.1:80 gate #lvs调度站
        service=http #服务器
        scheduler=rr #round-robin
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
        #receive="Test Page"
        #virtualhost=www.x.y.z
    7 ipvsadm -C #清除lvs设置规则
    8 ipvsadm -ln
    9 /etc/init.d/ldirectord start
   10 vim /etc/httpd/conf/httpd.conf #ld不支持端口转发,所以将先前实验的更改端口改回来端口改回80
   11 cd /var/www/html
   12 vim index.html
172.25.30.100 网站正在维护中
   13 /etc/init.d/httpd reload     

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
当有一个服务器挂掉时:
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
当两个服务器挂掉时:
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
上述情况是后台服务器坏掉,那大家有没有考虑过如果负载均衡端坏掉了怎么办?我们是不是应该有一个负载均衡的备份,当主负载均衡坏掉了,还有备份的顶替他的工作。

   1  tar  zxf keepalived-2.0.6.tar.gz
   2  ls
   3  yum install keepalived-2.0.6 libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
   4  cd keepalived-2.0.6
   5  ls
   6  yum install gcc
   7  yum search OpenSSL
   8  yum install openssl-devel.x86_64 -y
   9  ./configure --prefix=/usr/local/keepalived --with-init=SYSV
  10  make
  11  make install
  12  cd /usr/local/keepalived/etc/rc.d/init.d/
  13  ls
  14  chmod +x keepalived
  15  ls

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)

#建立软链接即快捷方式
  16  ln -s  /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d
  17  ln -s /usr/local/keepalived/etc/keepalived/ /etc/
  18  ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  19  ln -s /usr/local/keepalived/sbin/keepalived /sbin/
  20  which keepalived
  21  /etc/init.d/keepalived start
  22  cd /usr/local
  23  ls
  24  scp -r keepalived/ server4:/usr/local/

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
备用server4 和主负载端keep安装操作相同
keepalived配置:
MASTER:
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
BACKUP:备用keepalived修改权重和地位
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)

   16  ipvsadm -C
   17  ipvsadm -L
   18  /etc/init.d/keepalived restart
   19  ipvsadm -L
   20  ip addr

基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
当均衡负载端坏掉时,我们可以看到备用占据了他的位置顶替他的工作:
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)
基于lvs均衡负载:DR模式-- ldirectord(健康检测)--keepalived(高可用集群)