LVS学习笔记1

2018-08-12  本文已影响0人  Net夜风

Linux Cluster:

Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统;

Linux Cluster类型:
分布式系统:
系统扩展方式:

lvs:Linux Virtual Server

ipvs scheduler:调度算法(调度方法);

根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种:

  1. 静态方法:仅根据算法本身进行调度
  1. 动态方法:主要根据每RS当前的负载状态及调度算法进行调度;Overhead(负载值)、activeconns(活动连接数)、inactiveconns(非活动连接数)

lvs四种集群:nat、dr、tun、fullnat

1. lvs-nat:

多目标的DNAT,通过将请求报文的目标地址和目标端口修改为某挑选出的RS的ip、port实现转发。
<1>. RIP和DIP必须在同一个ip网络,且应该使用私网地址;RS的网关要指向DIP
<2>. 请求报文和响应报文都必须经由Director转发;Director易于称为系统瓶颈;
<3>. 支持端口映射,可以修改请求报文的目标PORT
<4>. VS必须是Linux系统,RS可以是任意系统

2. lvs-dr:

Direct Routing,直接路由;
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
Director和各RS都得配置使用VIP;
<1> 确保前段路由器将目标ip为VIP的请求报文发往Director,有以下三种方式:

<2> RS的RIP可以使用私网地址,也可以使用公网地址;RIP和DIP在同一个ip网络;RIP的网关不能只想DIP,以确保响应报文不会经由Director;
<3> RS跟Director要在同一个物理网络;
<4> 请求报文要经由Director,但响应报文不能经由Director,而是由RS直接发往Client;
<5> 不支持端口映射

3. lvs-tun:

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP);
<1> DIP VIP RIP 都应该是公网地址;
<2> RS的网关不能,也不可能指向DIP;
<3> 请求报文要经由Director,但响应不能经由Director;
<4> 不支持端口映射
<5> RS的OS得支持隧道功能;

4. lvs-fullnat:

通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP< - - > DIP
VIP< - - > RIP
<1> VIP是公网地址,RIP和DIP是私网地址,且通常不在同一个IP网络;因此,RIP的网关一般不会指向DIP
<2> RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但是Director还要将其发往Client;
<3> 请求和响应报文都经由Director;
<4> 支持端口映射;

总结:

lvs-nat工作原理及配置实现

工作原理:

假如RS1,RS2都挂了,可以把director当做一个服务,把RS1,RS2权重改为0

    [root@www ~]# yum istall nginx -y
    [root@www ~]# cd /usr/share/nginx/html/
    [root@www html]# vim test1.html              
        <h1>SORRY</h1>
    [root@www html]# systemctl start nginx

    [root@www html]# ipvsadm -a -t 192.168.1.108:80 -r 127.0.0.1 -g
    [root@www html]# ipvsadm -e -t 192.168.1.108:80 -r 192.168.18.11 -m -w 0
    [root@www html]# ipvsadm -e -t 192.168.1.108:80 -r 192.168.18.12 -m -w 0
#使用主机测试
    [root@localhost ~]# for i in {1..5}; do curl http://192.168.1.108/test1.html;done
    <h1>SORRY</h1>
    <h1>SORRY</h1>
    <h1>SORRY</h1>
    <h1>SORRY</h1>
    <h1>SORRY</h1>

...

[root@www html]# ipvsadm -ln --stats  #统计信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.1.108:80                  253     1351      652    90948    78005
  -> 127.0.0.1:80                       63      373        0    24983        0
  -> 192.168.18.11:80                  108      545      368    36789    43865
  -> 192.168.18.12:80                   82      433      284    29176    34140
[root@www html]# ipvsadm -ln --rate   #统计速率
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS
  -> RemoteAddress:Port
TCP  192.168.1.108:80                    0        0        0        0        0
  -> 127.0.0.1:80                        0        0        0        0        0
  -> 192.168.18.11:80                    0        0        0        0        0
  -> 192.168.18.12:80                    0        0        0        0        0

lvs-dr工作原理及配置实现

工作原理:

实验配置:
按上图网络拓补图配置试验机,Director和RS全部一块网卡,并桥接,设置DIP:192.168.43.245,RIP:192.168.43.11和192.168.43.12
把VIP地址192.168.43.99设置在DIP网卡别名上,RS的lo网卡别名上

#通过脚本修改内核参数以现在RS的ARP通告和应答级别
[root@rs1 ~]# vim setparam.sh 
    #!/bin/bash
    #
    case $1 in
    start)
            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
            ;;
    stop)
            echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
            echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
            ;;
    *)
            echo "Usage $(basename $0) start|stop"
            exit 1
            ;;
    esac
    #分别在RS1和RS2上运行此脚本
    [root@rs1 ~]# bash -x setparam.sh start
    [root@rs2 ~]# bash -x setparam.sh start
    #在RS1和RS2上配置VIP
    [root@rs1 ~]# ifconfig lo:0 192.168.43.99 netmask 255.255.255.255 broadcast 192.168.43.99 up
    [root@rs2 ~]# ifconfig lo:0 192.168.43.99 netmask 255.255.255.255 broadcast 192.168.43.99 up
    #添加路由条目由哪个设备进来就由哪个设备出去
    [root@rs1 ~]# route add -host 192.168.43.99 dev lo:0
    [root@rs2 ~]# route add -host 192.168.43.99 dev lo:0
    #配置Director的VIP
    [root@www ~]# ifconfig ens33:0 192.168.43.99 netmask 255.255.255.255 broadcast 192.168.43.99 up

    #在Director上安装ipvs并定义集群
    [root@www ~]# ipvsadm -A -t 192.168.43.99:80 -s rr
    [root@www ~]# ipvsadm -a -t 192.168.43.99:80 -r 192.168.43.11 -g
    [root@www ~]# ipvsadm -a -t 192.168.43.99:80 -r 192.168.43.12 -g
    [root@www ~]# ipvsadm -ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.43.99:80 rr
      -> 192.168.43.11:80             Route   1      0          9         
      -> 192.168.43.12:80             Route   1      0          8  

ipvsadm命令

-管理集群服务:增、改、删;
增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
删:ipvsadm -D -t|u|f service-address

    service-address:
            t|u|f:
                -t: TCP协议的端口,VIP:TCP_PORT
                -u: UDP协议的端口,VIP:UDP_PORT
                -f:firewall MARK,是一个数字;
    [-s scheduler]:指定集群的调度算法,默认为wlc;
    管理集群上的RS:增、改、删;
            增、改:
                ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
            删:
                ipvsadm -d -t|u|f service-address -r server-address
    server-address:
                rip[:port]
        选项:
            lvs类型:
                -g: gateway, dr类型
                -i: ipip, tun类型
                -m: masquerade, nat类型
                        
                -w weight:权重;
            
    清空定义的所有内容:
                ipvsadm -C
            
    查看:
                ipvsadm -L|l [options]
                    --numeric, -n:numeric output of addresses and ports 
                    --exact:expand numbers (display exact values)
                    
                    --connection, -c:output of current IPVS connections
                    --stats:output of statistics information
                    --rate :output of rate information
                
    保存和重载:
                ipvsadm -S = ipvsadm-save
                ipvsadm -R = ipvsadm-restore 
负载均衡集群设计时要注意的问题:

(1) 是否需要会话保持;
(2) 是否需要共享存储;

上一篇 下一篇

猜你喜欢

热点阅读