笔记——》总结一下负载均衡和nginx的使用问题并写个demo

最近在做负载均衡相关的东西。遇到了一些问题,做一些总结如下。

1,为什么需要负载均衡?

先说为什么需要负载均衡,因为传统的 web网站都是客户端(无数个)+服务器(一个)。如果服务器宕机了,那么就收不到客户端的请求了,那问题就大了。所以我们此时多增加几个服务器,每个服务器上部署一样的业务代码,假如服务器A在部署或者宕机了,那么客户端还可以请求服务器B和服务器C。那么此时有个问题,我们分给客户端的请求链接URL是唯一的,那客户端怎么去请求服务器B和服务器C呢。答案就在这个负载均衡,通过负载均衡可以检测出服务器A宕机了,然后就把请求转发服务器B或者C。

2,什么是负载均衡?

可以把负载均衡理解为一个硬件产品,就把它当成一台跳板机,或者直接理解成负载均衡器(可以百度),通过这个跳板机把客户端的请求分发到不同的服务器,简单说就是利用多台服务器提供单一服务负载均衡又分4层负载均衡和7层负载均衡,4层负载均衡指的是处于OSI协议的第四层(即传输层,可以理解为传输信息的层级),7层指处于OSI协议的第7层(即应用层,可以理解为 有业务逻辑参与的层级),7层负载均衡是建立在4层负载的基础上的,通常我们使用4层负载均衡已经可以达到比较可靠的分发请求的目的了。 4层负载均衡的实现我是通过nginx反向代理实现的。

有张图很有意思的说明了什么是反向代理,

正经点,

3,demo

1,下载nginx,为了此demo是在windows上运行的,如果是在linux上运行的话可以自行下载http://nginx.org/en/download.html

链接: https://pan.baidu.com/s/1_6iHwFOY4JDrWa2j7yXKCw 提取码: aqm2 

2,下载之后将压缩包解压,放到一个全英文路径的文件夹下。修改nginx.conf文件。

    

2,修改这个配置文件,具体每个参数的意义已经注释了。

worker_processes  1;#工作进程的个数,一般与计算机的cpu核数一致
events {
    worker_connections  1024;#单个进程最大连接数(最大连接数=连接数*进程数) 
}
http {
	upstream  mysite{ 
		server 127.0.0.1:8082 weight=2;#权重,eg:8082 weight=2,8092 weight=1;访问3次,会先访问两次8082端口,再访问一次8092端口
		server 127.0.0.1:8092 weight=1;  
    }
    #当前的Nginx的配置 
    server {
	    #监听80端口,可以改成其他端口。这个端口号是一个虚拟的临时端口号,可自定义未被占用的端口号,
		#来自外部的请求会先通过这个虚拟的8083端口再转发到配置的真正端口上去
        listen       8083;
		#server_name当前服务的域名,如果只有一个server域的话,此参数是不起作用的,可以去掉或者随便定义。只有当配置了多个server的时候,这个参数才会发挥作用
        server_name  localhost;
        location / {
		    #这个参数的值自定义,只需要与upstream后面的名字一致即可,不用顾虑其他
            proxy_pass http://mysite; 
			#不进行重定向
			proxy_redirect off;
			#不隐藏端口号
            proxy_set_header Host $host:$server_port;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header REMOTE-HOST $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			#请求超时时间
			proxy_connect_timeout 1; 
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }       
    }	
}

 下面再多余的解释一下。我是在本地起了两个springboot应用,不同的tomcat端口号,用来模拟两台服务器,这两个应用是相同的代码连接相同的数据库。这两个端口号分别是8082和8092,但是我不想把这两个端口号暴露出去,所以我定义了一个模拟端口号8083。当我们在访问这个代理接口的时候,如果是内网ip地址访问,就可以通过127.0.0.1:8083来访问。如果内容已被外网映射,通过外网域名访问的,我们在外网穿透工具中将原来的8082端口号设置为8083,就可以通过域名访问了。后端多台服务器,但我们通过一个模拟端口,将多台服务器模拟成一台,这个就是集群这个概念的体现。这样做隐藏了内网结构,阻止了对服务器真实端口的攻击,使真实服务器更加安全,并且提高了服务器的稳定性。

3,访问。在访问之前需要先启动nginx才能达到负载均衡的效果。每次修改配置文件需要重新加载。常用cmd命令如下,linux命令自行百度

检测nginx配置文件格式是否正确:nginx.exe -t
关闭所有nginx端口占用后台:taskkill /IM  nginx.exe  /F
开启nginx负载均衡:start nginx
重新加载nginx改动(改动配置文件后用):nginx.exe -s reload
退出nginx负载均衡nginx.exe -s quit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值