请教各位前辈关于负载均衡、集群、分布式之间的联系

我的理解是负载均衡就是集群……
Nginx放在前面做反向代理,后面多台机器运行同一个项目,就是集群了……
好像也是负载均衡……
分布式的话可以理解为多个Nginx做反向代理,后面是一堆机器做集群,只是每个机器不再是运行整个项目,而是项目的一部分,可以理解为服务化……

不知道这样理解是否有误,希望各位前辈可以指正一下

阅读 6.9k
3 个回答
upstream example.com.backend {
    #ip_hash; #根据来源IP和后端配置来做hash分配,确保固定IP只访问一个后端
    server 192.168.0.1:9000 weight=2; #weight默认为1,值越大,这台server负载的权重就越大
    server 192.168.0.2:9000 down; #down表示此台server暂时不参与负载,可以和ip_hash一起使用
    server 192.168.0.3:9000 max_fails=3 fail_timeout=30s;
    #max_fails表示允许请求失败的次数,默认为1.当超过最大次数时,返回fastcgi_next_upstream模块定义的错误.
    #fail_timeout表示max_fails次失败后,暂停的时间,默认是10秒.
    server 192.168.0.4:9000;
    server 192.168.0.5:9000;
    server 192.168.0.6:9000 backup; #当其他非backup服务器down或者busy的时候,请求backup机器,属于应急措施,实现高可用,不能和ip_hash一起使用
}
server {
    location ~ \.php$ {
        #访问不存在的php页面返回404
        try_files $uri =404;
        #如果后端的服务器返回执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移(高可用)。
        fastcgi_next_upstream error timeout invalid_header;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        #把这台server的php动态请求fastcgi_pass给upstream(上游)后端服务器集群
        fastcgi_pass example.com.backend;
    }
}

均衡负载 体现在Nginx会把PHP请求均匀地发送给upstream里的PHP-FPM进行处理.
集群 体现在upstream里不同IP的服务器提供同样的PHP-FPM服务.
分布式 体现在即使upstream里有服务器崩了,Nginx也能自动进行故障转移.
上面的PHP-FPM换成Java Tomcat也是一样的道理.

这三者都是要解决同一个目标——业务的稳定性
先上图
图片描述

可以说这三者的联系是非常紧密的,很多公司的业务最后都会变成最后那个图的样子,这其中,负载起着非常重要的作用。

负载又可以分为服务器负载和链路负载,分别负责应用层负载均衡和链路层的负载均衡。

现在硬件负载均衡设备的功能性是很强的,一般包含防火墙功能,服务器负载均衡,链路负载均衡,报表系统,集群主备切换等。

负载均衡是实现集群的一个前提,比如你有100台主机 每个主机有一个IP那么用户使用的时候是不会主动的选择去访问哪一台,也许你说DNS会帮你决定 确实可以但是DNS并不会关心每个主机的负载状态,所以你需要一个负载均衡器,他会去查看每个主机的状态,使得请求会被均匀的分布在各个主机 而不会使得一部分主机很闲 一部分很忙

集群么 就很难有个非常准确的定义 这100台主机也可以算是个集群,而更好的集群是主机之间还会有通信来实现HA高可用性计算分布等特性

分布式在我看来和集群很相似,模糊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
宣传栏