丰台区建设网站,遵义网警,北京建网站公司,有没有发布需求的网站本文已收录至Github#xff0c;推荐阅读 #x1f449; Java随想录 文章目录DNS负载均衡Nginx负载均衡负载均衡算法负载均衡配置超时配置被动健康检查与主动健康检查LVS/F5Nginx当我们的应用单实例不能支撑用户请求时#xff0c;此时就需要扩容#xff0c;从一台服务器扩容到…本文已收录至Github推荐阅读 Java随想录
文章目录DNS负载均衡Nginx负载均衡负载均衡算法负载均衡配置超时配置被动健康检查与主动健康检查LVS/F5Nginx当我们的应用单实例不能支撑用户请求时此时就需要扩容从一台服务器扩容到两台、几十台、几百台。此时我们就需要负载均衡进行流量的转发。下面介绍几种负载均衡的方案。DNS负载均衡
一种是使用DNS负载均衡将域名映射多个IP。
用户访问时是通过如 https://www.baidu.com 的方式访问在请求时浏览器首先会查询DNS服务器获取对应的IPDNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果将客户端的访问引导到不同的机器上去使得不同的客户端访问不同的服务器从而达到负载均衡的目的。
DNS还可以设置权重我们可以将配置比较好的机器设置为高权重。
具体配置可以参考阿里云官方文档阿里云DNS负载均衡权重配置
优点配置简单将负载均衡的工作交给了DNS服务器省去了管理的麻烦。缺点DNS会有一定的缓存时间故障后切换时间长。
DNS存在一个问题假设某台服务器重启或者出现故障DNS会有一定的缓存时间故障后切换时间长而且没有对后端服务进行心跳检查和失败重试的机制。
例如DNS缓存了A记录假设我有一台服务器坏了需要下线即使修改了A记录要使其生效也需要较长的时间这段时间DNS仍然会将域名解析到已下线的服务器上最终导致用户访问失败。
关于DNS缓存多久时间生效可以参考阿里云的帮助文档解析生效时间FAQ
Nginx负载均衡
负载均衡算法
一般用Nginx来做负载均衡比较多。
Nginx负载均衡是通过upstream模块来实现的内置实现了三种负载策略配置还是比较简单的。 轮循默认 Nginx根据请求次数将每个请求均匀分配到每台服务器。 最少连接 将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。 IP Hash 每个请求按访问IP的hash结果分配这样每个访客固定访问一个后端服务器可以解决session共享的问题。 fair第三方模块 根据服务器的响应时间来分配请求响应时间短的优先分配即负载压力小的优先会分配。 需要安装nginx-upstream-fair模块 url_hash第三方模块 按访问的URL的哈希结果来分配请求使每个URL定向到一台后端服务器如果需要这种调度算法则需要安装nginx_upstream_hash模块。 一致性哈希第三方模块 ip_hash算法在增加和服务器宕机时会导致会话和缓存丢失。如果需要使用一致性哈希则需要安装ngx_http_consistent_hash模块。
负载均衡配置
示例配置如下
http {upstream myserve {# ip_hash; 表示使用ip hash负载均衡策略server 192.168.0.100:8080 weight1 max_fails2 fail_timeout10;;server 192.168.0.101:8080 weight2;server 192.168.0.102:8080 weight3;# server 192.168.0.102:8080 backup; # server 192.168.0.102:8080 down;# server 192.168.0.102:8080 max_conns100;}server {listen 80;location / {proxy_pass http://myserve;}}
}weightweight是权重的意思上例配置表示6次请求中分配1次2次和3次。max_fails允许请求失败的次数默认为1。超过max_fails后在fail_timeout时间内新的请求将不会分配给这台机器。fail_timeout默认为10秒上诉代码配置表示失败2次之后10秒内 192.168.0.100:8080不会处理新的请求。backup备份机所有服务器挂了之后才会生效如配置文件注释部分只有192.168.0.100和192.168.0.101都挂了才会启用192.168.0.102。down表示某一台服务器不可用不会将请求分配到这台服务器上该状态的使用场景是某台服务器需要停机维护时设置为down或者发布新功能时。max_conns限制分配给某台服务器处理的最大连接数量超过这个数量将不会分配新的连接给它。默认是0表示不限制最大连接。它所起到的作用是防止服务器因连接过多而导致宕机比如我给192.168.0.102分配100个连接请求如果这台服务器正在处理100个请求nginx将不会分配新的请求给它。也就是同时处理的最大连接数量。
超时配置
proxy_connect_timeout后端服务器连接的超时时间默认是60秒。proxy_read_timeout连接成功后等候后端服务器响应时间也可以说是后端服务器处理请求的时间默认是60秒。proxy_send_timeout发送超时时间默认是60S
被动健康检查与主动健康检查
Nginx负载均衡有个缺点就是说Nginx的服务检查是惰性的Nginx只有当有访问时后才发起对后端节点探测。如果本次请求中节点正好出现故障Nginx依然将请求转交给故障的节点然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率因为多了一次转发而且自带模块无法做到预警。
也就是说Nginx自带的健康检查是被动的。
如果我们想主动的去进行健康检查需要使用淘宝开源的第三方模块nginx_upstream_check_module。
Nginx会定时主动地去ping后端的服务列表当发现某服务出现异常时把该服务从健康列表中移除当发现某服务恢复时又能够将该服务加回健康列表中。
示例配置如下
upstream myserver { server 192.168.0.100:8080;server 192.168.0.101:8080;check interval5000 rise2 fall5 timeout1000 typehttp; check_http_sendHEAD / HTTP/1.0\r\n\r\n; check_http_expect_alive http_2xx http_3xx;}interval间隔5s连续失败5次连续成功2次超时时间1s使用http协议发送一个请求头如果是2xx或者3xx状态比如200,302等表示服务正常运行。
LVS/F5Nginx
对于一般应用来说有Nginx就可以了。但Nginx一般用于七层负载均衡其吞吐量是有一定限制的。为了提升整体吞吐量会在 DNS 和 Nginx之间引入接入层如使用LVS软件负载均衡器)、F5硬负载均衡器可以做四层负载均衡即首先 DNS解析到LVS/F5然后LVS/F5转发给Nginx再由Nginx转发给后端真实服务器。
比较理想的架构是这样的 对于一般业务开发人员来说我们只需要关心到Nginx层面就够了LVS/F5一般由系统/运维工程师来维护。Nginx目前提供了HTTP (ngx_http_upstream_module七层负载均衡而1.9.0版本也开始支持TCP(ngx_stream_upstream_module)四层负载均衡。
一般用到F5的公司不多大部分LVSNginx就可以搞定。
另外我抱着好奇心去谷歌了下F5设备的价格 ╮(╯▽╰)╭ 这玩意要几十万一台看来不是一般人玩的起的。 本篇文章就到这里感谢阅读如果本篇博客有任何错误和建议欢迎给我留言指正。