图片 2

tomcat负载均衡缓存服务器集群

1、准备软件(存放在目录/home/sofeware下)

根据公司的需求,以及以后的访问量,决定用nginx做负载均衡服务器和cache缓存服务器,后端用2台tomcat提供web服务,用户信息数据用oracle来存储,音频文件用一台单独的应用服务器来存储。下面是nginx和tomcat的配置信息,关于oracle的安装和配置请参考本博客的centos+oracle10g的安装文件说明来配置。
  1、环境描述        nginx和tomcat1服务器地址:192.168.81.131       
tomcat2服务器地址:192.168.81.128       
tomcat3服务器地址:192.168.81.132  
2、Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘
上,所以它可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx
Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx
模块,可以清除指定URL的缓存。
 
Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi_cache相关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。两者的功能基本上一样。
  最新的Nginx
,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块用于清除指定
URL的缓存),已经可以完全取代Squid。我们已经在生产环境使用了 Nginx 的
proxy_cache 缓存功能超过两个月,十分稳定,速度不逊于 Squid。
 
在功能上,Nginx已经具备Squid所拥有的Web缓存加速功能、清除指定URL缓存的功能。而在性能上,Nginx对多核CPU的利用,胜过Squid不少。另外,在反向代理、负载均衡、健康检查、后端服务器故障转移、
Rewrite重写、易用性上,Nginx也比Squid强大得多。这使得一台Nginx可以同时作为“负载均衡服务器”与“Web缓存服务器”来使用。
  (1)、Nginx 负载均衡与缓存服务器在 Linux 下的编译安装: ulimit -SHn
65535 echo “ulimit -SHn 65535” >>/etc/rc.local
##使下次重启配置生效
wget
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../ wget
tar zxvf ngx_cache_purge-1.0.tar.gz wget

tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32/
./configure –user=www –group=www –add-module=../ngx_cache_purge-1.0
–prefix=/usr/local/webserver/nginx –with-http_stub_status_module
–with-http_ssl_module
make && make install
cd ../   (2)、nginx完整的配置文件如下:   user  www www;
worker_processes 10; error_log 
/usr/local/webserver/nginx/logs/nginx_error.log  crit; pid       
/usr/local/webserver/nginx/nginx.pid; #最大文件描述符
worker_rlimit_nofile 51200; events
{
      use epoll;       worker_connections 51200;
} http
{
      include       mime.types;
      default_type  application/octet-stream;       keepalive_timeout
60;       tcp_nodelay on;
      sendfile on;       server_names_hash_bucket_size 128;
      client_header_buffer_size 32k;
      large_client_header_buffers 4 32k;
      client_max_body_size 300m;
      gzip on;
      gzip_min_length  1k;
      gzip_buffers     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;       proxy_connect_timeout    5;
      proxy_read_timeout       60;
      proxy_send_timeout       5;
      proxy_buffer_size        16k;
      proxy_buffers            4 64k;
      proxy_busy_buffers_size 128k;
      proxy_temp_file_write_size 128k;       upstream tomcat
      {
      server  192.168.81.131:8080;
      server  192.168.81.128:8080;       server  192.168.81.132:8080;
      }

Nginx 特性

agentzh-headers-more-nginx-module-v0.15rc2-0-g2c629de.tar.gz
 #支持隐藏头部信息  (不是必须,觉得需要就安装吧)

     
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
      proxy_temp_path /data0/proxy_temp_dir;
     
#设置Web缓存区名称为cache_one,内存缓存空间大小为50MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为10GB。
      proxy_cache_path /data0/proxy_cache_dir levels=1:2
keys_zone=cache_one:50m inactive=1d max_size=10g; server
     {
         listen       80;
         server_name  tomcat.hxqm.com;  
         #自动补全”/”
         if (-d $request_filename)
        {
         rewrite ^/(.*)([^/])$ last;
         }         #实现网页动静态分离
         location /
        {           root /data0/htdocs/tomcat;
          index index.html index.htm;                          if (!-f
$request_filename)
                        {
                         rewrite ^/([a-zA-Z]+).html  /$1.jsp last;
                         proxy_pass ;
                         break;
                         }
           }       
 #对网站的图片、Flash、JavaScript、CSS、静态HTML、进行web缓存
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html|shtml)$
       {
       #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到
upstream负载均衡池中的另一台服务器,实现故障转移。
       proxy_next_upstream http_502 http_504 error timeout
invalid_header;
       proxy_cache cache_one;
       #对不同的HTTP状态码设置不同的缓存时间
       proxy_cache_valid 200 10m;
       proxy_cache_valid 304 1m;
       proxy_cache_valid 301 302 1h;
       proxy_cache_valid any 1m;
     
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存 
内容到二级缓存目录内
      proxy_cache_key $host$uri$is_args$args;
      proxy_set_header Host  $host;
      proxy_set_header X-Forwarded-For  $remote_addr;
      proxy_pass ;  
     } 
 #用于清除缓存,假设一个URL为
 location ~ /purge(/.*)
 {
 allow 127.0.0.1;
 allow 192.168.81.0/24;
 deny  all;
 proxy_cache_purge cache_one $host$1$is_args$args;
 }
  #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
 location ~ .*\.(php|jsp|cgi)?$
 {
 proxy_set_header Host $host;
 proxy_set_header X-Forwarded-For $remote_addr;
 proxy_pass ;
 }  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
 {
 expires      30d;
 }  location ~ .*\.(js|css)?$
 {
 expires      1h;
 }    log_format  tomcatlogs  ‘$remote_addr – $remote_user
[$time_local] “$request” ‘
  ‘$status $body_bytes_sent “$http_referer” ‘
  ‘”$http_user_agent” $http_x_forwarded_for’;
 access_log  /data1/logs/tomcatlogs.log  tomcatlogs;
 
       } }   (3)、启动nginx服务,先测试nginx配置文件是否正确,用        
/usr/local/webserver/nginx/sbin/nginx -t 测试       
如果提示如下就说明配置文件没有问题可以启动nginx服务器了:     
[[email protected]
local]# /usr/local/webserver/nginx/sbin/nginx -t
the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax
is ok
configuration file /usr/local/webserver/nginx/conf/nginx.conf test is
successful       
如果启动报错,你可以根据报错其实的行数来查看你的配置文件  
3、tomcat的配置       
把jdk文件和tomcat文件放在/usr/local/src目录下(各位习惯,可以自己定义)  
(1)、安装jdk(本人装的jdk用的是jdk-6u17-linux-i586.bin)          cd
/usr/local/src;chmod+x jdk-6u17-linux-i586.bin;./jdk-6u17-linux-i586.bin
        
在安装过程中敲几下空格,然后输入”yes”,然后中途中再按回车jdk就装好了。
        做软连接:          ln -s /usr/local/jdk1.6.0_17/
/usr/local/jdk       (2)、java环境变量的配置          vi
/etc/profile,把以下内容写到文件的尾部                  
JAVA_HOME=”/usr/local/jdk”
         CLASS_PATH=”$JAVA_HOME/lib:$JAVA_HOME/jre/lib”
         PATH=”.:$PATH:$JAVA_HOME/bin”
         CATALINA_HOME=”/usr/local/tomcat”
         export JAVA_HOME CATALINA_HOME            然后保存退出,执行
source /etc/profile
使刚才配置的环境变量生效或者也可以重启机器,自己选择适合自己的方式。  
(3)、tomcat的配置            编辑tomcat的配置文件server.xml         
在Hosts文件里面加上如下字段:          <Context path=””
docBase=”/data0/htdocs/tomcat/ROOT” debug=”0″ reloadable=”true” />
         
解释:tomcat默认回去”appBase”目录去查找要访问的文件,如果没有找到就去”docBase”目录去寻找。这个这段也可以不加,自己随意。
         这是一台tomcat服务器的配置信息,其他两台一样,此处就不多说了。
  (4)、启动tomcat服务            /usr/local/tomcat/bin/startup.sh  
4、在本地的hosts文件里添加一条记录:           192.168.81.131
tomcat.hxqm.com  
5、测试访问
  6、清除指定的URL缓存测试示例:  
图片 1  
如果你访问的地址出现这样的提示说明你的nginx可以清除指定的url,如果你访问说出现404页面错误和其他提示,原因可能是你们捕捉到缓存,请查看你的nginx配置文件。

Nginx
性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
1、相比 Apache,用 Nginx 作为 Web
服务器:使用资源更少,支持更多并发连接,效率更高。
2、作为负载均衡服务器:Nginx 既可在内部直接支持 Rails 和
PHP,也可支持作为 HTTP 代理服务器对外进行服务。Nginx 用 C 编写而成,
不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
3、作为邮件代理服务器:Nginx
同时也是一款非常优秀的邮件代理服务器(最早开发这个产品的目的之一,是作为邮件代理服务器)。

nginx-upstream-jvm-route-0.1.tar.gz   #nginx会话记录的必须模块  
(用于tomcat集群,单tomcat就直接忽略相关操作)

4、反向代理可以根据url将请求转向于不同用途的集群,比如图片请求,转向图片服务器集群;视频请求,转身视频服务器集群。

pcre-8.10.tar.gz    #包括 perl 兼容的正规表达式库 (shell>rpm
-qa|grep pcre 可以检查系统是否已存在
)

nginx是一款轻量级的web服务器/反向代理服务器/电子邮件代理服务器,安装非常简单,配置文件也很简洁(还支持
perl 语法)。Nginx
支持平滑加载新配置,还能够在不间断服务的情况下进行软件版本升级。

nginx-1.0.4.tar.gz

Apache 特性
1、Apache 是 LAMP 架构最核心的 Web Server,开源、稳定、模块丰富是 Apache
的优势。但 Apache 的缺点是有些臃肿,内存和 CPU
开销大,性能上有损耗,不如一些轻量级的 Web
服务器(譬如:Nginx、Tengine等)高效,轻量级的 Web
服务器对于静态文件的响应能力来说远高于 Apache 服务器。

apache-tomcat-7.0.11.tar.gz
 (安装相对简单、资料也比较多,这里不演示了)

2、Apache 做为 Web Server 是负载 PHP
的最佳选择,如果流量很大的话,可以采用 Nginx 来负载非 PHP 的 Web
请求。Nginx 是一个高性能的 HTTP 和反向代理服务器,Nginx
以其稳定、丰富功能集、示例配置文件和低系统资源的消耗而闻名。Nginx
现能支持 PHP 和 FastCGI,也支持负载均衡和容错,可和 Apache
配合使用,是轻量级的 HTTP 服务器的首选。

2、 编译安装

3、Web 服务器缓存也有多种方案,Apache
提供了自己的缓存模块,也可以使用外加的 Squid
模块进行缓存,这两种方式均可有效提高 Apache 的访问响应能力。Squid Cache
是一个 Web 缓存服务器,支持高效缓存,可作为网页服务器的前置 cache
服务器缓存相关请求以提高 Web 服务器速度。把 Squid 放在 Apache
的前端来缓存 Web 服务器生成动态内容,而 Web
应用程序只需要适当地设置页面实效时间即可。如访问量巨大,则可考虑使用
memcache 作为分布式缓存。

shell>cd /home/sofeware
shell>tar zxf pcre-8.10.tar.gz &&cd pcre-8.10
shell>./configure && make && make installshell>cd ..
shell>tar zxf agentzh-headers-more-nginx-module-v0.15rc2-0-g2c629de.tar.gz
shell>tar zxf nginx-upstream-jvm-route-0.1.tar.gz
shell>tar zxf nginx-1.0.4.tar.gz
shell>cd nginx-1.0.4
shell>patch -p0 < /home/sofeware/nginx_upstream_jvm_route/jvm_route.patch
shell>./configure  --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
      --add-module=/home/sofeware/nginx_upstream_jvm_route/  
      --add-module=/home/sofeware/agentzh-headers-more-nginx-module-2c629de/
      && make && make install

4、PHP 的加速可使用 eAccelerator 加速器,eAccelerator
是一个自由开放源码的 PHP 加速器。它会优化动态内容缓存,提高 PHP
脚本缓存性能,使 PHP
脚本在编译状态下,对服务器的开销几乎完全消除。它还可对脚本起优化作用,以加快其执行效率。
使 PHP 程序代码执效率可提高 1-10 倍。

3、配置 (默认80端口)

图片 2

配置文件:/usr/local/nginx/conf/nginx.conf

nginx优点:

//运行nginx所在的用户名和用户组
user nginx nginx;
worker_processes  1;
//全局错误日志及PID文件
error_log   /usr/local/nginx/logs/error.log;
pid         /usr/local/nginx/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    //全局访问日志
    access_log  /usr/local/nginx/logs/access.log;    
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r; 
        access_log  /usr/local/nginx/logs/host.access.log;
        location / {
            //网站根目录
            root   /var/www/test;
            //将index.jsp 加入到默认的访问首页地址
            index  index.html index.htm index.jsp; 
        }
        //所有jsp的页面均交由tomcat处理
        location ~ .*.jsp$ {
            index index.jsp;
            proxy_pass http://localhost:8080;
        }
        //设定访问静态文件直接读取不经过tomcat
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 30d;
        }
        location ~ .*\.(js|css)?$ {
            expires 1h;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  • 轻量级服务器,相比较apache占用的资源更加少。
  • 高并发。
  • 配置文件的语法等简单易懂
  • 社区活跃。
  • 支持epoll模型。使得nginx可以支持高并发。
  • 利用nginx可以对ip限速,可以限制连接数

4、测试配置

环境:

shell>/usr/local/nginx/sbin/nginx -t
//出现如下信息表示配置成功,否则检查配置文件
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully  

CentOS 6.8
2.6.32-642.15.1.el6.x86_64

5、启动、停止

软件:

shell>/usr/local/nginx/sbin/nginx  //启动
shell>/usr/local/nginx/sbin/nginx -s stop //停止

libiconv-1.14.tar.gz

6、添加新模块(非覆盖安装)

libmcrypt-2.5.8.tar.gz

NginxHttpRealIpModule
//有些网站使用这样的方式来搭建分布式缓存,若干台Squid放在前面提供缓存服务,内容从后面的
Nginx获取。不过如此一来,Nginx日志里看到的IP就是Squid的IP了,为了能让Nginx透明获取IP,可以使用
NginxHttpRealIpModule

mcrypt-2.6.8.tar.gz

ngx_cache_purge-1.3.tar.gz
 //通过该模块使得Nginx可以像squid使用PURGE指令手动清除指定URL的缓存页面

mhash-0.9.9.9.tar.gz

shell>/usr/local/nginx/sbin/nginx -s stop //关闭nginx服务
shell>tar zxf ngx_cache_purge-1.3.tar.gz
shell>cd ..
shell>tar zxf nginx-1.0.4.tar.gz
shell>cd nginx-1.0.4
shell>patch -p0 < /home/sofeware/nginx_upstream_jvm_route/jvm_route.patch
shell>./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module 
      --with-http_realip_module //新增模块
      --add-module=/home/sofeware/nginx_upstream_jvm_route/ 
      --add-module=/home/sofeware/agentzh-headers-more-nginx-module-2c629de/
      --add-module=/home/sofeware/ngx_cache_purge-1.3/  //新增模块
shell>make  //编译即可,无需make install
shell>mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak //备份执行文件 
shell>cp -r objs/nginx /usr/local/nginx/sbin/
shell>/usr/local/nginx/sbin/nginx -t  //测试是否通过
shell>rm -rf /usr/local/nginx/nginx.pid  //删除PID,具体文件路径按自己的配置的实际情况
shell>/usr/local/nginx/sbin/nginx //重启
shell>/usr/local/nginx/sbin/nginx -V //查看编译参数

mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz(二进制版)

图片 3

php-5.6.30.tar.gz

nginx-1.12.0.tar.gz

提示:在进入正题之前一定要先去了解下nginx的工作原理和常用场景。        

不要死记,多操作,多理解,自然就懂了。

看别人操作,不如自己操作。

要能清晰的了解同类产品的区别。

大纲:

  1. 安装nginx
  2. 启动nginx
  3. 配置虚拟主机
  4. 安装mysql二进制版
  5. 安装php
  6. 测试lnmp环境

nginx

1、安装nginx

wget http:``//nginx``.org``/download/nginx-1``.12.0.``tar``.gz

 

tar zxvf nginx-1.12.0.``tar``.gz

 

cd nginx-1.12.0/

 

yum ``install gcc gcc-c++ zilb.x86_64 zlib-devel.x86_64  pcre-devel.x86_64 pcre.x86_64

openssl.x86_64 openssl-devel.x86_64-y

 

useradd -M -s ``/sbin/nologin nginx

 

.``/configure --help

 

.``/configure --prefix=``/application/nginx1``.12.0 --user=nginx --group=nginx --with-pcre

--with-http_ssl_module --with-http_stub_status_module

 

echo $?

 

make

 

echo $?

 

make install

 

echo $?

 

ln -s ``/application/nginx1``.12.0/ ``/application/nginx

 

cd /application/nginx

 

nginx目录结构

conf

配置文件

html

默认站点

logs

日志文件

sbin

命令

总结:

1 选择软件一定不能选择最新的,否则出问题不容易解决,因为第一个吃螃蟹。
2 一定要自己创建用户,否则nginx会给默认用户。
3 编译的参数根据自己的实际情况出发。
4 编译、make、make install要养成echo $?的习惯防止出错。
5 做一个软链接优化路径。

2、启动nginx

/application/nginx/sbin/nginx -t

 

/application/nginx/sbin/nginx

 

lsof -i :80

 

curl localhost

总结:

  • nginx的检查语法操作是一样的,只是命令名字换了
  • nginx启动后面不需要任何参数
  • 本地做个访问测试如果能成功则说明网站已经在工作了,在如果外网访问不进来就是其他问题了,比如防火墙iptables、selinux等的问题

3、配置虚拟主机

如果熟悉了Apache的虚拟主机那么Nginx的虚拟主机也很容易理解,而且配置还比Apache简单很多。

虚拟主机:

  • 基于域名的虚拟主机
  • 基于IP的虚拟主机
  • 基于端口的虚拟主机

mkdir /application/nginx/conf/extra -p

##把我们的虚拟主机文件放在这个扩展目录中,可以在管理网站的时候更加方便

 

vim ``/application/nginx/conf/nginx``.conf

##将主配置文件修改为以下内容

worker_processes  1;

events {

``worker_connections  1024;

}

http {

``include       mime.types;

``default_type  application``/octet-stream``;

``sendfile        on;

``keepalive_timeout  65;

``include     extra``/blog``.conf;

``include     extra``/easy``.conf;

``include     extra``/bad``.conf;

}

 

 

vim ``/application/nginx/conf/extra/blog``.conf

##将虚拟主机blog配置文件配置为以下内容,不存在则创建

``server {

``listen       80;

``server_name  www.blog.linuxidc.com;

``location / {

``root   html``/blog``;

``index  index.html index.htm;

``}

}

 

vim ``/application/nginx/conf/extra/easy``.conf

##将虚拟主机easy配置为以下内容,不存在则创建

``server {

``listen       80;

``server_name  www.easy.linuxidc.com;

``location / {

``root   html``/easy``;

``index  index.html index.htm;

``}

}

 

vim ``/application/nginx/conf/extra/bad``.conf

##将虚拟主机bad配置文件修改为以下内容,不存在则创建

``server {

``listen       80;

``server_name  www.bad.linuxidc.com;

``location / {

``root   html``/bad``;

``index  index.html index.htm;

``}

}

 

cd /application/nginx/html/

 

for name ``in blog bad easy;``do mkdir $name; ``echo "$name.linuxidc.com" >

$name``/index``.html;

done

##利用for循环创建目录,并向index.html中写入内容

 

tree ./

``bad

│   └── index.html

├── blog

│   └── index.html

├── easy

│   └── index.html

 

 

vim ``/etc/hosts