逐步把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不太熟悉的能够參考例如以下两篇文章大体了解下:初识NginxNginx反向代理配置。终于的执行效果例如以下:

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;

}

时间: 2024-10-18 02:59:38

逐步把Nginx及Redis引入项目组之负载均衡技术调研初版总结的相关文章

nginx实现反向代理、负载均衡-技术流ken

1.简介 本篇博文是<nginx实现动态/静态文件缓存-技术流ken>的二部曲.将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例. 反向代理--"反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器." 负载均衡--"网络专用术语,负载均衡建立在现有网络结构之

Nginx + Memcached 实现Session共享的负载均衡

session共享 我们在做站点的试试,通常需要保存用户的一些基本信息,比如登录就会用到Session:当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次.所以要实现session共享. 方法 1.ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题 优点:不需要采用任何处理: 缺

用Nginx搭建IIS集群实现负载均衡

长话短说,我们用Nginx来搭建一个简单的集群,实现Web应用的负载均衡,架构图如下: 两台Web服务器,一台静态资源服务器,因为是演示,我们以网站形式部署在本机IIS中 一台Nginx代理服务器,安装到本机的Linux虚拟机中,参考 CentOS下Nginx安装与配置 网站部署 新建三个文件夹,用于网站部署 在IIS中新建三个站点,分别指向以上三个目录,两台WEB端口是9527,9528,静态资源站点端口9529 新建两个HTML网页 index.html,内容分别是 This is loca

实战nginx前端反代mogfilefs及负载均衡

实战nginx前端反代mogfilefs及负载均衡 =============================================================================== 实验描述: 使用Nginx代理请求至tackers,实现通过键就可以访问到文件: 在配置nginx做反代将用户的请求调度至后端的MogileFS,此实验依赖于nginx-mogilefs-module模块,需在编译时加上此模块. 实验环境: 再准备一台CentOS 7的虚拟主机,来作为前

Nginx反向代理、缓存、负载均衡服务器构建

代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器接受来

nginx+tomcat实现反向代理的负载均衡

nginx+tomcat实现反向代理的负载均衡 安装java环境 server12: [[email protected] ~]# sh jdk-6u32-linux-x64.bin [[email protected] ~]# mv jdk1.6.0_32/ /usr/local/ [[email protected] ~]# cd /usr/local/ [[email protected] local]# mv jdk1.6.0_32/ java [[email protected] lo

使用Nginx+IIS的部署方案实现负载均衡

使用Nginx+IIS的部署方案实现负载均衡 这段时间一直在研究负载均衡问题,用家用电脑搭建了个Nginx+IIS的负载均衡部署,算是个入门级别的说明吧,因为是测试简化版本的部署方案搭建,所以使用的是测试业务.在文章初期我先明确一下问题: 1.负载均衡是什么? 2.为什么使用负载均衡? 3.处理负载均衡还可以有别的优化方案吗? 4.什么时候必须用负载均衡? 下面我依次回答这些问题: 问题1.负载均衡是什么? 百度百科给负载均衡的定义是,负载均衡是建立在现有网络结构之上,它提供了一种廉价有效透明的

使用nginx sticky实现基于cookie的负载均衡

在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端是CDN,或者说一个局域网的客户同时访问服务器,导致出现服务器分配不均衡,以及不能保证每次访问都粘滞在同一台服务器.如果基于cookie会是一种什么情形,想想看, 每台电脑都会有不同的cookie,在保持长连接的同时还保证了服务器的压力均衡,nginx sticky值得推荐. 如果浏览器不支持coo

nginx作反向代理,实现负载均衡

nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下(不能让其去解析php,这里只作代理用)基本配置:(nginx.conf) #user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type ap