什么是集群?

简单的说就是指一组相互独立的服务器。利用高速通信网络组成一个较大的计算机服务系统,每个集群节点(单台服务器)都是运行各自的独立服务。

一堆服务器合作干一件事情就是集群的概念。

为什么要使用集群?

  • 高性能
  • 价格有效性
  • 可伸缩性
  • 高可用性
  • 透明性
  • 可管理性
  • 可编程性

集群的分类

  • 负载均衡集群(LBC\LB)常用的

    分担任务

  • 高可用性集群(HAC)常用的

    一个宕机,其他的机器很快就可以继续执行

  • 高性能计算集群(HPC)

    快速处理复杂的运算 rpc

  • 网格计算集群(很少用到)

常用的集群软硬件介绍

开源的:Nginx、LVS、Haproxy、Keepalived、Heartbeat 软件

收费的:F5、Netscaler、Radware、A10

什么是负载均衡?

负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽、吞吐量,同时加强了网络数据的处理能力,提高了网络的灵活性和可用性。

搭建负载均衡服务的要求如下(必须满足,否则就没有意义了)

  • 请求分担,一台处理不了,可以有其他节点进行处理
  • 运算分担,一台处理不了,多个节点并行处理
  • 7x24小时运行

负载均衡与反向代理的区别?

负载均衡简单说就是任务分发下去了,其他的就不管了。

反向代理其实某种程度上实现了负载均衡的效果,所以可以算是一个子集。

Nginx负载均衡快速实践

负载均衡与反向代理-堵文斐个人博客

1. 硬件准备

主机

IP

说明

lb_nginx1

10.211.55.8

主负载

lb_nginx2

10.211.55.9

辅负载,上面挂了,就快速切换到这里来

lb_web1

10.211.55.10

web server

lb_web2

10.211.55.11

web server

2. 软件准备

四台服务器均安装nginx

3. 搭建web网站用于测试

在lb_web1和lb_web2上搭建相同的web网站,为了方便测试请在返回结果处进行区分

  • lb_web1

    搭建一个虚拟主机,lb.com

  • lb_web2

    同上,搭建一个虚拟主机,lb.com,web服务器应该运行的是统一个网站的源代码

  • lb_nginx1

    修改nginx的配置,

#负载均衡指向的web服务器连接池
upstream www_server_pools {
               server 10.211.55.10 weight=1;
               server 10.211.55.11 weight=1;
       }
#配置主机指向
server
   {
       listen 80;
       server_name lb.com;
       location / {
               proxy_pass http://www_server_pools;  #当域名请求发送到这里的时候,他会自动查询连接池里面的主机
               proxy_set_header Host $host; #把主机header头发送给轮询的主机

            proxy_set_header X-Forwarded-For $remote_addr;  #获取真实的ip
       }
   }

4. 修改客户端电脑上的hosts文件

bash
10.211.55.8 lb.com #配置hosts

5. 至此,最简单的负载均衡服务就搭建好了,当我们请求lb.com的时候,会发现,每次访问的主机都不一样。

upstream模块介绍

Nginx的负载均衡功能依赖于nginx_http_upstream_module模块,所支持的代理方式包括proxy_pass、fastcgi_pass、memcached_pass等,新版Nginx软件支持的方式所有增加。本文主要讲解proxy_pass代理方式。

#添加连接池
upstream www_server_pools { #自定义的名称
                server 10.211.55.10:80 weight=1; #权重
                server 10.211.55.11:80 weight=1; #权重,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
                #ip_hash;   #ip hash    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
                #fair; 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
                #hash $request_uri; 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
                #hash_method crc32; 
                #默认轮询。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

        }
#111.110.117.107
#添加连接池
upstream staic { #自定义的名称
                server 10.211.55.10:80 weight=1; #权重
                server 10.211.55.11:80 weight=1; #权重
        }

#配置主机指向
server
    {
        listen 80;
        server_name lb.com;
        location / {
                proxy_pass http://www_server_pools; #当域名请求发送到这里的时候,他会自动查询连接池里面的主机
                proxy_set_header Host $host;    #把主机header头发送给轮询的主机

                proxy_set_header X-Forwarded-For $remote_addr;  #获取真实的ip
        }
    }

upstream调度算法

(1)rr轮询(默认调度算法,静态调度算法)

(2)wrr(权重轮询,静态调度算法)

(3)ip_hash(静态调度算法)

(4)fair(动态调度算法)

(5)least_conn

(6)url_hash算法

(7)一致性hash算法

反向代理

proxy.conf

#include
包含,看起来更简洁规范
proxy_set_header Host �0�2$host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;



proxy_cache,给个范例供参考: 
location ~ .*\.html$ 
{ 
  proxy_next_upstream http_502 http_504 error timeout invalid_header; 
  proxy_cache cache_one; 
  proxy_cache_valid 200 304 12h; 
  proxy_cache_valid 301 302 1m; 
  proxy_cache_valid any 1m; 
  proxy_cache_key $host$uri$is_args$args; 
  proxy_set_header Host $host; 
  proxy_set_header X-Forwarded-For $remote_addr; 
  proxy_set_header Accept-Encoding ""; 
  proxy_ignore_headers "Cache-Control" "Expires"; 
  proxy_pass http://backend_server; 
  expires 5d; 
} 

动静分离网站集群架构

负载均衡与反向代理-堵文斐个人博客

动静分离网站集群架构示意图(上图)

动静分离的优势

上图能把我们的项目业务进行更好更合理的划分,比如我们的web集群中的服务器偏运算型的,CPU可以快一些,图片集群服务器需要更大的带宽,那么就可以分配更多的带宽来使用,上传集群需要频繁的大文件读写,那么就需要更稳定的磁盘进行管理。