1个Nginx+2个tomcat+2个redis服务器(主从复制)实现反向代理,实现动静分离。

来源:互联网 发布:sql数据库备份 编辑:程序博客网 时间:2024/06/05 10:30

网上有不少这方面的教程,但是那毕竟是别人的东西,还是自己写一写,思路更加清晰一些。

看标题,很明显,今天我不是要写什么代码来实现什么功能,而是配置程序运行环境,使得程序更高效。

高效在哪里?

我们知道,用户发出请求到服务器上,要经过tomcat处理,当然动态的请求当然要经过tomcat处理,然而一些静态的请求(例如图片,样式,js文件,等等)就没必要来麻烦tomcat了把,据悉tomcat能最大接受500个并发量,而nginx对于静态并发能接受10000个。什么概念?20倍!!!!

实现的原理

客户端发出请求,nginx开始检测是否是静态资源的请求,如果是直接处理即可,如果不是转发给后面的tomcat服务器进行处理,返回结果就行了,当然结合Freemaker框架可以更好的处理静态化。

需要的材料:1.nginx软件  64位2.tomcat7软件 64位3.java jdk1.7 64位4.redis_windows软件  64位5.一个可执行的简单的web项目6.64位的操作系统

nginx软件 链接:http://pan.baidu.com/s/1hqnU54C 密码:xtzt
tomcat7软件 链接:http://pan.baidu.com/s/1hqDCYiS 密码:cvd8
redis_windows软件 链接:http://pan.baidu.com/s/1ntxTHP3 密码:zj7d
一个可执行的简单的web项目 链接:http://pan.baidu.com/s/1ntzV9J7 密码:nfus
java jdk 1.7 64位自行下载配置环境即可


接下来就是无尽的配置!!!!

1.先配置nginx
下载的nginx解压即可,请保障计算机80端口未被占用!!,如果被占用需要配置其它端口.
在conf目录下找到 nginx.conf配置文件

listen 80;//如果被占用 配置成其它未被占用的端口即可

用下面的配置内容,替换nginx.conf全部内容即可

#Nginx 请求处理进程数量, 一般设定为CPU 数量的倍数worker_processes 2;events {    #每个进程最大连接数( 最大连接=连接数x 进程数)    worker_connections 2048;}http {    #文件扩展名与文件类型映射表( 包含mime.types 配置文件)    include mime.types;    #默认文件类型    default_type application/octet-stream;    #设定请求缓冲    client_header_buffer_size 1k;    large_client_header_buffers 4 4k;    #打开发送文件( 可下载)    sendfile on;    keepalive_timeout 65;    #打开gzip 压缩    gzip on;    #客户端上传文件大小控制    client_max_body_size 8m;    #负载均衡,weight指权重    upstream backend_tomcats {        server 127.0.0.1:8070 max_fails=3 weight=1 fail_timeout=60s;        server 127.0.0.1:8090 max_fails=3 weight=1 fail_timeout=60s;    }#虚拟主机localhost,如果有域名server_name就写域名server {    listen 80;    server_name localhost;    charset utf-8;    #动态内容交由tomcat 处理    location / {        proxy_pass http://backend_tomcats;        proxy_set_header HOST $host;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    }    #配置Nginx 动静分离    location ~* \.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {        #静态内容存放的位置        root K:/www;        #expires 定义用户浏览器缓存的时间为3 天, 如果静态页面不常更新,        #可以设置更长, 这样可以节省带宽和缓解服务器的压力。        expires 3d;        #配置不带www跳转到带www的域名        if ($http_host !~ "^www.xxx.com$") {                       rewrite  ^(.*)    http://www.xxx.com$1 permanent;                 }    }}}

到此 nginx配置就结束了,然后就打开命令行窗口(如果你不知道什么是命令行窗口,就不用继续看了)
打开命令行窗口打开nginx所在的目录使用下面的命令运行nginx

start nginx.exe

打开计算机进程窗口,能看到 3个nginx.exe进程就证明配置正确了。
这里写图片描述


2.配置redis服务器(用来共享两个tomcat的session会话信息)
解压redis软件即可,看到如下目录
这里写图片描述

打开命令行窗口cd 到安装目录 使用如下命令启动redis即可。

redis-server.exe redis.conf 

如果是redis高版本(可直接执行redis-server.exe来启动)
看到如下图显示的内容,表示配置成功
这里写图片描述


配置redis的主从同步机制

复制一下redis

将从redis的配置文件修改。
将# slaveof 《masterip》 《masterport》改为slaveof 127.0.0.1 6379(从机没有写入操作权限),保存退出。

可以用以下操作:检查主从配置是否生效

#启动master服务器,即启动6379端口redis服务器,操作如下:C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64C:\Users\lenovo>d:D:\dev\redis-2.4.5-win64>redis-server.exe redis.conf#启动slave服务器,即启动6380端口redis服务器,操作如下:C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64C:\Users\lenovo>d:D:\dev\redis-2.4.5-win64>redis-server.exe redis6380.conf#启动master客户器,操作如下:C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64C:\Users\lenovo>d:D:\dev\redis-2.4.5-win64>redis-cli.exe -h 127.0.0.1 -p 6379redis 127.0.0.1:6379>#启动slave客户器,操作如下:C:\Users\lenovo>cd D:\dev\redis-2.4.5-win64C:\Users\lenovo>d:D:\dev\redis-2.4.5-win64>redis-cli.exe -h 127.0.0.1 -p 6380redis 127.0.0.1:6379>#清空Master当前数据库中的所有Keys。redis 127.0.0.1:6379> flushdbOKredis 127.0.0.1:6379>#清空slave当前数据库中的所有Keys。redis 127.0.0.1:6380> flushdbOKredis 127.0.0.1:6380>#在Master中创建新的Keys作为测试数据。redis 127.0.0.1:6379> set mykey helloOKredis 127.0.0.1:6379> set mykey2 worldOK#查看Master中存在哪些Keys。redis 127.0.0.1:6379> keys *1) "mykey"2) "mykey2"#在Slave中查看所有的key。redis 127.0.0.1:6380> keys *1) "mykey"2) "mykey2"#在Master中删除其中一个测试Key,并查看删除后的结果。redis 127.0.0.1:6379> del mykey2(integer) 1redis 127.0.0.1:6379> keys *1) "mykey"#在Slave中查看是否mykey2也已经在Slave中被删除。redis 127.0.0.1:6380> keys *1) "mykey"

这里写图片描述


3.配置2个tomcat

打开server.xml配置
- 修改 tomcat自身命令执行端口+访问端口+https访问端口.要保证2个tomcat的3中端口不能重复(即不能被占用)

配置 tomcat自身命令执行

Server port=”9005” shutdown=”SHUTDOWN”

配置请求端口

Connector port=”8090” protocol=”HTTP/1.1”
connectionTimeout=”20000”
redirectPort=”8443” />

https访问端口
Connector port=”9009” protocol=”AJP/1.3” redirectPort=”8443” /

  • 添加3个jar包到lib目录下。tomcat整合redis需要的jar包
    commons-pool2-2.4.2.jar
    jedis-2.7.3.jar
    tomcat-redis-session-manager-1.2-tomcat-7.jar。

jar包下载 链接:http://pan.baidu.com/s/1eQv0ifo 密码:ol73

配置content.xml文件,告诉tomcat,redis共享会话在哪个服务器上。

<Context>    <WatchedResource>WEB-INF/web.xml</WatchedResource>        <Manager pathname="" />        <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />        <Manager className="com.radiadesign.catalina.session.RedisSessionManager"                    host="localhost" port="6379" database="0" maxInactiveInterval="60"/></Context>

到此分别配置2个tomcat即可,使用命令行命令cd到tomcat bin所在目录输入如下代码运行tomcat即可

startup.bat

看到下图表示成功
这里写图片描述


到此,全部配置结束,将项目war分别部署到2个tomcat的wabapps目录下面,直接用http://localhost/访问即可,如果能访问到tomcat默认页面。

那么恭喜你,配置成功了

如何有问题,请留言交流。

0 0
原创粉丝点击