负载均衡
将请求和数据均匀分摊到多个操作单元上执行
背景(需要Nginx的原因)
- 单台服务器资源和能力有限
- 高并发访问:大量的需要同时处理的访问请求
Nginx安装
- 安装依赖
- yum -y install gcc openssl-devel pcre-devel zlib-devel
- 解压压缩包
- tar -zxvf nginx-1.8.1.tar.gz
- 配置
- ./configure (-- prefix=安装路径)(一般指定的时候,默认/usr/soft/nginx)
- 编译并且安装
- 在解压好的Nginx目录下执行:make && make install
- nginx 命令
- 启动命令 :nginx_home/sbin/nginx
- nginx -s stop - 快速关机
- nginx -s quit - 优雅的关机
- nginx -s reload - 重新加载配置文件
- nginx -s reopen - 重新打开日志文件
Nginx配置
- 配置详解:
#进程数,建议设置和CPU个数一样或2倍 worker_processes 1; #日志级别 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; } }
- 负载均衡配置的几种方式:
- 轮询负载均衡 - 对应用程序服务器的请求以循环方式分发,0 1
- 加权负载均衡 1–10
- 最少连接数 - 将下一个请求分配给活动连接数最少的服务器
- ip-hash - 哈希函数用于确定下一个请求(基于客户端的IP地址)应该选择哪个服务器。
- 默认负载均衡:
http { upstream shsxt{ server node01; server node02; server node03; } server { listen 80; server_name localhost; location / { proxy_pass http://shsxt; } } }
- 加权负载均衡(weight取值1到10整数)
upstream shsxt { server srv1.example.com weight=3; server srv2.example.com; server srv3.example.com; }
- 最连接数加权
upstream shsxt { least_conn; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
- ip-hash负载平衡(之前的IP用的哪台服务器,之后连接还是用这台服务器)
upstream shsxt{ ip_hash; server srv1.example.com; server srv2.example.com; server srv3.example.com; }
- nginx 访问控制:allow代表允许,deny代表禁止
location / { deny 192.168.2.180; allow 192.168.78.0/24; #子网掩码是255.255.255.0 allow 10.1.1.0/16; #子网掩码是255.255.0.0 allow 192.168.1.0/32; #ipv6子网掩码 deny all; proxy_pass http://shsxt; }
- 可以修改tomcat /wabapps/
Nginx的session的一致性问题(memcached)
- 安装memcached
- yum -y install memcached
- 启动: memcached -d -m 128m -p 11211 -l 192.168.235.101 -u root -P /tmp/
(service memcached start试了下,貌似也可以) - web服务器连接memcached的jar包拷贝到tomcat的lib
- 配置tomcat的conf目录下的context.xml:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.235.101: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
- 修改index.jsp,取sessionid看一看
正、反向代理、
- 正向代理
举个栗子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。像我们经常通过vpn访问国外的网站,此时就是正向代理。
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
再比如下面的翻墙: - 反向代理
•反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打 10086 一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你
只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。
虚拟主机
就好比我们做的nginx负载均衡(在虚拟机上)