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

相关推荐

  • Ansible浅谈

    ansible特性:         模块化,调用特定的模块,完成特定的任务;         基于Python语言实现,由Paramiko、PyYAML和Jinja2三个关键模块;         部署简单,agentless; &nbs…

    Linux干货 2016-12-15
  • N26-博客作业-week12

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求; (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程; (3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息; (4) 访问资源:获取请求报文中请求的资源; (5) 构建响应报文: (6) 发送响应报文: (7) 记录…

    Linux干货 2017-05-23
  • 逻辑卷的命令解析

    前言    lvm是logical volume manager(逻辑卷管理器)的简称,通过将若干个磁盘分区连接成一个整块的卷组(volumegroup),形成一个存储池,管理员可以在卷组上随意创建逻辑卷(logicalvolumes),并进一步在逻辑卷组上创建文件系 统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按…

    Linux干货 2016-08-30
  • CentOS6.7上编译安装MariaDB

    CentOS6.7上编译安装MariaDB

    系统运维 2016-06-03
  • 少走冤枉路!带你走过SNMP的那些坑

    SNMP(Simple Network Management Protocol)即简单网络管理协议,是在网络与系统监控领域中,最常使用的一种数据采集技术。尽管这个协议非常简单,但在大规模IT环境监测中,还是经常会碰到各种坑,因此优云开源了一套友好的SNMPAPI,并通过本文简单介绍这套API中的一些特点,希望帮助各位运维同仁提前规避一些问题。 特点[0].&…

    2016-06-22
  • 实验:yum、编译安装、swap

    实验:在centos7实现光盘yum源 1yum install autofs 2现在启动systemctl start autofs 3开机启动systemctl enable autofs 4 cat /etc/yum.repos.d/base.repo[centos7]name=centos7 repobaseurl=file:///misc/cdgp…

    Linux干货 2017-04-25