设为首页 收藏本站
查看: 1051|回复: 0

[经验分享] LVS(Linux Virtual Server)Linux 虚拟服务器介绍及配置

[复制链接]

尚未签到

发表于 2019-1-5 10:11:03 | 显示全部楼层 |阅读模式
  LVS(Linux Virtual Server)Linux 虚拟服务器介绍及配置
  一,简介
  LVS(Linux Virtual Server) 是Unix-like系统中的一个虚拟服务器,是国内贡献给开源组织的一个最优秀的项目之一。LVS在Unix-like系统中
  是作为一个前端(Director)存在的,又称为调度器,它本身不提供任何的服务,只是将通过互联网进来的请求接受后再转发给后台运行的真正的
  服务器(RealServer)进行处理,然后响应给客户端。
  LVS有两个重要的组件:一个是IPVS,一个是IPVSADM。ipvs是LVS的核心组件,它本身只是一个框架,类似于iptables,工作于内核空间中。
  ipvsadm 是用来定义LVS的转发规则的,工作于用户空间中。
  LVS有三种转发类型:
  1.LVS-NAT模型,称为网络地址转换,实现起来比较简单。
  2.LVS-DR模型,称为直接路由模型,应用比较广泛。
  3.LVS-TUN模型,称为隧道模型。
  二、LVS的三种模型的工作属性:
  1.LVS-NAT模型的工作属性或特:
  (1).所有的RealServer集群节点和前端调度器Director都要在同一个子网中
  (2).通常情况下RealServer的IP地址(以下简成RIP)为私有地址,便于RealServer集群节点之间进行通信
  (3).通常情况下前端的Director有两个IP地址,一个为VIP,是虚拟的IP地址,客户端向此IP地址发起请求。
  一个是DIP,是真正的Director的IP地址,RIP的网关要指向Director的DIP。
  (4).这种模型可以实现端口映射
  (5).RealServer的操作系统可以是任意操作系统
  (6).前端的Director既要处理客户端发起的请求,又要处理后台RealServer的响应信息,将RealServer响应的信息再转发给客户端
  (7).前端Director很容易成为整个集群系统性能的瓶颈。
  2.LVS-DR模型的工作属性或特征:此种模型通过MAC地址转发工作,如何转发后面将会介绍。
  (1).所有的RealServer集群节点和前端调度器Director都要在同一个物理网络中
  (2).RIP可以使用公网的IP
  (3).RIP的网关不能指向DIP
  (4).前端的Director只处理客户端的请求,然后将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Director
  (5).此种模型不支持端口映射
  (6).RealServer可以使用大多数的操作系统
  (7).此种模型的性能要优于LVS-NAT
  3.LVS-TUN模型的基本工作属性或特征
  (1).RealServer服务器与前端的Director可以在不同的网络中
  (2).RIP一定不能是私有IP
  (3).前端的Director只处理客户端的请求,然后将请求转发给RealServer,由后台的RealServer直接响应客户端,不再经过Director
  (4).此种模型也不支持端口映射
  (5).RealServer只能使用哪些支持IP隧道的操作系统
  三。LVS Scheduling Method LVS的调度方法:
  1.Fixed Scheduling Method  静态调服方法
  (1).RR     轮询
  (2).WRR    加权轮询
  (3).DH     目标地址hash
  (4).SH     源地址hash
  2.Dynamic Scheduling Method 动态调服方法
  (1).LC     最少连接
  (2).WLC    加权最少连接
  (3).SED    最少期望延迟
  (4).NQ     从不排队调度方法
  (5).LBLC   基于本地的最少连接
  (6).LBLCR  带复制的基于本地的最少连接
  四、ipvsadm组件定义规则的格式:
  1.定义集群服务格式:
  (1).添加集群服务:
  ipvsadm -A|E -t|u|f service-address [-s scheduler]
  [-p [timeout]] [-M netmask]
  -A:                  表示添加一个新的集群服务
  -E:                  编辑一个集群服务
  -t:                  表示tcp协议
  -u:                  表示udp协议
  -f:                  表示firewall-Mark,防火墙标记
  service-address:     集群服务的IP地址,即VIP
  -s                    指定调度算法
  -p                    持久连接时长,如#ipvsadm -Lcn ,查看持久连接状态
  -M                    定义掩码
  ipvsadm -D -t|u|f service-address      删除一个集群服务
  ipvsadm -C                             清空所有的规则
  ipvsadm -R                             重新载入规则
  ipvsadm -S [-n]                        保存规则
  2.向集群服务添加RealServer规则:
  (1).添加RealServer规则
  ipvsadm -a|e -t|u|f service-address -r server-address
  [-g|i|m] [-w weight]
  -a                 添加一个新的realserver规则
  -e                 编辑realserver规则
  -t                 tcp协议
  -u                 udp协议
  -f                 firewall-Mark,防火墙标记
  service-address    realserver的IP地址
  -g                 表示定义为LVS-DR模型
  -i                 表示定义为LVS-TUN模型
  -m                 表示定义为LVS-NAT模型
  -w                 定义权重,后面跟具体的权值
  ipvsadm -d -t|u|f service-address -r server-address          --删除一个realserver
  ipvsadm -L|l [options]                                       --查看定义的规则
  如:#ipvsadm -L -n
  ipvsadm -Z [-t|u|f service-address]                          --清空计数器
  五、LVS-NAT模型实例
  1。先配置好网络环境,要三个虚拟机(本次实验在虚拟机上完成),一台用作Director,其他两台分别为RealServer1 和RealServer2
  其中Director要两个网卡,Eth0网卡为桥接(Birdged),Eth1网卡为仅主机(Host-only),RealServer1 和RealServer2的网卡也都是仅主机
  类型的。
  2.为了演示效果,将Director的两块网卡配置成不在同一个网段的IP地址,RealServer1 和RealServer2的IP地址为同一网段,规划如下图:

  要注意的是:要将本地物理机的Vmnet1的IP地址配置成和Director的Eth1网卡的IP地址在同一个网段中,同时将RealServer1和RealServer2的网关指向Director主机的Eth1网卡的地址,如下图所示:

  3.配置好网络环境之后就开始配置ipvsadm,确保在物理机上能ping通Eth0的IP地址,如下图所示:

  能Ping通,说明物理主机已经可以和Director虚拟主机通信了。
  4.在Director虚拟主机上配置:
  #echo 1 > /proc/sys/net/ipv4/ip_forward     --开启IP转发功能
  #rpm -qa ipvsadm        --查看ipvsadm是否安装,如果没有安装则安装之,直接使用yum安装即可
  #yum install ipvsadm -y
  定义LVS-NAT模型规则
  此处使用的是web服务器进行的演示,在192.168.24.44和192.168.24.45上都提供了nginx服务,其中
  192.168.24.44提供的网页信息为“welcome realserver 1”,192.168.24.45提供的网页信息为“welcome realserver 2”
  #ipvsadm -A -t 172.16.100.24:80 -s rr
  #ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.44 -m
  #ipvsadm -a -t 172.16.100.24:80 -r 192.168.24.45 -m
  #ipvsadm -L -n --查看定义的规则
  这些规则都是临时规则,不会永久生效的,要想永久生效可以保存规则,命令如下:
  #service ipvsadm save
  5.在Internet Explorer浏览器中访问172.16.100.24,会显示如下图所示信息:

  而在google浏览器中访问172.16.100.24,会显示如下图所示信息:

  如果刷新页面或者使用不同的浏览器,会轮流显示页面,这就是最简单的服务器负载均衡啦!
  六、LVS-DR模型的实现过程:
  1.首先规划集群和网路环境,需要三台虚拟机,如下图所示:
  此时Director可以只有一个网卡Eth0,连接类型为桥接(Birdged),RealServer1和RealServer2 的网卡连接类型也都为桥接(Birdged):

  2.配置集群服务
  (1).在Director服务器上配置:
  #ifconfig eth0:1 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
  #route add -host 172.16.100.100 dev eth0:1
  #echo 1 > /proc/sys/net/ipv4/ip_forward   --开启IP转发功能
  (2).在realserve1服务器上进行配置:
  # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  #ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
  #route add -host 172.16.100.100 dev lo:0 //添加路由
  表示使用这个网卡进栈的数据再次使用此网卡的地址出栈
  (3).在realserver2 服务器上进行配置
  # echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
  # echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
  # echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  # echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  #ifconfig lo:0 172.16.100.100 broadcast 172.16.100.100 netmask 255.255.255.255 up
  #route add -host 172.16.100.100 dev lo:0
  (4).再在Director上配置ipvsadm规则:
  #ipvsadm -A -t 172.16.100.100:80 -s rr
  #ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.34 -g
  #ipvsadm -a -t 172.16.100.100:80 -r 172.16.24.44 -g
  (5).在浏览器中进行验证:
  进行第一次访问,如下图所示:

  进行第二次访问,如下图所示:

  3.基于ssl的访问
  [root@mail ~]# ipvsadm -A -t 172.16.100.100:443 -s rr
  [root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.2 -g
  [root@mail ~]# ipvsadm -a -t 172.16.100.100:443 -r 172.16.24.3 -g
  二、LVS Persistence ,lvs的持久连接性
  持久连接类型:
  (1).Persistent Client Connections(PCC),持久客户端连接:就是不管客户端发起什么样的服
  务(如80端口的web服务,3306端口的mysql服务)请求,都将经过Director被定位到同一个特定的real server上,
  只要此real server 提供了这种服务,并且会持续连接,如果客户端连接超时,real server允许一定范围内的
  持久连接时长,默认持久连接时长为300m
  #ipvsadm -C  //清空之前定义的集群服务
  #ipvsadm -A -t 172.16.100.100:0 -s rr -p 1200  //持久连接1200s
  #ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.34 -g
  #ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.44 -g
  如果需要定义权重也可以添加权重,如:
  #ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.34 -g -w 10
  #ipvsadm -a -t 172.16.100.100:0 -r 172.16.100.44 -g -w 5
  验证效果如下图:

  

  (2).Persistent Port Connections(PPC),持续端口连接:就是不管客户端发起什么样的端口请求(如80端口,是提供web服务的,23端口,是提供telnet服务的....),
  都会经过Director将请求转发到同一个real server上,并持续连接。假如一个客户端请求的是web服务,相应的是realserver1 ,当此用户退出后再次发起请求web服务的时候,依然是realserver1 提供的web服务。
  

  配置持续端口连接只需把某端口定义为集群服务即可,以端口80和23为例
  #ipvsadm -A -t 172.16.100.100:80 -s rr -p 1200
  #ipvsadm -a -t 172.16.100.100:80 -r 172.16.100.34 -g
  #ipvsadm -a -t 172.16.100.100:80 -r 172.16.100.44 -g
  #ipvsadm -A -t 172.16.100.100:23 -s rr -p 1200
  #ipvsadm -a -t 172.16.100.100:23 -r 172.16.100.34 -g
  #ipvsadm -a -t 172.16.100.100:23 -r 172.16.100.44 -g

  在此处定义了两个端口服务:

  

  

  

  

  

  

  

  (3)把80端口和443 端口做成一个持久防火墙标记,同时定向到同一个realserver上,即在访问80服务的时候是realserver1,然后改为访问443服务的时候依然定向到realserver1上
  

  在Director服务器上操作:
  #ipvsadm  -C

  #iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 80 -j MARK --set-mark 20
  #iptables -t mangle -A PREROUTING -i eth0 -p tcp -d 172.16.100.100 --dport 443 -j MARK --set-mark 20
  

  # iptables -t mangle -L -n
  Chain PREROUTING (policy ACCEPT)
  target     prot opt source               destination
  MARK       tcp  --  0.0.0.0/0            172.16.100.100      tcp dpt:80 MARK set 0x14
  MARK       tcp  --  0.0.0.0/0            172.16.100.100      tcp dpt:443 MARK set 0x14
  基于防火墙标记来定义集群服务,也称为端口的姻亲关系。
  ipvsadm:
  #ipvsadm -A -f 20 -s wlc -p 1200
  #ipvsadm -a -f 20 -r 172.16.24.2 -g -w 3
  #ipvsadm -a -f 20 -r 172.16.24.3 -g -w 2
  #ipvsadm -Ln
  

  IP Virtual Server version 1.2.1 (size=4096)
  Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  FWM  20 wlc persistent 1200
  -> 172.16.24.3:0                Route   2      0          0
  -> 172.16.24.2:0                Route   3      0          0
  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-659559-1-1.html 上篇帖子: 通过Corosync实现Mysql高可用,以及LVS+ldirectord高可用并状态检测 下篇帖子: LVS三种模式及常见的四种调度算法详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表