• 1. 负载均衡 Nginx 郭清存 2012-8-21
  • 2. 题纲负载均衡 Nginx概述 Nginx安装 Nginx配置 Nginx的负载均衡 Nginx的重定向
  • 3. 负载均衡
  • 4. 负载均衡是什么? 负载均衡(又称为负载分担),英文名称为Load Balance, 其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元 上进行执行,例如Web服务器、FTP服务器、企业关键应用服务 器和其它关键任务服务器等,从而共同完成工作任务。
  • 5. 负载均衡的两个含义负载均衡有两方面的含义: 1、大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间; 2、单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
  • 6. 为什么要用负载均衡? 随着网络业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大。硬件升级:现有资源的浪费,业务量再次提升,再一次的浪费.负载均衡在此情况下
  • 7. 负载均衡技术主要应用 1.DNS负载均衡最早的负载均衡技术是通过DNS来实现的,在DNS中为多个地址配置同一个名字,因而查询这个名字的客户机将得到其中一个地址,从而使得不同的客户访问不同的服务器,达到负载均衡的目的。优点:简单、web服务器位置可位于互联网的任意位置 缺点:不能区分服务之间的差异、运行状态、不可靠、修改DNS设置生效时间长
  • 8. 2.反向代理负载均衡 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。 反向代理负载均衡技术:将来自internet上的连接请求以反向代理的方式动态地转发给内部网络上的多台服务器进行处理,从而达到负载均衡的目的。 优点:结合代理服务器的高速缓存实现动静态分离,用户访问的非真实服务器—安全性高、 监控内网服务的健康性 缺点:需要为每一种应用服务专门开发一个反向代理服务器. 代理服务器的负载大
  • 9. 负载均衡的分类载体分类 软件负载均衡 硬件负载均衡
  • 10. 软件负载均衡 软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等.优点: 配置简单、灵活、成本低廉 缺点: 消耗额外系统资源、可扩展性不好、安全性低(系统bug引起)
  • 11. 硬件负载均衡 硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高。优点: 性能高、安全性高 缺点: 成本高
  • 12. Nginx概述
  • 13. Nginx是什么?Nginx(“engine x”)是一款高性能的HTTP和 反向代理服务器,能够支持高达5万并发连接数的响应,而内存、CPU等系统资源消耗却非常低,运行非常稳定。
  • 14. Nginx国内的支持者新浪博客/播客、网易新闻、六间房、56、 水木社区、豆瓣、YUPOO相册、迅雷在线
  • 15. (本页无文本内容)
  • 16. 选择Nginx理由高并发 内存消耗少 成本低
  • 17. 高并发官方测试Nginx撑5万并发连接,实际生产环境中可支撑2~4万并发连接。
  • 18. 举例说明6台Web Server从Apache到Nginx服务的迁移(6台Server搭建的是日均2500万PV的分类信息网站),迁移前第台服务器平均系统负载50~60、CPU使用率为70%~90%,迁移后平均系统负载 为1~4,CPU使用率为20%~40% 为什么Nginx可以支撑这么高的并发? 使用了epoll(linux 2.6内核)和kqueue网络I/O模型。 注:Apache使用的是select 网络I/O模型
  • 19. Select 0.1毫秒处理15000个文件描述epoll 0.08毫秒处理15000个文件描述
  • 20. Session sticky:不复制
  • 21. 内存消耗少 每个nginx进程消耗15M内存 每个apache进程消耗40M内存 场景举例: 每个进程响应1000个请求,一共有30000个连接,就至少要启动 30个进程. Nginx:每个进程消耗 15M内存,共要消耗掉30*15=450M内存. Apache:每个进程消耗 40M内存,共要消耗掉30*40=1200M内存.
  • 22. 成本低 购买硬件负载均衡交换器需要十多万甚至几十万人民币。而Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可用于商业用途 BSD是一个给使用者很大自由的协议,可自由使用、修改,修改后的可作为开源或是专有软件再发布。
  • 23. Nginx安装
  • 24. 下载http://nginx.org/en/download.html
  • 25. 安装命令: Step 1: rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm Step 2: yum install nginx 会显示一大堆信息,问你ok不ok啊:Is this ok [y/N]: 输入y,屏幕滚了一会之后就安装完毕,最后提示“Complete!”就是安完了。 软件说明: 1 配置所在目录:/etc/nginx/ 2 PID目录:/var/run/nginx.pid 3 错误日志:/var/log/nginx/error.log Nginx常用命令: 1 启动:nginx 2 重启:killall -HUP nginx 3 测试配置:nginx –t 测试: 用命令”nginx”起动服务,在浏览器中输入”127.0.0.1”如果出现欢迎信息说明安装成功
  • 26. Nginx配置
  • 27. Nginx的主配置文件 Nginx的主配置文件为nginx.conf.此文件在nginx的安装目录下.如果你的nginx的安装目录是/usr/local/nginx,那么nginx.conf就在/usr/local/nginx/下nginx.conf文件结构 ………… events{ ……………….. } http{ ……………. server{ ……………….. } ………………. }
  • 28. Nginx的虚拟主机配置虚拟主机: 把一台运行在因特网上的服务器主机划分成多台“虚拟”的主机。每个虚拟主机都具有独立的域名和Internet服务器(WWW,FTP,EMAIL)功能。
  • 29. nginx.conf如何配置虚拟主机http{ server{ listen 80 default; server_name _*; access_log logs/access.log default; location /{ index index.html index.htm; root /data0/htdocs/htdocs/; }#location }#server }#http每段server{…}就是一个虚拟主机,如果要配置多个虚拟主机,只需配置多个server{…}段即可。
  • 30. 配置虚拟主机的分类基于配置IP的虚拟主机 基于配置域名的虚拟主机
  • 31. 基于配置IP的虚拟主机  多块物理网卡,每个网卡一个IP  一块物理网卡,绑定多个IP
  • 32. http{ #第一台虚拟主机 server{ listen 192.168.8.43 80; #监听的IP和端口 server_name 192.168.8.43; #主机名称 access_log logs/access_log combined; #访问日志存放路径 location /{ index index.html index.htm; #默认首页文件 root /data0/htdocs/server1; #html文件存放路径 } } #第二台虚拟主机 server{ listen 192.168.8.44 80; #监听的IP和端口 server_name 192.168.8.44; #主机名称 access_log logs/access_log combined; #访问日志存放路径 location /{ index index.html index.htm; #默认首页文件 root /data0/htdocs/server2; #html文件存放路径 } } }注:listen可以不写IP只写端口,意思是监听本机的所有80端口
  • 33. 基于配置域名的虚拟主机 我们将以示例的形式说明这个问题。在以下的示例中将配置两台虚拟机,第一台虚拟机处理sub.mygogo.com访问请求,第二台虚拟机处理www.mygogo.com 、mygogo.com 及除了sub.mygogo.com之外的所有*.mygogo.com访问请求.代码如下
  • 34. http{ #第一台虚拟主机 server{ listen 80; #监听的端口 server_name sub.mygogo.com; #主机名 access_log logs/sub_mygogo_com.log combined; #日志存放路径 location /{ index index.html index.html; #默认首页文件 root /data0/htdocs/sub.mygogo.com; #工程存放目录 } } #第二台虚拟主机 server{ listen 80; #监听的端口 server_name www.mygogo.com mygogo.com *.mygogo.com; #主机名 access_log logs/www_mygogo_com.log combined; #日志存放路径 location /{ index index.html index.html; #默认首页文件 root /data0/htdocs/mygogo.com; #工程存放目录 } } }
  • 35. Nginx日志的配置Nginx与日志有关的指令主要有两个 1、log_format 设置日志格式 2、access_log 日志存放目录
  • 36. log_format语法: log_format name format [format…] 说明: name:日志格式的名称,就如key_value中的key format:定义日志的格式 log_format有个默认格式”combined” Log_format combined ‘$remote_addr - $remote_user [$time_local]’ ‘”$request” $status $body_bytes_sent’ ‘”$http_referer” “$http_user_agent”’;
  • 37. log_format变量说明$remote_addr:ip地址 $remote_user:远程用户名称 $time_local:访问的时间和时区 $request:请求的url和http协议 $status:请求的状态(200、404) $body_bytes_send:发送到客户端文件的主体内家大小 $http_referer:从哪个页面链接访问过来的 $http_user_agent:浏览器相关信息
  • 38. access_log语法: access_log path [format [buffer=size|off]] 说明: path:日志存放目录 format:使用log_format定义的日志格式名称 buffer=size:内存设置的缓冲区大小 off:是否记录日志
  • 39. Nginx压缩输出配置 Nginx使用gzip压缩技术,这种技术可以压缩文件至原来的30%甚至更小。IE、FireFox、Opera、Chrome等大多浏览器都支持解析gzip过的页面. Gzip指令用于http{…}之间 如下 http{ … gzip on; gzip_min_length 1k; gzip_buffer 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;#accpet_encoding gzip … }
  • 40. 浏览器缓存可使用expires指令实现 语法:expires [time|epoch|max|off] 默认值:expires off 作用域:http 、server、 location 用途:控制http应答中expires和cache-control的Header头信息 说明: time:正负值 epoch:1970-1-1 00:00:001 max:2037-12-31 23:59:59 off:默认不缓存location ~ .*\.(gif|jpg|jpeg|png|swf)${ expires 30d; } Location ~ .*\.(js|css)?${ expires 1h; }为什么使用浏览器缓存? 浏览器缓存是为了加速浏览,对最近请求过的文档进行缓存,以便再此做相同请求时,浏览器从本地磁盘读取文档,加速阅览、节省约网络资源Nginx浏览器本地缓存配置
  • 41. Nginx HTTP负载均衡的配置
  • 42. Nginx负载均衡示例 upstream backend{ server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/temp/backend3; } server{ location /{ proxy_pass http://backend; } } Upstream可对后端服务器进行健康检查。 指令默认值使用环境说明upstreamnonehttp设置一组代理服务器servernoneupstream指定后端服务的名称和参数,名称可以是域名、IP、端口号和Unix Socket
  • 43. Nginx的rewrite
  • 44. 为什么需要重定向?1.网站调整(如改变网页目录结构); 2.网页被移到一个新地址; 3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
  • 45. Rewrite主要的功能是实现URL的重写.Rewrite指令默认值使用环境说明Ifnone server、location分支判断rewritenoneserver 、location 、if重定向urisetNone server、location、if自定义变量returnNone server、location、if结束执行,返回状态给客户端breaknone server、location、if结束执行正则表达式可写在()内.每个()子集会有默认编号(1开始),通过$1~$9变量可以访问 If($http_user_agent ~ MISE){ rewrite ^(.*)$ /mise/$1 break;#[.*任意字符串] }示例 location /download/{ rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break; }
  • 46. 谢谢