LVS小记

19.LVS小记
    LVS的类型:
        nat:是一种基于IP的DNAT的,通过目标端口与目标地址利用特定的算法选取出响就的主机进行响应,通过RS(Real Server)的地址和端口进行转发
            特点:
                RIP与DIP必需在同一个网段中,RIP应该使用私网地址且RS的网关需要指向DIP(VS的一个IP)
                请求报文与响应报文都需要经过Director进行转发,Director易于成为并发性瓶颈
                支持端口映射,可修改请求报文的目标端口
                VS必须是Linux系统,而RS可以是任意系统
        DR:是一种基于直链路由进行响应转发,访问VIP(VS的虚拟IP),修改包的源地址,响应时不再经过VS
            特点:
                Director与所有的RS都需要配置VIP
                确保前端路由将目标IP为VIP的请求报文发往Director上
                    在前端网关做静态绑定
                    在RS上使用arptables
                    在RS上修改内核参数,以限制arp通告及应答级别
                        /proc/sys/net/ipv4/conf/all/arp_ignore 的值修改为1
                        /proc/sys/net/ipv4/conf/all/arp_announce 的值修改为2
                        把lo网卡的以上值也修改
                RS的RIP可以是公网IP,也可以使用公网IP;RIP与DIP在同一个网段中,RS的网关不可以指向DIP,以确保报文不会流经Director
                请求报文经由Director,而响应报文不经过Director而是直接响应客户端
                不支持端口映射
        tun:隧道模式,在请求IP的报文外面再次封装一个IP首部,通过这个IP访问选定的RS,RS响应的时候不再经过VS直接响应VS
            特点:
                DIP,VIP,RIP都是公网地址(RIP与DIP和VIP八杆子打不着,更别说在同一个网段了)
                请求经由Director,但是响应不经过Director,而是直接响应客户端
                不支持商品映射
                RS的OS需要支持隧道功能;
        fullnat:通过修改源地址的源IP与目标IP地址进行转发
            特点:
                VIP是公网地址,RIP与DIP是私网地址,且通常不在同一IP网络;RIP的网关一般不会指向DIP
                RS收到的请求的报文,源地址是会转化为DIP目标地址转化为RIP
                请求与响应都经过Director
                支持端口映射
    十大算法:
        静态算法:
            RR:轮询
            WRR:加权轮询
            SH:Srouce Hashing,将来自同一个IP的请求始终发往第一次挑中的RS,从而实现会话绑定
            DH:Destination Hashing,将发往同一个目标地址的请求始终发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡
        动态算法:
            LC:last connection
                Overhead=activeconns256+inactiveconns
            WLC:Weighted LC
                Overhead=(activeconns
256+inactiveconns)/weight
            SED:Shortest Expection Delay
                Overhead=(activeconns+1)*256/weight
            NQ:Never Queue
            LBLC:Localirty-Based LC,动态DH算法
            LBLCR:LBLC with Replication,带复制功能的LBLC;
    
    实现LVS_nat
        VS上的脚本
            #!/bin/bash
            echo 1 > /proc/sys/net/ipv4/ip_forward
            network_device=”enp0s3″
            DIP=”192.168.56.103″
            DIP_R=”172.18.250.96″
            PROT=80
            type=rr
            RS1=”192.168.56.101″
            RS2=”192.168.56.102″
            yum -y install ipvsadm >& /dev/null
            ifconfig ${network_device}:0 $DIP netmask 255.255.255.255 broadcast $DIP up
            ipvsadm -A -t ${DIP_R}:${PROT} -s $type
            ipvsadm -a -t ${DIP_R}:${PROT} -r ${RS1} -m  -w 1
            ipvsadm -a -t ${DIP_R}:${PROT} -r ${RS2} -m  -w 1
        RS上的脚本
            #!/bin/bash
            DIP=”192.168.56.101″
            RIP=”192.168.56.102″
            route add -host $RIP gw $DIP
    实现LVS_DR
        VS脚本:
            #!/bin/bash
            VIP=”172.18.35.202″
            PROT=80
            DEVICE=”enp0s3″
            type=wrr
            RS1=”172.18.250.37″
            RS2=”172.18.250.38″
            ifconfig ${DEVICE}:0 $VIP netmask 255.255.255.255 broadcast $VIP up
            ipvsadm -A -t ${VIP}:${PROT} -s $type
            ipvsadm -a -t ${VIP}:${PROT} -r ${RS1} -g -w 1
            ipvsadm -a -t ${VIP}:${PROT} -r ${RS2} -g -w 2
        RS脚本
            #!/bin/bash
            VIP=”172.13.35.202″
            echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
            echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
            echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
            ifconfig lo:0 ${VIP} netmask 255.255.255.255 broadcast ${VIP} up
            route add -host ${VIP} dev lo:0
        RS的预配置脚本:

!/bin/bash

vip=10.1.0.5
mask=’255.255.255.255′

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

ifconfig lo:0 $vip netmask $mask broadcast $vip up
route add -host $vip dev lo:0
;;
stop)
ifconfig lo:0 down

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

VS的配置脚本:

!/bin/bash

vip=’10.1.0.5′
iface=’eno16777736:0′
mask=’255.255.255.255′
port=’80’
rs1=’10.1.0.7′
rs2=’10.1.0.8′
scheduler=’wrr’
type=’-g’

case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
iptables -F

ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
;;
stop)
ipvsadm -C
ifconfig $iface down
;;
*)
echo “Usage $(basename $0) start|stop”
exit 1
;;
esac

    实现LVS_tun
        ifconfig tunl0 VIP netmask 255.255.255.255 broadcast 172.18.35.202 up     //配置一个隧道IP,生产环境为公有IP,每一个RS上也需要有一个VIP为公有IP而且是配置在tunl网卡上的
        route add -host VIP dev tunl0    //添加路由,使其响应报文的源IP为VIP
    LVS的多端口与长连接
        多端口使用firewall,持久连接使用persistent(timeout),也就是lvs的-f与-p
        多端口要求,这里使用多端口需要用到iptables中的mangle表,在PREROUTING链上对请求进行修改,修改为一个数字,这个数字可以是一个十进制数值如3,也可以是一个十六制数字如0xffff等等
            iptables -t mangle -A PREROUTING -d VIP -p tcp -m multiport –dport 80,8080 -j MARK –set-mark 0xffff
            ipvsadm -A -f 0xffff -s wrr -p 300
            ipvsadm -a -f 0xffff -r RIP -g -w 2
            ….
            这个后面的就是LVS的DR配置了
        长连接是在指定时间内连接不断开,而且在/proc/net/….会生成一个时间表
    LVS的ldirectord自动监控LVS的健康指数使用elrepo源可以进行rpm包安装,此源清华与aliyun有
        配置文件说明
            # Global Directives
checktimeout=3
checkinterval=1

fallback=127.0.0.1:80

fallback6=[::1]:80

autoreload=yes

logfile=”/var/log/ldirectord.log”

logfile=”local0″

emailalert=”admin@x.y.z”

emailalertfreq=3600

emailalertstatus=all

quiescent=no

Sample for an http virtual service

virtual=172.18.35.202:80
       real=172.18.250.37:80 gate
       real=172.18.250.38:80 gate
       #real=192.168.6.6:80 gate
       fallback=127.0.0.1:80 gate
       service=http
       scheduler=wrr
       persistent=600
       #netmask=255.255.255.255
       protocol=tcp
       checktype=negotiate
       checkport=80

      request=”index.html”   //七层健康监测

      receive=”Test Page”        //七层健康监测的内容

      virtualhost=www.x.y.z

    使用LVS发布wordpress

        拓扑图:

                LVS小记

            见LVS_DR_wordpress.png
        配置步骤
            RS_LAMP配置:
                yum -y install showmount
                service rpcbind start
                service nfs start
                mkdir /data/www -p
                echo “/data/www 172.18.250.38(rw,async)” > /etc/exports
                exportfs -ua
                下载wordpress
                unzip wordpress-4.3.1-zh_CN.zip
                chmod -R a+w wordpress
                vim /etc/httpd/conf/httpd.conf
                    #DocumentRoot “/var/www/html”    //注释掉
                    DirectoryIndex index.php index.html index.html.var   //添加一个index.php
                vim /etc/httpd/conf.d/vhost.conf
                    <VirtualHost :80>
   DocumentRoot /data/www
   ServerName www.a.com
   ErrorLog logs/dummy-host.example.com-error_log
   CustomLog logs/dummy-host.example.com-access_log common
   <Directory /data/www>
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>
                service httpd start
                mysql -u root
                create database wordpress;
                grant all privileges on *.
to test@”localhost” identified by “test”;
                grant all privileges on . to test@”127.0.0.1″ identified by “test”;
                grant all privileges on . to test@”%” identified by “test”;
                \q
                ifconfig lo:0 172.18.35.202 netmask 255.255.255.255 broadcast 172.18.35.202 up
                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/lo/arp_announce 
                echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                route add -host 172.18.35.202 dev lo:0
            RS_LNP配置:’
                yum -y install showmount
                mount -t nfs 172.18.250.37:/data/www /data/www 
                将nginx的主配置文件中的非注释server注释掉
                vim /etc/nginx/conf.d/vhost.conf    
               server {
       listen *:80;
       root /data/www;
       index index.php index.html index.htm;
       location ~ .php$ {
               fastcgi_pass localhost:9000;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
       }
}
                注释掉/etc/nginx/nginx.conf.default中的server段
                ifconfig lo:0 172.18.35.202 netmask 255.255.255.255 broadcast 172.18.35.202 up
                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/lo/arp_announce 
                echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
                route add -host 172.18.35.202 dev lo:0
            VS配置:
                ifconfig enp0s3:0 172.18.35.202 netmask 255.255.255.255 broadcast 172.18.35.202 up
                yum -y install ipvsadm
                ipvsadm -A -t 172.18.35.202:80 -s wrr
                ipvsadm -a -t 172.18.35.202:80 -r 172.18.250.37 -g -w 1
                ipvsadm -a -t 172.18.35.202:80 -r 172.18.250.38 -g -w 2 
            网页配置,完成 

原创文章,作者:gaomei,如若转载,请注明出处:http://www.178linux.com/75745

(0)
gaomeigaomei
上一篇 2017-05-15
下一篇 2017-05-15

相关推荐

  • 网络N23期第一周(计算机的组成及功能及Linux的发行版等)

    一. 描述计算机的组成及功能 计算机由五大硬件组成:” 运算器 + 控制器 + 储存器 + 输入设备 + 输出设备” 。 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算…

    Linux干货 2016-09-22
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 注:命令last的信息中,首行为最后登录的用户 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 注:uniq命令显示的重复必须满足重复且相连条件,否则会分开计数。 4、将/etc/passwd中的第三…

    2017-02-19
  • 第十周练习-脚本部分

    1、写一个脚本 (1) 能接受四个参数:start, stop, restart, status start: 输出“starting 脚本名 finished.” … (2) 其它任意参数,均报错退出; #!/bin/bash # case $1 in start)     echo&…

    Linux干货 2016-12-31
  • Linux哲学思想和常用命令的用法

    Linux哲学思想:    (1)、一切皆文件:               不仅普通的文件,目录、字符设备、块设备、套接字等在Unix、Linux中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套…

    2017-07-02
  • 1. 什么是Linux

        如果以前从没有接触过linux, 你可能会对为什么会存在这么多不同的linux发行版有些困惑. 在看linux软件包时, 你肯定听过发行版, LiveCD和GNU之类的等等术语, 也肯定摸不着头脑. 第一次接触linux,想理解会有些困难.  我们就先了解下linux系统内部结构的一些信息. &nbs…

    Linux干货 2016-10-26
  • 网络管理

    7层结构。三次握手,四次挥手。

    2017-12-17