虚拟机搭建LVS-NAT集群

来源:互联网 发布:unity3d minecraft 编辑:程序博客网 时间:2024/06/03 22:17

一. 必备知识

     局域网基础和计算机网络7层模型  http://blog.csdn.net/liaomin416100569/article/details/72976270

         必须掌握NAT 路由器 网关这些概念

      tcp协议相关知识  http://blog.csdn.net/liaomin416100569/article/details/73088297

      虚拟机配置三种虚拟网络的知识 自行百度

二概念解析

  lvs官网 http://www.linuxvirtualserver.org/

  lvs(linux virtual server)提供了三种集群方式 

  分别是:

  • The LVS/NAT working principle and configuration instructions.
  • The LVS/TUN working principle and configuration instructions.
  • The LVS/DR working principle and configuration instructions.
NAT模式简介
   类似于nginx集群  DServer 表示转发服务器 用于控制负载均衡 复杂均衡的存在几种转发算法  dserver必须拥有两个网卡  一个用于公网用户访问Dserver
一个网卡用于连接局域网中其他的Rserver (Real Server)  客户端浏览器访问的公网ip 192.168.88.20 数据包 可能就是 源ip 客户端ip  目标ip Vip 88.20
转发服务器需要定义个路由规则 将发送的数据包 转换为 源ip 客户端ip 目标ip是 后端的Rserver的Rip 才能正常的被后端机器收  后端Rserver返回结果后
DServer需要将源ip修改为公网ip vip 客户端才能接受响应 


三 配置过程
  1.dserver配置
     1.1》配置双网卡  双ip
               1.1.1》安装vmware虚拟机  虚拟机安装cenos7 明白三种虚拟网络的方式
                    。桥接:和window机器的物理网卡进行桥接  桥接后 由物理网卡将当前ip和虚拟机设置的ip 的arp数据分发出去 可以达到让局域网其他主机
                                访问虚拟机ip的能力 
                   。 NAT 利用WMnet8虚拟网卡作为虚拟路由  虚拟机自动获取ip 会设置网关地址为wmnet8的ip 当虚拟机网络网络时 数据包发送到网关 网关wmnet8
                           修改数据包的源ip地址 利用window机器上网后返回数据 给虚拟机
                   。仅主机模式 和NAT一样 虚拟机只能访问主机资源不能联网
               1.1.2》安装nat虚拟网卡
                       虚拟机右键   设置 - 网络适配器  修改为NAT模式
                             
                    在虚拟机上 可以 ifconfig 查看 发现设备名称eno16777736  自动生成了ip  192.168.58.134
              如果没有获取ip  可以通过修改  /etc/sysconfig/network-scripts/ifcfg-eno16777736文件  ONBOOT=yes 表示启动自动获取ip 
              重启网络服务 service network restart
[root@bogon proc]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.58.134  netmask 255.255.255.0  broadcast 192.168.58.255        inet6 fe80::20c:29ff:fe49:296c  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:49:29:6c  txqueuelen 1000  (Ethernet)        RX packets 1890  bytes 703660 (687.1 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1479  bytes 276286 (269.8 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

              1.1.3》安装桥接虚拟网卡
                 虚拟机右键设置 弹出窗口后   添加  选择网络适配器  创建网络适配器2  设置为桥接模式
                 
        将桥接虚拟网卡绑定到window机器物理网卡上 
            虚拟机 菜单 编辑 -虚拟网络编辑器
          
      window物理网卡的ip配置是如下的
      
     当添加好网卡后 在linux上 通过ifconfig 可以看到多了一个网卡
   
[root@bogon proc]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.58.134  netmask 255.255.255.0  broadcast 192.168.58.255        inet6 fe80::20c:29ff:fe49:296c  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:49:29:6c  txqueuelen 1000  (Ethernet)        RX packets 1977  bytes 712212 (695.5 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1536  bytes 286518 (279.8 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.16.21  netmask 255.255.255.0  broadcast 192.168.16.255        inet6 fe80::20c:29ff:fe49:2976  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:49:29:76  txqueuelen 1000  (Ethernet)        RX packets 2157795  bytes 229287748 (218.6 MiB)        RX errors 0  dropped 5331  overruns 0  frame 0        TX packets 537  bytes 1032636 (1008.4 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)        RX packets 33  bytes 3074 (3.0 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 33  bytes 3074 (3.0 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
     可以看到新生成了一个设备eno33554984 ip不是我们想要的 因为上图中 window的ip是192.168.88.20 我这里如果需要这台机器被外部访问 必须
   设置为 88段的ip需要为该网卡配置 静态地址  拷贝一个其他网卡的文件 修改为当前网卡名称
       cd /etc/sysconfig/network-scripts 
       cp ifcfg-eno16777736 ifcfg-eno33554984 
      修改ifcfg-eno33554984 
          将BOOTPROTO从dbcp修改为static表示静态ip
           NAME=eno33554984  改成当前网卡名
          UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f2e  随便修改一个字母 唯一的物理地址
          DEVICE=eno33554984 改为当前网卡名
          IPADDR=192.168.88.21   设置静态ip
          NETMASK=255.255.255.0  设置子网掩码
         GATEWAY=192.168.88.1 设置网关
         DNS1=8.8.8.8   设置dns

其中子网掩码和网关和dns都和window机器一样  以下是正确的配置
TYPE=EthernetBOOTPROTO=staticNAME=eno33554984UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f2eDEVICE=eno33554984ONBOOT=yesIPADDR=192.168.88.21NETMASK=255.255.255.0GATEWAY=192.168.88.1DNS1=8.8.8.8
重启网络 service network restart
[root@bogon network-scripts]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.58.134  netmask 255.255.255.0  broadcast 192.168.58.255        inet6 fe80::20c:29ff:fe49:296c  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:49:29:6c  txqueuelen 1000  (Ethernet)        RX packets 2233  bytes 737958 (720.6 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 1743  bytes 320982 (313.4 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0eno33554984: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500        inet 192.168.88.21  netmask 255.255.255.0  broadcast 192.168.88.255        inet6 fe80::20c:29ff:fe49:2976  prefixlen 64  scopeid 0x20<link>        ether 00:0c:29:49:29:76  txqueuelen 1000  (Ethernet)        RX packets 2316913  bytes 247471207 (236.0 MiB)        RX errors 0  dropped 5815  overruns 0  frame 0        TX packets 537  bytes 1032636 (1008.4 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536        inet 127.0.0.1  netmask 255.0.0.0        inet6 ::1  prefixlen 128  scopeid 0x10<host>        loop  txqueuelen 0  (Local Loopback)        RX packets 33  bytes 3074 (3.0 KiB)        RX errors 0  dropped 0  overruns 0  frame 0        TX packets 33  bytes 3074 (3.0 KiB)        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此时 88.21ip配置成功 随便找一台window机器 ping以下 88.21 成功


     1.1.4配置路由规则
          查看 more /etc/sysctl.conf
            net.ipv4.ip_forward = 1  该参数表示开启路由转发功能  访问88.21数据后 将数据转换后转发给局域网网卡58.134  
          sysctl -p 参数生效
         如果不存在或者为0  修改为1 表示可以在不同网卡间进行路由转发
         ipvs和参数foward功能图解
          
        ipvsadm实际上就是对数据包的过滤 当客户端发送数据请求到 88.20网卡时 ipvs拦截 通过负载均衡调度算法获取到一台Rserver后
       将数据包 修改为 目标ip为 计算后的RServerip   因为开启了 net.ipv4.ip_forward = 1  所以知道目标地址为58 段 自动将数据包forward到
        58.134的网卡  因为Rserver的ip和该网卡处于同一网段所以 通过Dip发送数据包到Rip 

          在同时使用ip 192.168.88.21和192.168.58.134的Dserver上 配置lvs 安装ipvs软件
             yum -y install ipvsadm
            #清空所有的路由规则
             ipvsadm -C
            #添加一个集群  192.168.88.21:80 必须是外网ip 也就是vip 因为别人才可以访问  rr表示轮询
            ipvsadm -A -t 192.168.88.21:80 -s rr
            #给集群添加一个主机 Rserver  192.168.58.135:80和192.168.58.136:80 这两台机各自部署一个tomcat
            ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.135:80 -m
            ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.136:80 -m  

         常用的ipvsadm命令
集群命令 添加  ipvsadm -A -t 192.168.88.21:80 -s rr 修改  ipvsadm -E -t 192.168.88.21:80 -s wrr 删除 ipvsadm -D -t 192.168.88.21:80后台主机管理命令 添加 ipvsadm -a -t 192.168.88.21:80 -r 192.168.58.135:80 -m   (-m表示是nat集群 -g是dr   -w int 设置权重) 修改 ipvsadm -e -t 192.168.88.21:80 -r 192.168.58.135:80 –m -w 3 删除  ipvsadm -d -t 192.168.88.21:80 -r 192.168.58.135:80查看集群    ipvadm -L -n将路由规则保存到文件中  service ipvsadm save
   8种调度算法
1. 轮叫调度 rr这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。2. 加权轮叫 wrr这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。3. 最少链接 lc这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1 4. 加权最少链接 wlc这个算法比 lc 多了一个权重的概念。5. 基于局部性的最少连接调度算法 lblc这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器6. 复杂的基于局部性最少的连接算法 lblcr记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。7. 目标地址散列调度算法 dh该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。8. 源地址散列调度算法 sh与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源


  


  2.rserver配置
     》配置tomcat
       两台ip为 192.168.58.135和 192.168.58.136安装tomcat配置端口为80 启动
     》配置ip 设置网关为DIP
        将135和136的ip都设置为静态ip 并且将网关设置为 转发服务器的dip 也就是 58.134
     58.135和58,.136设置为 对应的ip
TYPE=EthernetBOOTPROTO=staticNAME=eno16777736UUID=1c2310e2-e82e-4ce7-a1aa-60d05aa47f1eDEVICE=eno16777736ONBOOT=yesIPADDR=192.168.58.135NETMASK=255.255.255.0GATEWAY=192.168.58.134~~

在任意88段网络任意网络  http://192.168.88.21/ 正常访问

   

原创粉丝点击