05-高并发负载均衡-nginx

高并发负载均衡-nginx

思维导图下载链接

高并发负载均衡-介绍

nginx

  • Nginx和Tengine

    • Nighx(“engine x”)是一个高性能的HTTP和反向代理的服务器,也是一个IMAP/POP3/SMTP代理服务器

    • 第一个公开版本0.1.0发布于2004年10月4日

    • 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消而闻名

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

    • 2011年6月1日,nginx1.0.4发布

      • apache httpd
    • Nignx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序员lgor Sysoev所开发

    • 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆服务器使用nginx网站用户有:新浪、网易、腾讯等

    • 功能

      • web服务器
      • web reverse proxy
      • smtp reverse proxy
    • Nginx和Apache的优缺点

    • 子主题 10

  • 面向服务

  • 切分服务

高并发负载均衡-nginx-conf

安装nginx(Tengine 是nginx的加强版,封装版,淘宝开源,官网http://tengine.taobao.org/)

  • tar xf tengine-2.1.0.tar.gz

  • cd ./tengine-2.1.0/

  • yum install gcc pcre-devel openssl-devel -y

  • ./configure --prefix=/opt/sxt/nginx

  • make && make install

  • cd /etc/init.d/

    • #vi 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="/opt/sxt/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/sxt/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 N G I N X C O N F F I L E r e t v a l = NGINX_CONF_FILE retval= ?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $"Stopping $prog: "
killproc p r o g Q U I T r e t v a l = 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 n g i n x H U P R E T V A L = 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

	  #!/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="/opt/sxt/nginx/sbin/nginx"
	  prog=$(basename $nginx)
	   
	  NGINX_CONF_FILE="/opt/sxt/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

- #chmod +x nginx
- 启动,停止,重新装载

	- service nginx start|stop|reload

- nginx=修改路径
- NGINX_CONFI_FILE=配置文件
- #chkconfig nginx on
- #chkconfig

配置nginx

  • #cd /opt/sxt/nginx/conf/nginx.conf

    • #定义Nginx运行的用户和用户组
      user www www;

    • worker_processes(工作进程:cpu核心数或核心数*2)

    • #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
      error_log /var/log/nginx/error.log info;

    • #进程文件
      pid /var/run/nginx.pid;

    • events

      • ps -fe | grep nginx

      • 一个进程最大的连接数

        • 单个进程最大连接数(最大连接数=连接数*进程数)
      • ulimit -a(open file)

        • 一个进程最多的文件描述符
        • ulimit -SHn 65535(申请上限)
    • http

      • include mime.types; #文件扩展名与文件类型映射表

      • default_type application/octet-stream; #默认文件类型

      • #charset utf-8; #默认编码

      • client_header_buffer_size 32k; #上传文件大小限制

      • large_client_header_buffers 4 64k; #设定请求缓

      • client_max_body_size 8m; #设定请求缓

      • log_format

        • 日志格式
      • sendfile on

        • 零拷贝sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
      • tcp_nopush on; #防止网络阻塞

      • tcp_nodelay on; #防止网络阻塞

      • keepalive_timeout

        • 长连接超时时间,单位是秒(四次分手的时间)
      • gzip

        • 压缩
      • server

        • listen

          • 监听的端口
        • server_name

          • 服务器名称(域名可以有多个,用空格隔开)
        • location

          • root

            • web server文件目录(html相对目录)(唯一性)
          • index

            • 返回主页页面(多个时有哪个返回哪个)
          • autoindex

            • 自动索引(显示所有)Centos仓库#开启目录列表访问,合适下载服务器,默认关闭。

高并发负载均衡-nginx-proxy

location映射

  • 实列

location匹配规则

  • !ser

    • !会从命令历史中找匹配的命令重新执行(service nginx reload)
  • route -n(查看路由表,当没有网关时)

  • route add default gw 网关(添加网关,下一跳)

  • 反向代理

  • 基于池反向代理的负载均衡

  • 不基于池反向代理的负载均衡

    • hosts同一名称多个IP
    • 先找upstream,没有则找hosts

高并发负载均衡-session一致性

Session一致性解决方案

  • session复制

    • tomcat本身带有复制session的功能
  • 共享session

    • 需要专门管理session的软件
    • memcached缓存服务,可以和tomcat整合,帮助tomcat共享管理session

安装

  • 安装JDK

    • rpm -i jdk-7u67-linux-x64.rpm

    • vi /etc/profile

      • export JAVA_HOME=/usr/java/jdk1.7.0_67
      • export PATH=$PATH:JAVA_HOME/bin
  • 安装Tomcat

    • tar xf apache-tomcat-7.0.61.tar.gz

    • vi /root/apache-tomcat-7.0.61/webapps/ROOT/index.jsp

      • 先备份再编辑
      • <%session.getId()%>
    • /root/apache-tomcat-7.0.61/bin/startup.sh

    • http://192.168.137.200:8080

  • 负载

    • 服务器池
    • 反向代理
  • 安装memcached

    • 安装libevent

    • 安装memcached

      • 如果源配置也可以yum -y install memcached
    • 启动memcached

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

        • -d:后台启动服务
        • -m:缓存大小
        • -p:端口
        • -l:IP
        • -P:服务器启动后的系统进程ID,存储的文件
        • -u:服务器启动是以哪个用户作为管理用户
      • netstat -pant | grep 11211

  • 配置tomcat

    • vi /conf/context.xml

    • 拷贝jar包到lib目录下

      • asm-3.2.jar
      • kryo-1.04.jar
      • kryo-serializers-0.11(1).jar
      • memcached-session-manager-1.7.0.jar
      • memcached-session-manager-tc7-1.8.1.jar
      • minlog-1.2.jar
      • msm-kryo-serializer-1.7.0.jar
      • reflectasm-1.01.jar
      • spymemcached-2.7.3.jar

Seesion不一致(优先查看时间是否一致,偏差不要太大)

XMind: ZEN - Trial Version

发布了20 篇原创文章 · 获赞 1 · 访问量 265

猜你喜欢

转载自blog.csdn.net/weixin_43555997/article/details/104163074
今日推荐