LVS/DR原理实现三种负载均衡

负载均衡LVS基本介绍

负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。
LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。
通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

LVS/DR工作原理

VS/DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 Non­ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为 VIP 的网络请求。
这里写图片描述

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
  3. IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
  4. 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
  5. RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
  6. 响应报文最终送达至客户端

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

LVS/DR模式实现负载均衡

DR:client ->vs(调度server1) ->RS(server2.3) ->client

server1主机(VS:VirtualServer)
调度器配置

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo 
[root@server1 ~]#  yum repolist

这里写图片描述
这里写图片描述

[root@server1 ~]# yum install -y ipvsadm  类似于防火墙
[root@server1 ~]# ip addr add 172.25.68.100/24 dev eth0 #添加IP
[root@server1 ~]# ipvsadm -A -t 172.25.68.100:80 -s rr  #rr调度算法
[root@server1 ~]# ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.2:80 -g    #添加在同一个局域网(g:DR工作模式)
[root@server1 ~]# ipvsadm -a -t 172.25.68.100:80 -r 172.25.68.3:80 -g
[root@server1 ~]# ipvsadm -l

这里写图片描述

server2主机(RS:RealServer)

[root@server2 ~]# yum install -y arptables_jf
[root@server2 ~]# ip addr add 172.25.68.100/24 dev eth0
[root@server2 ~]# arptables -A IN -d 172.25.68.100 -j DROP #添加策略
[root@server2 ~]# arptables -A OUT -s 172.25.68.100 -j mangle --mangle-ip-s 172.25.68.2  #转换
[root@server2 ~]# /etc/init.d/arptables_jf  save  保存策略
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

server3主机(RS:RealServer)

配置虚拟IP(vip)
[root@server3 ~]# yum install -y arptables_jf
[root@server3 ~]# ip addr add 172.25.68.100/24 dev eth0
[root@server3 ~]# arptables -A IN -d 172.25.68.100 -j DROP
[root@server3 ~]# arptables -A OUT -s 172.25.68.100 -j mangle --mangle-ip-s 172.25.68.3
[root@server3 ~]# /etc/init.d/arptables_jf  save
Saving current rules to /etc/sysconfig/arptables:          [  OK  ]

物理主机
1、访问 172.25.68.100 实现负载均衡
这里写图片描述
2、查看172.25.68.100 的mac地址 (与server1相同
这里写图片描述
这里写图片描述


LVS健康检查

server1主机(VS:VirtualServer)

[root@server1 ~]# yum install -y ldirectord-3.9.5-3.1.x86_64.rpm 
[root@server1 ~]# rpm -ql ldirectord  #查找配置文件
[root@server1 ~]# cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d
[root@server1 ~]# cd /etc/ha.d
[root@server1 ha.d]# ls
ldirectord.cf  resource.d  shellfuncs
[root@server1 ha.d]# vim ldirectord.cf 

这里写图片描述

[root@server1 ha.d]# ipvsadm -C     删除策略
[root@server1 ha.d]# ipvsadm -l     查看策略
[root@server1 ha.d]# cd /var/www/html
[root@server1 html]# ls
[root@server1 html]# rm -fr *
[root@server1 html]# ls
[root@server1 html]# vim index.html
    Server1 - 此站点正在维修

这里写图片描述
这里写图片描述

[root@server1 html]# /etc/init.d/varnish stop  #关闭varnish
[root@server1 html]# vim /etc/httpd/conf/httpd.conf
  更改端口  Linsten:80
[root@server1 html]# /etc/init.d/httpd restart  #重启httpd

此时将server2和server3的httpd服务关闭
这里写图片描述
物理主机访问 172.25.68.100
这里写图片描述
注意:只要有一个站点存活服务器就访问不到server1


LVS+keepalived实现负载均衡

keepalived同样可以对lvs后端主机实现健康检查,同样也可以实现调度器高可用,架设多个keepalived可以实现高可用。
应该注意的是ldirectord和keepalived只能开启一个,开启两个会冲突。

[root@server1 html]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server1 html]# chkconfig ldirectord off
[root@server1 html]# cd 
[root@server1 ~]# tar zxf keepalived-2.0.6.tar.gz 
[root@server1 ~]# cd keepalived-2.0.6
[root@server1 keepalived-2.0.6]# yum install -y openssl-devel
[root@server1 keepalived-2.0.6]# ./configure --prefix=/usr/local/keepalived --with-init=SYSV
[root@server1 keepalived-2.0.6]# make   #编译
[root@server1 keepalived-2.0.6]# make install
[root@server1 keepalived-2.0.6]# cd
[root@server1 ~]# ls
[root@server1 ~]# cd /usr/local
[root@server1 local]# ls
[root@server1 local]# cd keepalived/
[root@server1 keepalived]# ls
[root@server1 keepalived]# pwd
[root@server1 keepalived]# cd etc
[root@server1 etc]# ls
[root@server1 etc]# cd rc.d/
[root@server1 rc.d]# ls
[root@server1 rc.d]# cd init.d/
[root@server1 init.d]# ls
[root@server1 init.d]# chmod +x keepalived 
[root@server1 init.d]# ls
[root@server1 init.d]# pwd
/usr/local/keepalived/etc/rc.d/init.d
[root@server1 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d
[root@server1 init.d]# cd ..
[root@server1 rc.d]# ls
[root@server1 rc.d]# cd ..
[root@server1 etc]# ls
[root@server1 etc]# cd keepalived/
[root@server1 keepalived]# ls
[root@server1 keepalived]# ln -s /usr/local/keepalived/etc/keepalived/ /etc
[root@server1 keepalived]# ls
[root@server1 keepalived]# cd ..
[root@server1 etc]# ls
keepalived  rc.d  sysconfig
[root@server1 etc]# cd sysconfig/
[root@server1 sysconfig]# ls
[root@server1 sysconfig]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived   /etc/sysconfig/
[root@server1 sysconfig]# cd ..
[root@server1 etc]# cd ..
[root@server1 keepalived]# ls
[root@server1 keepalived]# cd sbin/
[root@server1 sbin]# ls
[root@server1 sbin]# ln -s /usr/local/keepalived/sbin/keepalived  /sbin/
[root@server1 sbin]# which keepalived 
[root@server1 sbin]# /etc/init.d/keepalived start  
#可以开启keepalived说明软链接没有错误
[root@server1 sbin]# /etc/init.d/keepalived stop
[root@server1 sbin]# cd
[root@server1 ~]# cd /usr/local
[root@server1 local]# scp -r keepalived/ root@172.25.68.4:/usr/local

这里写图片描述
这里写图片描述
这里写图片描述

建立一个server4主机:

[root@server4 ~]# cd /usr/local
[root@server4 local]# ls
[root@server4 local]# cd keepalived/
[root@server4 keepalived]# ls
[root@server4 keepalived]# cd etc/
[root@server4 etc]# ls
[root@server4 etc]# cd rc.d/
[root@server4 rc.d]# cd init.d/
[root@server4 init.d]# ls
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/keepalived/ /etc
[root@server4 init.d]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived   /etc/sysconfig/
[root@server4 init.d]# ln -s /usr/local/keepalived/sbin/keepalived  /sbin/
[root@server4 init.d]# /etc/init.d/keepalived start
[root@server4 init.d]#  /etc/init.d/keepalived stop

这里写图片描述

高可用集群负载均衡

server1主机:

[root@server1 local]# cd keepalived/
[root@server1 keepalived]# ls
[root@server1 keepalived]# cd etc
[root@server1 etc]# ls
[root@server1 etc]# cd keepalived/
[root@server1 keepalived]# ls

这里写图片描述

[root@server1 keepalived]# vim keepalived.conf 

这里写图片描述
这里写图片描述

[root@server1 keepalived]# /etc/init.d/keepalived start
[root@server1 keepalived]# scp keepalived.conf root@172.25.68.4:/etc/keepalived/

在server4主机:

[root@server4 keepalived]# vim keepalived.conf 
[root@server4 keepalived]# /etc/init.d/keepalived start

这里写图片描述
在server1和server4主机上下载mailx方便查看实验

在server1关闭服务破坏内核使其不能工作:

[root@server1 keepalived]# /etc/init.d/keepalived stop
Stopping keepalived:                                       [  OK  ]
[root@server1 keepalived]# echo c >/proc/sysrq-trigger 

这里写图片描述
开启server2和server3的httpd服务,物理机上测试:
这里写图片描述
查看server4的IP:
这里写图片描述
**总结:**server1主机上的keepalived坏掉了,可以由server4的备份keepalived接管负载均衡调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值