lnmp负载均衡反向代理

什么是集群?

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

集群的分类

  • 负载均衡集群(LBC\LB)常用的
    分担任务
  • 高可用性集群(HAC)常用的
    一个宕机,其他的机器很快就可以继续执行
  • 高性能计算集群(HPC)
    快速处理复杂的运算 rpc
  • 网格计算集群(很少用到)

什么是负载均衡?

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

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

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

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

负载均衡简单说就是任务分发下去了,其他的就不管了。
反向代理其实某种程度上实现了负载均衡的效果,所以可以算是一个子集。

负载均衡实践

1. 硬件准备

4台虚拟机(有nginx)

主机 IP 说明
fzjh_nginx1 192.168.134.33 主负载
fzjh_web1 192.168.134.128 web server
fzjh_web2 192.168.134.131 web server
fzjh_web3 192.168.134.132 web server

2.主负载配置

fzjh_nginx1的nginx.conf
http中配置:
upstream fzjh{
        server  192.168.134.128 weight=1;
        server 192.168.134.131 weight=1;
        server 192.168.134.132 weight=1;
    }
server中配置:
 location /
        {
            proxy_pass http://fzjh; #当域名请求发送到这里的时候,他会自动查询连接池里面的主机
            proxy_set_header Host $host;#把主机header头发送给轮询的主机
            proxy_set_header X-Forwarded-For $remote_addr;#获取真实的ip
        }

至此,最简单的负载均衡服务就搭建好了,当我们请求主负载192.168.134.33的时候,会分发给不同的主机处理。此实验并未实现高可用

3.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 yourwebname.com;
        location / {
                proxy_pass http://www_server_pools; #当域名请求发送到这里的时候,他会自动查询连接池里面的主机
                proxy_set_header Host $host;    #把主机header头发送给轮询的主机
                proxy_set_header X-Forwarded-For $remote_addr;  #获取真实的ip
        }
    }

4. upstream调度算法

  • rr轮询(默认调度算法,静态调度算法)
  • wrr(权重轮询,静态调度算法)
  • ip_hash(静态调度算法)
  • fair(动态调度算法)
  • least_conn
  • url_hash算法
  • 一致性hash算法

反向代理

新建 proxy.conf文件,内容:

proxy_set_header Host  $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; 
} 

在主负载上nginx.conf 文件中对应的location /{} 里include proxy_cache

location / {
                 proxy_pass http://default_pools;
                 include proxy.conf;
             }

配置说明

……… //内容略 
http { 
…….. //内容略 
        client_max_body_size 300m;  //允许客户端请求的最大单个文件字节数,它出现在请求头部的Content-Length字段。(可以更改此参数达到限制用户上传文件大小的目的) 
        client_body_buffer_size 128k; \\缓冲区代理缓冲客户端请求的最大字节数,可以理解为先保存到本地再传给用户。 这个指令可以指定连接请求使用的缓冲区大小,默认值:8k/16k 。如果客户端请求一个文件大于128k,则Nginx会尝试在硬盘上创建临时文件。如果硬盘满了,则会报错。 
        client_body_temp_path /dev/shm/client_body_temp; \\这个指令指定连接请求试图写入缓存文件的目录路径。 
        proxy_connect_timeout 600; \\跟后端服务器连接的超时时间,发起握手等候响应超时时间 
        proxy_read_timeout 600; \\连接成功 _等候后端服务器的响应时间_其实已经进入后端的排队中等候处理。默认值: 
        proxy_send_timeout 600; \\后端服务器回传时间_就是在规定时间内后端服务器必须传完所有的数据。设置代理服务器转发请求的超时时间,同样指完成两次握手后的时间,如果超过这个时间代理服务器没有数据转发到后端服务器,nginx将关闭连接。 
        proxy_buffer_size 16k; \\代理请求缓存区_这个缓存区间会保存用户的头信息来提供Nginx进行规则处理。一般只要能保存下头信息即可。默认值:proxy_buffer_size 4k/8k 。设置从后端服务器读取的第一部分应答的缓 
冲区大小,通常情况下这部分应答中包含一个小的应答头。 
        proxy_buffers 4 32k; \\设置用于读取应答(来自后端服务器)的缓冲区数目和大小,告诉Nginx保存单个用的几个 
Buffer,最大用多大空间 
        proxy_busy_buffers_size 64k; \\如果系统很忙的时候可以申请更大的proxy_buffers,官方推荐*2 
        proxy_temp_file_write_size 64k; \\设置在写入proxy_temp_path时缓存临文件数据的大小,在预防一个工作进程在传递文件时阻塞太长。 
        proxy_temp_path /dev/shm/proxy_temp; \\类似于http核心模块中的client_body_temp_path指令,指定一个目录来缓冲比较大的被代理请求。 
 
upstream   rsyslog.org_pool { 
        server 192.168.100.104:80 weight=4 max_fails=2 fail_timeout=30s;  //为了做测试两台服务器默认性能都一样,平均负载 
        server 192.168.100.105:80 weight=4 max_fails=2 fail_timeout=30s; 
        } \\HTTP负载均衡模块。upstream这个字段设置一群服务器,可以将这个字段放在proxy_pass和fastcgi_pass指令中作为一个单独的实体,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。 服务器可以指定不同的权重,默认为1。 
 
     server { 
        listen       80; 
        server_name  www.rsyslog.org;  //设置所有web服务器负载的共同域名 
        index  index.html index.htm; 
 
        location /  { 
                    proxy_pass http://rsyslog.org_pool/; //确定需要代理的URL,端口或socket。 
                    proxy_set_header Host $host; 
                    proxy_redirect off; \\如果需要修改从后端服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。 
                    proxy_set_header X-Real-IP $remote_addr; \\这个指令允许将发送到后端服务器的请求头重新定义或者增加一些字段。 这个值可以是一个文本,变量或者它们的组合。 
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
                    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404; \\当后端服务器遇到500、502、503、504、404错误与超时,自动将请求转发给rsyslog.org_pool组的另一台服务器,达到故障转移  
                    }  
        #确定在何种情况下请求将转发到下一个服务器: 
        #error - 在连接到一个服务器,发送一个请求,或者读取应答时发生错误。 
        #timeout - 在连接到服务器,转发请求或者读取应答时发生超时。 
        #invalid_header - 服务器返回空的或者错误的应答。 
        #http_500 - 服务器返回500代码。 
        #http_502 - 服务器返回502代码。 
        #http_503 - 服务器返回503代码。 
        #http_504 - 服务器返回504代码。 
        #http_404 - 服务器返回404代码。 
        #off - 禁止转发请求到下一台服务器。 
        } 
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容