逐步把 Nginx 及 Redis 引入项目组之负载均衡:本篇以一个 Nginx 服务、两个 Tomcat 服务、一个 Redis 搭建一个负载均衡环境,因为就一台电脑暂以随机分配客户端请求策略开展,具体工作中推荐以 IP 地址来实现客户端请求的动态负载策略。省局 IP 段发过来的请求单独一个 Tomcat 应对,其余所有分局 IP 段发来的请求通过有另外一个单独的 Tomcat 应付。素材 1:一个 Redis 节点,用来存储 Seesion(跨进程共享) 及缓存静态常量;素材 2:两个同时运行的 Tomcat 服务,每个上面运行着一个简单的小程序;素材 3:一个 Nginx,通过随机分配的策略分流客户端发来的请求。
第一步:Redis 环境搭建及测试数据准备
Windows 环境下主要是找到相应的版本,目前官网是不支持 Windows 的,可以从微软维护的版本中下载地址为:下载 Redis,如果喜欢用可视化的查看工具可以下载 RedisDesktopManager 工具下载地址为:RedisDesktopManager。由于配置 Redis 及 RedisDesktopManager 的使用比较简单,这个不花篇幅再细述。
第二步:准备一个小 java 程序发布到两个 Tomcat 上
同一台服务器 (电脑) 部署两套及以上的 Tomcat 的方法参见:同一台服务器 (电脑) 运行多个 Tomcat 的设置方法。本个示例程序只是仅仅在 Redis 中存储了一个字符串变量,测试程序主要代码如下:
- @Overridepublic 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; }@Overridepublic 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 = " \n"; out.println(docType + "
\n"+"\n"+"\n"+"" + title + "\n" + "
\n"+""); }
下一步的技术调研就是把 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;
- }
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-14/20455487.html