记一次nginx负载均衡遇到的问题

记一次nginx负载均衡遇到的问题

每天多学一点点~
话不多说,这就开始吧…进击的爆裂无球

1.前文

昨天因需求搭建了rabbitmq集群。因国网内部原因,只是在两台windows上机器搭建了一个镜像集群(有时间写一下windows以及docker搭建的过程),然后用nginx或者haproxy进行负载(之前写过 Haproxy安装及配置文件详解及mysql负载均衡 的博客)博主自认为nginx应该是很熟的,结果踩了半天坑也没负载起来,这里和大家分享一下,也顺便记录自己平时工作中遇到的一些问题。

2.准备工作

rabbitmq集群,搭建过程有时间再写博客。其实没有mq集群也没关系,用docker分别装两个,或者直接用mysql也可以。这里博主就用mysql试验一下,因为mysql更直观。
虚拟机mysql + 本地mysql

3.nginx负载配置

nginx官方文档 俗话说的好,不懂直接上官网看,博客毕竟好的太少,也不一定是正确的。

博主之前只用过 ngx_http_upstream_module 模块的负载均衡,并没有特别理解其意思,于是傻乎乎的用这个模块来配置呢。
官方文档截图

自己的配置

http {
    include       mime.types;
    default_type  application/octet-stream;
	# 负载均衡配置  配置在http模块
	upstream mysql {
		#最大失败2次 超时3秒   weight 权重大小 越大越优先  轮询 
		server 127.0.0.1:3306 max_fails=2 fail_timeout=3s weight=1;  # 本机mysql
		server 192.168.73.130:3306 max_fails=2 fail_timeout=3s weight=1; # 虚拟机mysql
    }
    server {
        listen       5678  default;   
        server_name  192.168.73.130;

		location / {
			proxy_connect_timeout 1s;
			proxy_pass http://mysql;
		}
    }
}

这段配置,咋一看是堆的,可是怎么也连不上。检查一下springboot代码
在这里插入图片描述
似乎也没错。。。百思不得其解。。。
于是去官网看了一下,换了配置,启用 ngx_stream_core_module 模块的负载配置
官网截图
自己的配置

#user root;
worker_processes  1;
events {
    worker_connections 1024;
}


stream {
	upstream mysql {
		#最大失败2次 超时3秒   weight 权重大小 越大越优先  轮询 
		server 127.0.0.1:3306 max_fails=2 fail_timeout=3s weight=1;
		server 192.168.73.130:3306 max_fails=2 fail_timeout=3s weight=1;
    }
	server {
		listen 9000;
		proxy_connect_timeout 1s;
		proxy_timeout 3s;
		proxy_pass mysql;
	}
}



用jmeter模拟10个线程测试一下,看看是否轮询写入了数据库。
jmeter

虚拟机mysql

在这里插入图片描述

4.nginx模块解析

那么上文说到,为何用 ngx_http_upstream_module 配置负载均衡不行,况且里面还有很多配置策略,如轮询,iphash等等,非常好,却只能用 ngx_stream_core_module 模块来配置呢?
博主上了官网,查找了资料,总结出以下几点,如有不对之处请指正,一起学习~

  1. ngx_http_upstream_module 模块是七层负载均衡,而ngx_stream_core_module是四层负载。
  2. ngx_http_upstream_module 针对的是http协议,而ngx_stream_core_module针对的是tcp协议。
  3. tomcat属于http,而mysql,rabbitmq等是用tcp进行传输的,所以网上一般博客会用ngx_http_upstream_module 来负载tomcat,用ngx_stream_core_module负载mysql或者rabbitmq,却没有说清楚为何。
  4. 老版本的nginx只支持http,从1.9.0开始新增stream模块,支持tcp

具体的各位也可以直接去官网看介绍,更加清楚详细~
nginx这是要抢haproxy的饭碗哦~

5.总结

之前只知道用,没想过那么多,这次因为工作需要用到了才知道自己是多么的肤浅。在这里记录下这个问题,愿看到的朋友们可以少走一些坑,一起学习,一起努力~

7.结语

世上无难事,只怕有心人,每天积累一点点,fighting!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值