大数据学习第四天之Nginx篇

一 Nginx的产生

关于Nginx的一些简介在这里就不具体解释了 百度都有的

它的产生是由于大型网站处理高并发的需要

二 负载均衡 高并发

2.1 高并发

          见名知意,高(大量的),并发就是可以使用多个线程或者多个进程,同时处理(就是并发)不同的操作。

简而言之就是每秒内有多少个请求同时访问。

2.2 负载均衡

          负载均衡:将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】,也是分布式系统架构设计中必须考虑的因素之一。

          下面这张是tomcat并发图

我们可以看到tomcat美妙处理300个请求的时候,tomcat已经开始不行了。

所以我们在高并发的场景下,这样实现负载均衡

三 Nginx的安装以及相关的配置

前戏已经做足了,下面开始进入正题!

3.1 Nginx的安装

安装如下依赖:gcc openssl-devel pcre-devel zlib-devel

                         安装命令:yum -y install gcc openssl-devel pcre-devel zlib-devel

解压文件:tar  -zxvf  nginx-1.8.1.tar.gz

configure配置:   进入解压后的源码目录,然后执行configure命令进行配置

                             配置命令:./configure --prefix=/usr/soft/nginx   #prefix参数是我们指定的nginx安装的路径

                             注:/usr/local/nginx 是默认安装目录 所以也可以直接执行 ./configure

编译&安装:         make && make install

3.2 配置Nginx为系统服务,以方便管理

1、在/etc/rc.d/init.d/目录中建立文本文件nginx

2、在文件中粘贴下面的内容:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

3、修改nginx文件的执行权限
    chmod +x nginx
4、添加该文件到系统服务中去
    chkconfig --add nginx
    查看是否添加成功
    chkconfig --list nginx

启动,停止,重新装载
service nginx start|stop

四 负载均衡配置

4.1默认负载均衡平衡配置

http { 
    upstream whb{ 
        server node02; 
        server node03; 
    } 

    server { 
        listen 80; 
	server_name  localhost;
        location / {
            proxy_pass http://whb;
        }
    } 
}

如果没有专门配置负载均衡方法,则默认为循环法。

所有请求都被 代理到服务器组whb,并且nginx应用HTTP负载平衡来分发请求。

4.2 加权负载平衡

通过使用服务器权重,还可以进一步影响nginx负载均衡算法,谁的权重越大,分发到的请求就越多。

upstream whb{

        server  node02 weight=5;

        server  ndoe03 weight=3;

  }

4.3 最少连接负载均衡

在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。

 upstream shsxt {
        least_conn;
        server node02;
        server node03;
    }

4.4  会话持久性

上述的循环或最少连接数的负载平衡方法,每个后续客户端的请求都可能被分发到不同的服务器。

不能保证相同的客户端总是定向到相同的服务器。

如果需要将客户端绑定到特定的应用程序服务器 。

换句话说,就是始终选择相同的服务器而言,就要使客户端的会话粘滞持久

ip-hash负载平衡机制就是有这种特性。

使用ip-hash,客户端的IP地址将用作散列键,以确定应该为客户端的请求选择服务器组中的哪台服务器。

此方法可确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。

upstream whb{
    ip_hash;
    server node02;
    server node03;
}

4.5 Nginx的访问控制

Nginx还可以对IP的访问进行控制,allow代表允许,deny代表禁止

location / {
    deny 192.168.4.78;
    allow 192.168.235.0/24;
    deny all;
}

从上到下的顺序,匹配到了便跳出。

五 虚拟主机

关于对虚拟主机的概念我也不想做过多解释

其实就是VPS 不知道自行百度去吧

5.1 基于域名的虚拟主机

  upstream shsxt{
        server node02;
    }


    upstream bjsxt{
        server node03;
    }
    #访问shsxt时会把请求导到shsxt服务器组中去
    server {
        listen       80;
        server_name  localhost;

        location / {
             proxy_pass http://shsxt;
        }
    }
    #访问bjsxt的时候会把请求导到bjsxt服务器组中去
    server {
        listen      80;
        server_name localhost;

        location / {
              proxy_pass http://bjsxt;
        }

    }

5.2 基于端口的虚拟主机

http { 
    upstream shsxt{ 
        server node02; 
} 
	upstream bjsxt{ 
        server node03
    } 
 server { 
#当访问nginx的80端口时,将请求导给bjsxt组
        listen 8080; 
        server_name localhost;
        location / {
            proxy_pass http://bjsxt;
        }
} 
server { 
#当访问nginx的81端口时,将请求导给shsxt组
        listen 81; 
        server_name localhost;
        location / {
            proxy_pass http://shsxt;
        }
} 
}

 六  关于正向代理和反向代理

正向代理:

举个例子:

我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。像我们经常通过vpn访问国外的网站,此时就是正向代理。

比如翻墙:

反向代理:

是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

 七 关于Nginx的session一致性的问题

如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,

但是如果你使用了负载均衡把请求分发到不同的机器呢?

这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,

而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,

于是session的共享就成了一个问题。

解决session的方案:

   1、session复制

        tomcat 本身带有复制session的功能。

   2、共享session

        需要专门管理session的软件,

        memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。

   3、安装memcache 

        安装memcached内存数据库

        yum –y install memcached

        启动: memcached -d -m 128m -p 11211 -l 192.168.235.113 -u root -P /tmp/

  1. web服务器连接memcached的jar包拷贝到tomcat的lib
  2. 配置tomcat的conf目录下的context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

    memcachedNodes="n1:192.168.17.9:11211"

    sticky="true"

    lockingMode="auto"

    sessionBackupAsync="false"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    sessionBackupTimeout="1000" 
        
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

配置memcachedNodes属性,配置memcached数据库的ip和端口,默认11211,多个的话用逗号隔开.

目的是为了让tomcat服务器从memcached缓存里面拿session或者是放session

  1. 修改index.jsp,取sessionid看一看
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>

<html lang="en">

    SessionID:<%=session.getId()%>

</br>

    SessionIP:<%=request.getServerName()%>
</br>

<h1>tomcat1</h1>

</html>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值