逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结
本篇以一个Nginx服务、两个Tomcat服务、一个Redis搭建一个负载均衡环境,由于就一台电脑暂以随机分配client请求策略开展,详细工作中推荐以IP地址来实现client请求的动态负载策略。省局IP段发过来的请求单独一个Tomcat应对,其余全部分局IP段发来的请求通过有另外一个单独的Tomcat应付。
素材1:一个Redis节点,用来存储Seesion(跨进程共享)及缓存静态常量。
素材2:两个同一时候执行的Tomcat服务,每一个上面执行着一个简单的小程序;
素材3:一个Nginx,通过随机分配的策略分流client发来的请求。
第一步:Redis环境搭建及測试数据准备
Windows环境下主要是找到相应的版本号,眼下官网是不支持Windows的。能够从微软维护的版本号中下载地址为:下载Redis,假设喜欢用可视化的查看工具能够下载RedisDesktopManager工具下载地址为:下载RedisDesktopManager。
由于配置Redis及RedisDesktopManager的使用比較简单,这个不花篇幅再细述。
第二步:准备一个小java程序公布到两个Tomcat上
同一台server(电脑)部署两套及以上的Tomcat的方法參见:同一台server(电脑)执行多个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反向代理配置。终于的执行效果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW5kZXJzbHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
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支持以下几种方式:轮询(默认,依照时间顺序对全部server一个一个的訪问,假设有server宕机,会自己主动剔除)、weight(server的方位几率和weight成正比,这个能够在server配置不均的时候进行配置)、ip_hash(对每一个请求的ip进行hash计算,并依照一定的规则分配相应的server)、fair(依照每台server的响应时间(rt)来分配请求,rt晓得优先分配)、url_hash(依照訪问url的hash值来分配请求)
1、轮询(默认)
每一个请求按时间顺序逐一分配到不同的后端server。假设后端serverdown掉,能自己主动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、weight
指定轮询几率。weight和訪问比率成正比。用于后端server性能不均的情况。
比如:
upstream bakend {
server 192.168.159.10 weight=10;
server 192.168.159.11 weight=10;
}
3、ip_hash
每一个请求按訪问ip的hash结果分配。这样每一个訪客固定訪问一个后端server。能够解决session的问题。
比如:
upstream resinserver{
ip_hash;
server 192.168.159.10:8080;
server 192.168.159.11:8080;
}
逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结的更多相关文章
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- Nginx + Memcached 实现Session共享的负载均衡
session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Se ...
- 用Nginx搭建IIS集群实现负载均衡
长话短说,我们用Nginx来搭建一个简单的集群,实现Web应用的负载均衡,架构图如下: 两台Web服务器,一台静态资源服务器,因为是演示,我们以网站形式部署在本机IIS中 一台Nginx代理服务器,安 ...
- nginx Win下实现简单的负载均衡(2)站点共享Session
快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...
- nginx Win下实现简单的负载均衡(1)nginx搭建部署
快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...
- Nginx代理与反向代理、负载均衡实
通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力:同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...
- Nginx代理与反向代理、负载均衡实践
通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力;同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...
- 在Linux上使用Nginx为Solr集群做负载均衡
在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...
- nginx作反向代理,实现负载均衡
nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...
随机推荐
- golang filepath.Walk遍历指定目录下的所有文件
package main import ( "fmt" "os" "path/filepath" ) func walkFunc(path ...
- BZOJ3091: 城市旅行(LCT,数学期望)
Description Input Output Sample Input 4 5 1 3 2 5 1 2 1 3 2 4 4 2 4 1 2 4 2 3 4 3 1 4 1 4 1 4 Sample ...
- 【MapReduce】经常使用计算模型具体解释
前一阵子參加炼数成金的MapReduce培训,培训中的作业样例比較有代表性,用于解释问题再好只是了. 有一本国外的有关MR的教材,比較有用.点此下载. 一.MapReduce应用场景 MR能解决什么问 ...
- 感谢党,软考过了。系统集成项目管理project师
人品爆发了,刚用干巴巴的日语做完2小时的设计说明,回到家一查,人品爆发了.软考竟然过了. 绝对是评卷老师给人品啊!真想请他吃顿饭. 系统集成项目管理project师 64 53 幸运飞过! 今天真是 ...
- Myeclipse的默认工作区间怎么恢复提示框?
好久一直使用默认工作空间.现在,回过头来想让那个提示框回来. 该如何做呢? 1.找到我们的myeclipse安装目录下的 2.false是关闭. 3.改成true 4.同时,新增新的工作区间和之前旧的 ...
- Python3的取余操作
https://blog.csdn.net/u014647208/article/details/53368244 取余代码: 输入以下代码: >>>10%2 >>> ...
- Android---- 获取当前应用的版本号和当前android系统的版本号
Android 应用程序获得版本号 我们可以在AndroidManifest.xml中设置程序的版本号等,如android:versionName="1.0",那如果想在代码中获取 ...
- Android实践 -- 设置系统日期时间和时区
设置系统日期时间和时区 设置系统的日期时间和时区,需要 系统权限和系统签名,android:sharedUserId="android.uid.system" 需要在manifes ...
- iOS开发- iOS7显示偏差(UITableView下移)解决的方法
之前碰到过一个问题. 就是利用storyboard拖动出来的控件, 在iOS7上跑老是莫名的下移. 比方这样(红色区域为多余的) 解决的方法: iOS7在Conttoller中新增了这个属性: aut ...
- (嵌入式开发)自己写bootloader之编写第一阶段
最简单的bootloader的编写步骤: 1. 初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH 2. 如果bootloader比较大,要把它重定位到SDRAM 3. 把内核 ...