lvs-nginx-haproxy基本配置与区别

一.lvs
使用背景:在浏览量快速飙升的今天,一台服务器的cpu和I/O很快成为了网络瓶颈,提升硬件性能只能是杯水车薪,所以引入了集群服务,它只向用户展示前端的一台调度器,真正的服务器由许许多多的服务器构成服务池,用户访问到调度器,再由调度器上的转发规则和调度算法选出服务池中的一台服务器,转发用户请求由really server来处理,这样便解决了并发访问的问题.并且当整个系统收到的负载超过目前所有的节点的处理能力时,可以在服务池中增加服务器来满足不断增长的负载请求。
1)lvs是根据iptables的框架开发的,所以和iptables很相似。
2)lvs有两个部分:a.工作在内核空间的IPVS模块,lvs的功能也都由这个模块实现。
               b.ipvsadm-定义集群服务的工具,作用是将管理员定义的集群服务列表传送给IPVS模块。
3)lvs使用tcp协议工作在iso模型的第四层,不产生流量,只是基于vip来进行一个转发,VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
3)ipvsadm的使用命令:
   ipvsadm -A -t 172.25.31.100:80 -s rr
   ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.3:80 -g
   ipvsadm -a -t 172.25.31.100:80 -r 172.25.31.4:80 -g
4)共享存储可以使服务池中拥有相同的内容,从而提供相同的服务,通常是数据库、网络文件系统和分布式文件系统。动态更新的数据一般存储在数据库系统中,它可以保证并发访问时数据的一致性,静态的数据可以存储在网络文件系统中(NFS/CIFS)但是网络文件系统的伸缩能力有限,一般来说只支持3~6个繁忙的服务器结点,而分布式文件系统(GFS、AFS...)可以提供良好的伸缩性,访问分布式的文件系统就像访问本地的文件系统一样。
5)三种转换规则:
VS/NAT:网络地址转换,它的请求报文和响应报文都要经过调度器,在请求经过调度器时,调度器重写请求报文的目的地址,根据预设的调度算法,将请求转发给后端的真实的服务器;真实服务器响应报文通过调度器时,报文的源地址被重写,再返回给客户。
VS/TUN:IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。调度器把请求报文通过ip隧道转发到真实的服务器,且真实服务器将响应直接返回给客户,这种模式可以解决当客户请求越来越多时调度器的处理能力将成为瓶颈这个问题,而且一般网络服务的应答比请求报文大的多,这种ip隧道技术可以提高集群系统的最大吞吐量。
VS/DR:直接路由技术,它不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现 报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。它和隧道技术一样可极大的提高集群系统的伸缩性,但是它没有ip隧道的开销,对真实服务器也没有必须支持ip隧道协议的要求,但是它要求调度器也真实服务器都有一块网卡连接在同一个物理网段上。
6)在真实服务器上要将VIP设置为不可见:
   yum install -y arptables_jf
   arptables -A IN -d 172.25.31.100 -j DROP
   arptables -A OUT -s 172.25.31.100 -j mangle --mangle-ip-s 172.25.31.2
7)优点:
   a.抗负载能力强,工作在网络4层之上,仅做分发没有流量的产生,保证了均衡器IO的性能不会受到大流量的影响,对内存和cpu资源消耗比较低。
   b.配置性比较低,降低了人为出错的机率。
   c.自身有完整的双机热备方案:lvs+keepalived
   d.应用范围比较广,因为它工作在4层,所以几乎可以对所有的应用做负载均衡
8)缺点:
   a.软件本身不支持正则表达式的处理,不能做动静分离。
   b.网站应用比较庞大的话,实施起来比较复杂,特别是后面由windows server时。
   c.对网络稳定性的依赖比较大。

二.nginx
1)Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器
2)nginx作为代理服务器:
  在客户端发送请求时,不会直接到目的主机而是先到达代理服务器,由代理服务器发送给目标主机,并接收目标主机返回的数据,把数据在自己的硬盘中存放一份,在发送给客户机。这样便可以解决以下几个问题:
  a.因为代理服务器里面的缓存,所以可以提高访问速度。
  b.防火墙作用,在代理服务器上设限,过滤掉不安全的信息。
  c.通过代理服务器能够访问不能访问的目标站点(翻墙浏览器,可以直接访问到外网)
3)优点:
  a.nginx工作在网络的第七层,可以针对http应用做一些分流的策略,对网络稳定性的依赖非常小,一般能ping通就能进行负载的功能.
  b.可以作为静态网页和图片服务器,第三方模块也很多。
  c.Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
  d.nginx对于后端的服务器没有一直在健康检测,请求过来的时候,分发还是进行分发,只是请求不到数据的时候,会再向好的机器进行请求,直到请求正常为止所以如果是nginx做为前端负载均衡的话,只要并发撑得住,后端切掉几台不会影响到用户
  缺点:
  a.Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些

  b.对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持Session的直接保持,但能通过ip_hash来解决。

1.nginx的安装:
a.tar -zxf nginx-1.10.1.tar.gz
b.cd nginx-1.10.1/
c.cd src/                ##进入源码包
d.cd core/ (nginx.h)
e.cd ..
f.cd auto/
g.cd cc   (gcc)
h.cd ..
i../configure --help
  ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module            ##源码安装第一步,生成rpm包
  yum install pcre-devel openssl-devel zlib-devel -y
  重新执行第一步,直到没有报错
  make  ##源码安装第二步(编译)
  make install  ##源码安装第三步(下载)
  ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
  cd /usr/local/sbin   
  ./nginx       ##直接开启nginx
 which nginx    ##查看nginx安装在哪
2.要改变一个应用程序中的参数值,先要确保内核是否支持,再确保系统是否支持,最后才能确保修改的应用程序的参数值成功生效.
a.查看内核参数的命令:sysctl -a (/etc/sysctl)
b.修改系统中的值:/etc/security/limits.conf
c.应用:/usr/local/nginx/conf/nginx.conf
3.nginx的应用:
a.自建虚拟目录:
 location / {
            root   html;
            index  index.html index.htm;
        }
        location /status {
            stub_status on;
            access_log off;
            allow 172.25.31.250;
            deny all;
        }
测试:172.25.31.2:/status
b.虚拟主机的应用:
  server {
         listen 80;
         server_name www.wzw.com;
         location /{
             root /www1;
             index index.html;
          }
    }
  server {
         listen 8080;
         server_name bbs.wzw.com;
         location /{
             root /www2;
             index index.html;
          }
    }
nginx -s reload       ##改好配置文件后记的重新加载nginx服务
测试:curl www.wzw.com  若curl www.wzw.com down掉以后,客户端会出现报错所以可以应用它的负载均衡来解决。
注意:在测试主机上要做好解析,并在nginx服务器上建立好发布目录和发布文件
c.负载均衡的应用:
http {
       upstream westos{
                server 172.25.31.3:80;
                server 172.25.31.4:8080;
       }        ##定义了apache服务的负载均衡
    include       mime.types;
    default_type  application/octet-stream;

 server {
         listen 80;
         server_name www.wzw.com;
         location /{
         #    root /www1;                 ##从本机上读取数据
         #    index index.html;
              proxy_pass http://westos;   ##从后台服务器上去取数据
          }
    }
  server {
         listen 8080;
         server_name bbs.wzw.com;
         location /{
          #   root /www2;
          #   index index.html;
              proxy_pass http://westos;
          }
    }
}
4.nginx的高可用:
a.在两台nginx服务器上安装代理: yum install ricci -y
                              passwd ricci
                              /etc/init.d/ricci start
                              chkconfig ricci on
b.在管理端服务器上安装管理服务: yum install luci -y
                                 /etc/init.d/luci start
注意:在两台nginx服务器上都要做节点的解析,关掉iptables

三.haproxy

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案.
1.haproxy在负载均衡的一台后端挂掉后,如果还没达到探测的时间点时,请求还会往挂掉的这台转发,请求会丢失
2.haproxy对于后端的服务器就算请求没过来也有一直在健康检测,发现有故障的时候在请求没到来的时候会切掉,但如果在检测期间请求到达的话,会有异常.如果有用haproxy做为前端负载均衡的话 ,如果后端服务器要维护,在高并发的情况,肯定是会影响用户的。

3.HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

1.haproxy的安装:
   yum install rpm-build -y
  rpmbuild -ta haproxy-1.6.11.tar.gz
  vim /etc/security/limits.conf
  sysctl -a | grep file
  cd /root/rpmbuild/
  cd RPMS/               ##RPMS中是存放编译后的
  cd x86_64/
  rpm -ivh haproxy-1.6.11-1.x86_64.rpm
  cd /etc/haproxy/
  /etc/init.d/haproxy start
  vim haproxy.cfg
  552  netstat -antlp
  553  vim /etc/rsyslog.conf
  554  /etc/init.d/rsyslog restart
  555  tail -f /var/log/haproxy.log
  556  vim /etc/rsyslog.conf
  557  /etc/init.d/rsyslog restart
  558  tail -f /var/log/haproxy.log
2.配置文件的修改
vim /etc/haproxy
global
        maxconn         65535
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             188
        gid             188
        chroot          /var/empty
        daemon

defaults
        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s
        stats uri       /admin/stats
        stats auth      wzw:westos

# The public 'www' address in the DMZ
frontend public
        bind            172.25.31.2:80 name clear
        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

       # acl badlist src 172.25.31.250
       # http-request deny if badlist
       # errorloc 403 http://172.25.31.2:8080
       # redirect location http://172.25.31.2:8080
         acl read methon GET
         acl read methon HEAD
         acl write methon PUT
         acl write methon POST
        #use_backend     static if { hdr_beg(host) -i img }
        #use_backend     static if { path_beg /img /css   }
        use_backend dynamic if { path_end .php }
        use_backend static if write
        default_backend static

# The static backend backend for 'Host: img', /img and /css.
backend static
       # balance         roundrobin
         balance         source
        server          web1 172.25.31.3:80 check inter 2000
        server          web2 172.25.31.4:80 check inter 1000
backend dynamic
        balance         roundrobin

        server          web1 172.25.31.3:80 check inter 1000

注意:haproxy安装完后,没有haproxy.cfg文件,可以参考/root/rpmbuild/DUILD/ haproxy-1.6.11/doc/configuration.txt文件来配置。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值