Nginx作用及配置方式,memcached的session共享实现方式

一、Nginx产生背景

巨大流量海量并发的访问

单台服务器资源和能力有限

二、负载均衡

1、高并发

每秒内多个请求访问,需要同时处理大量线程进程

2、负载均衡

将请求/数据均匀的分摊到多个操作单元上执行

3、高并发处理

每台tomcat的并发量在200到250之间,因此在并发量高时,需要添加tomcat数量,为保证每台tomcat负载量合理时,需要负载均衡。

常见互联网分布式架构:客户端层,反向代理层,站点层,服务层,数据层。

将请求的数据均匀分摊到多个操作单元上执行,则可实现负载均衡。

三、nginx

1、什么是nginx

nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,特点是占用内存少,并发能力强。

官方测试nginx能够支持5万并发连接,并且CPU、内存等资源消耗非常低,运行稳定。

2、nginx优缺点对比

nginx:

为轻量级

占用资源内存少

处理请求为异步非阻塞(例如ajax)

在高并发下nginx能保持低资源,低消耗高性能,高度模块化的设计,编写模块相对简单

配置简洁,Apache配置复杂

apache:

Rewrite重写,相比nginx的rewrite强大模块超多

相比nginx,bug少

四、nginx的使用

1、安装相关依赖

[root@node2 bin]# yum -y install gcc openssl-devel pcre-devel zlib-devel

2、下载enginx,我们使用阿里的Tengine

下载地址:http://tengine.taobao.org/download_cn.html

同时解压缩

3、安装nginx

进入tengine解压后目录,执行:

.configure				//此时安装在默认目录/usr/local/nginx
//也可以指定安装目录
./configure --prefix=/usr/soft/nginx

之后执行如下,进行安装

make && make install

4、为方便管理,将nginx添加至系统服务中

cd /etc/rc.d/init.d/	//进入如下目录

新建nginx文本,将如下文本拷贝其中

#!/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

修改nginx文件的执行权限

chmod +x nginx

添加该文件至系统服务中

chkconfig --add nginx
chkconfig --list nginx		//查看是否添加成功

此时nginx安装配置完毕可直接输入命令启动使用:

service nginx start		//启动
service nginx stop		//关闭
service nginx restart	//重启

启动后,关闭Linux防火墙,浏览器访问虚拟机ip:80

出现welcome to nginx 则配置成功

五、nginx配置

进入nginx安装目录的nginx.conf文件

vim /usr/local/nginx/conf/nginx.conf

主要内容如下(后续进行负载均衡配置时,主要更改此配置文件)

#进程数,建议设置和CPU个数一样或2倍
worker_processes  2;

#日志级别
error_log  logs/error.log  warning;(默认error级别)

# nginx 启动后的pid 存放位置
#pid        logs/nginx.pid;

events {
	#配置每个进程的连接数,总的连接数= worker_processes * worker_connections
    #默认1024
    worker_connections  10240;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
#连接超时时间,单位秒
keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost                 
        #默认请求
  		location / {
    				 root  html;   #定义服务器的默认网站根目录位置
   				  index  index.php index.html index.htm;  #定义首页索引文件的名称
        }
	    #定义错误提示页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

1、负载均衡配置

nginx支持如下负载均衡

(1)、轮询负载均衡

此配置为默认配置

upstream haha{
        server 192.168.30.102:8080;	//此为另外两台tomcat部署所在的虚拟机ip,8080位tomcat端口
        server 192.168.30.103:8080;
}
server {
        listen       80;
        server_name  localhost;
        location / {
           proxy_pass http://haha;
        }
}

(2)、加权负载均衡

upstream haha{
        server 192.168.30.102:8080 weight=5;	//数字可为1-10任意整数,数字越大权重越大
        server 192.168.30.103:8080 weight=3;	//此处表示5:3
}
server {
        listen       80;
        server_name  localhost;
        location / {
           proxy_pass http://haha;
        }
}

(3)、最少连接数,将请求分配给活动连接数最少的服务器

upstream haha{
    	least_conn;
        server 192.168.30.102:8080;	
        server 192.168.30.103:8080;	
}
server {
        listen       80;
        server_name  localhost;
        location / {
           proxy_pass http://haha;		//haha名字自定,但需要与upstream处相同
        }
}

(4)、ip-hash 基于ip地址,确认该访问哪台服务器,可以保证同一个ip始终访问一台服务器

upstream haha{
    	ip_hash;
        server 192.168.30.102:8080 weight=5;	
        server 192.168.30.103:8080 weight=3;	
}
server {
        listen       80;
        server_name  localhost;
        location / {
           proxy_pass http://haha;
        }
}

2、访问限制

location / {
           deny 192.168.2.180;
           allow 192.168.30.0/24;	//表示允许192.168.30.0--192.168.30.255之间的ip
           deny all;
           proxy_pass http://haha;
        }

从上到下,匹配到就跳出,即如果第一个将该ip禁了(不管ip是准确ip还是一个范围内),第二个允许了,也表示禁止,因为第一次匹配就已经禁止了,后续不再允许。

六、虚拟主机

1、虚拟主机概述

指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放及传输功能。

优点:由于多态虚拟主机共享一台真实主机资源,用户承受的硬件费用,网络维护费用,通信线路的费用大幅度降低,软件配置,防攻击等安全措施都由专业服务商提供,大大简化服务器管理的复杂性,同时也不必为使用和维护服务器的技术问题担心。

2、虚拟主机类别

(1)、基于域名的虚拟主机

 upstream sh{
        server 192.168.30.102:8080;
 }
 upstream bj{
    server 192.168.30.103:8080;
 }

server{
	listen 80;
	server_name city2.com;
    location / {
    	proxy_pass http://bj;
    }
}
server{
	listen 80;
	server_name city2.com;
    location / {
    	proxy_pass http://sh;
    }
}

(2)、基于端口的虚拟主机

	upstream sh{
        server 192.168.30.102:8080;	
    }
    upstream bj{
    	server 192.168.30.103:8080;
    }

    server{
    	listen 80;		//80端口
    	server_name localhost;
    	location / {
    		proxy_pass http://bj;
    	}
    }
    server{
    	listen 81;		//81端口
    	server_name localhost;
    	location / {
    		proxy_pass http://sh;
    	}
    }

(3)、基于ip的虚拟主机(很少使用)

七、正向代理和反向代理

1、正向代理

代理客户端,当我们访问google,无法直接访问,可以使用VPN等进行翻墙,此时,我们将请求信息发送到VPN等代理服务器上,它将我们符请求发送到google,获取google返回的结果,再将结果安返回给我们

2、反向代理

代理服务器,访问百度,我们只需要访问www.baidu.com,该代理服务器获取请求,再将请求发送给内部网络上的服务器,内部的服务器将处理结果返回给代理服务器,代理服务器将内容返回给我们。在这个过程中,我们只访问baidu,其内部的服务器对于我们是透明的。

八、nginx的session共享

1、产生

http是无状态的,也就是说服务器无法识别你

session被提出用于解决此问题,但session只存在一台服务器,如果一台服务器崩掉,或请求需要在不同服务器上处理,session在两台服务器直接无法互通,相关信息会丢失。

2、解决session一致性方案

a、session复制

tomcat自带session复制功能,将每台tomcat之间进行session的备份复制,但访问人数多时,session的存储将消耗大量资源。

b、session共享

一般使用memcached缓存服务

3、memcached使用

(1)、安装

yum -y install memcached

(2)、将web服务器连接memcached的jar包拷贝至tomcat的lib目录下

(3)、配置tomcat目录下的context.xml,将如下内容拷贝到里面(注意,n1对应ip为安装memcached的服务器地址,端口号11211)

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.30.102:11211"
    sticky="true"
    lockingMode="auto"
    sessionBackupAsync="false"
  	requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
	sessionBackupTimeout="1000" 								transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

所有tomcat都需要配置,内容相同

(4)、启动(ip为安装位置)

memcached -d -m 128m -p 11211 -l 192.168.30.102 -u root -P /tmp/

(5)、为方便sessionId的查看,可更改index.jsp(在tomcat/webapps/ROOT/index.jsp)页面

<%@ 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>

(6)、nginx均衡时,使用的tomcat在发生变化,但sessionId不变,则说明配置成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值