逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结
2017-04-03 21:49
295 查看
本篇以一个Nginx服务、两个Tomcat服务、一个Redis搭建一个负载均衡环境,因为就一台电脑暂以随机分配客户端请求策略开展,具体工作中推荐以IP地址来实现客户端请求的动态负载策略,省局IP段发过来的请求单独一个Tomcat应对,其余所有分局IP段发来的请求通过有另外一个单独的Tomcat应付。
素材1:一个Redis节点,用来存储Seesion(跨进程共享)及缓存静态常量;
素材2:两个同时运行的Tomcat服务,每个上面运行着一个简单的小程序;
素材3:一个Nginx,通过随机分配的策略分流客户端发来的请求。
下一步的技术调研就是把session存储进Redis,希望下一篇总结会在下周末前处理完成。
![](https://img-blog.csdn.net/20170403213906603?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5kZXJzbHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Nginx的主要配置项为:
![](https://img-blog.csdn.net/20170403213847384?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5kZXJzbHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.159.10 weight=10;
server 192.168.159.11 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream resinserver{
ip_hash;
server 192.168.159.10:8080;
server 192.168.159.11:8080;
}
素材1:一个Redis节点,用来存储Seesion(跨进程共享)及缓存静态常量;
素材2:两个同时运行的Tomcat服务,每个上面运行着一个简单的小程序;
素材3:一个Nginx,通过随机分配的策略分流客户端发来的请求。
第一步:Redis环境搭建及测试数据准备
Windows环境下主要是找到相应的版本,目前官网是不支持Windows的,可以从微软维护的版本中下载地址为:下载Redis,如果喜欢用可视化的查看工具可以下载RedisDesktopManager工具下载地址为:下载RedisDesktopManager。由于配置Redis及RedisDesktopManager的使用比较简单,这个不花篇幅再细述。第二步:准备一个小java程序发布到两个Tomcat上
同一台服务器(电脑)部署两套及以上的Tomcat的方法参见:同一台服务器(电脑)运行多个Tomcat的设置方法。本个示例程序只是仅仅在Redis中存储了一个字符串变量,测试程序主要代码如下:@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } public String getValueByRedisKey(String keyName) { //创建一个Jedis的连接 Jedis jedis = new Jedis("127.0.0.1", 6379); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 //从redis中取值 String result = jedis.get(keyName); //执行redis命令 jedis.set(keyName, "I am a programmer at:"+df.format(new Date())); //关闭连接 jedis.close(); return result; } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String valueInCache= getValueByRedisKey("keylu"); // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Redis测试页面A"; String docType = "<!DOCTYPE html> \n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>RedisItemKey: keylu</b>" + "\n" + " <li><b>Value: </b>" + valueInCache + "\n" + "</ul>\n" + "</body></html>"); }
下一步的技术调研就是把session存储进Redis,希望下一篇总结会在下周末前处理完成。
第三步:构建Nginx
对Nginx不太熟悉的可以参考如下两篇文章大体了解下:初识Nginx及Nginx反向代理配置。最终的运行效果如下:Nginx的主要配置项为:
补充1:Nginx常用指令:
- D:\tools\nginx-1.3.2>tasklist /fi "imagename eq nginx.exe" 查看任务管理器内nginx.exe的运行信息 -”start nginx” start - "nginx -s stop" quick exit - "nginx -s quit" graceful quit - "nginx -s reload" changing configuration, starting a new worker, quitting an old worker gracefully -"nginx -s reopen" reopening log files
补充2:Nginx负载均衡的几种类型
nginx中的upstream支持下面几种方式:轮询(默认,按照时间顺序对所有服务器一个一个的访问,如果有服务器宕机,会自动剔除)、weight(服务器的方位几率和weight成正比,这个可以在服务器配置不均的时候进行配置)、ip_hash(对每个请求的ip进行hash计算,并按照一定的规则分配对应的服务器)、fair(按照每台服务器的响应时间(rt)来分配请求,rt晓得优先分配)、url_hash(按照访问url的hash值来分配请求)1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.159.10 weight=10;
server 192.168.159.11 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream resinserver{
ip_hash;
server 192.168.159.10:8080;
server 192.168.159.11:8080;
}
相关文章推荐
- 逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结
- 负载均衡技术之7LVS、Nginx和HAProxy对比总结
- nginx+play framework +mongoDB+redis +mysql+LBS实战总结
- Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结
- 总结-svn,redis,html,nginx
- Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结
- nginx+play framework +mongoDB+redis +mysql+LBS实战总结
- Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结
- nginx 配置命令总结
- 字符编码概念调研(转载,网络资源总结), GB2312, GBK, GBK2k, BIG5, GB18030, GB18000, Unicode, UTF, ANSI
- 关于页面逐步呈现的总结
- nginx学习总结四(nginx+php-cgi)
- nginx学习总结五(nginx反向代理)
- 软件项目需求调研总结
- 软件项目需求调研总结
- asp.net 页面逐步呈现的方法总结
- Nginx 使用总结
- nginx学习总结三(nginx的基本配置)