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

相关推荐

  • 文本三剑客grep爵士与手下的血泪奋战

    文件查看命令: cat, tac,revcat [OPTION]… [FILE]…  -E: 显示行结束符$ -n: 对显示出的每一行进行编号 -A:显示所有控制符 -b: 非空行编号 -s:压缩连续的空行成一行 文件查看 分页查看文件内容more: 分页查看文件more [OPTIONS…] FILE…-d: 显示翻页及退出提示less:一页一页…

    Linux干货 2016-08-07
  • shell编程的常见实例

    1. 写一个脚本/root/bin/argsnum.sh 用户输入一个文件路径并查找文件中空白行的个数 ,如果用户没有输入路径则自动退出  实验结果如下: 如果不输入任何路径程序会自动退出:实验结果如下: 用其他方法验证是不是有两行空行: (个人总结): 1.   read 命令,如果用 -p 来做提示信息,则不支持\n换行,这…

    Linux干货 2016-08-12
  • 马哥教育21期网络班—第11周课程+练习—-成长进行时–不退步–下

    3、描述DNS查询过程以及DNS服务器类别。 DNS查询过程主机—>查找互联网上的主机 www.magedu.com—>联系到自己指向的DNS服务器—>DNS服务器—>找根 .—>根返回给DNS服务器—>DNS找.com—>com返回给DNS—->DNS找ma…

    Linux干货 2016-09-19
  • 学习了点命令

    什么是shell 它提供了用户与内核进行交互操作的一种接口shell它接受用户输入的命令并把它送入内核去执行 shell也被称为Linux的命令解释器 shell是一种高级程序设计 语言 查看当前系统使用了那个shell            &nb…

    Linux干货 2017-07-13
  • N21天天第十二周课程练习

    1、请描述一次完整的http请求处理过程; 1、建立TCP连接 2、Web浏览器向Web服务器发送请求 3、Web浏览器发送请求头信息   建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME   信息包括请求修饰符、客户机信息和可能的内容 4、Web服务器应答…

    Linux干货 2016-10-31
  • M20 – 1- 第三周博客(2):Linux用户、组

    一、Linux用户组详解 Linux系统中的每个用户都有一个用户组,系统能对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如Linux下的用户属于和他同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就对/etc/group文件的更新。 用户组(group)就是具…

    Linux干货 2016-08-05