手把手教你负载均衡-tomcat1.7+nginx+memcached
一.为什么开始写博文
最近郑州这边也兴起了,像北上广面试的时候需要问有技术博客,参与过开源的github项目吗,都30的人了,现在开始写我想也不晚,现在开始吧自己的学习都记录下来,之前很多东西都了解,但是缺少纪录,现在开始纪录吧。
二.为什么开始搞负载均衡
做了多年的企业内部的java开发一直只限于写代码,带项目也是针对内网来的一个tomcat来跑,用户量也很少,自己也不怎么跳槽(导致知识面比较窄),都是业务上比较熟悉,根据需求都可以完成开发。
公司的战略开始互联网项目,开始了解了负载均衡,开始恶补跟之前的同事进行交流,了解了nginx,通过了解发现很多的互联网网站都是实用的nginx,访问一些网站报的404都是nginx报的,才知道原来可以通过nginx下配置多个tomcat来进行负载一个tomcat的压力。好神奇。
公司的人员访问量并发越来越多,开始预见性的尝试使用,但是nginx和tomcat使用后发现一个问题后台无法登陆,nginx来回的跳转,真是日了狗了。了解了原来是3个tomcat之前没有进行session的共享。尝试自己解决一下,了解了memcached 可以实现sesson的共享。
三 .我的负载思路
nginx 负责跳转下面3个tomcat,3个tomcat用memcached负责进行session的共享,3个tomcat的内容完全一样,现在我吧操作步骤一步一步告诉大家希望多分享交流
关于centos下nginx 和 mysql,jdk安装我之前的博文有直接观看吧
1.三个空的tomcat
2.tomcat目录结构
3.加入memcached的lib的jar包(我用的mac本的UltraEdit)
3.1ultraEdit-文件--浏览
3.2 查看3个tomcat路径种lib是否有新加入的
3.3 查看3个tomcat的conf中的server.xml文件的修改
修改关闭端口 我的分别是
- tomcat1:18005
- tomcat2:28005
- tomcat3:38005
修改连接端口 我的分别是
- tomcat1:18080
- tomcat2:28080
- tomcat3:38080
修改长链接端口我的分别是
- tomcat1:18009
- tomcat2:28009
- tomcat3:38009
修改Engine 起对应的名称
- tomcat1 jvmRoute=“tomcat1”
- tomcat2 jvmRoute ="tomcat2"
- tomcat3 jvmRoute ="tomcat3"
修改Context中 docBase 是对应webapp里面的项目名称,3个tomcat中都加入这样的代码
<Context docBase="mfb" path="/mfb" reloadable="false" source="org.eclipse.jst.jee.server:mfb"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:127.0.0.1:11211" sticky="false" sessionBackupAsync="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/> </Context>
访问后http://192.168.1.201:18080/mfb/manage/admin.jsp
访问后http://192.168.1.201:28080/mfb/manage/admin.jsp
访问后http://192.168.1.201:38080/mfb/manage/admin.jsp
4.安装memcached
4.1查询命令
yum search memcached
4.2 安装命令
yum -y install memcached
4.3 命令帮助
memcached –h
注意:默认的端口是11211
4.3 加入service服务命令
chkconfig --level 2345 memcached on
以后就可以通过service memcached start|stop|restart等命令来启动、关闭、重启memcached服务。
5.nginx的配置
5.1进入nginx的conf路径
5.2创建gzip.conf写入
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/x-javascript;
5.3创建proxy.conf空文件(注意:Host $host:180;是根据我的nginx访问的端口来的因为我本机centos80端口已经占用了我改了下端口)
proxy_redirect off;
proxy_set_header Host $host:180;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
5.4修改nginx.conf
#Nginxwindow
#user niumd niumd;
#CPU2CPU
worker_processes 4;
#
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;
#pid
pid logs/nginx.pid;
events {
#IOlinuxepollFreeBSDkqueuewindow
#use epoll;
#
worker_connections 2048;
}
http {
include mime.types;
include proxy.conf;
default_type application/octet-stream;
#
#log_format main '$remote_addr - $remote_user [$time_local] $request '
# '"$status" $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log off;
access_log logs/access.log;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 75 20;
include gzip.conf;
upstream localhost {
#iptomcatsession
#ip
#ip_hash;
server localhost:18080;
server localhost:28080;
server localhost:38080;
}
server {
listen 180;
server_name localhost;
location / {
proxy_connect_timeout 3;
proxy_send_timeout 30;
proxy_read_timeout 30;
proxy_pass http://localhost;
}
}
}
5.5 启动试试
启动:
./nginx
关闭:
./nginx -s stop
三 .大功告成
1.启动nginx
2.启动mencached
3启动tomcat
关于tomcat的配置 和 nginx的配置附件可以下载