Nginx负载均衡

基于Nginx的负载均衡以及高可用简单应用

一、负载均衡配置

1、Nginx负载均衡配置

前面配置好的Nginx,可以访问之后,克隆4台,统一配置为512M,因为我的电脑内存是4G的。一台用来访问,一台用来做调度器(Director),两台web服务器(real server),Nginx前面已经介绍过了,故在此简单介绍一下那台Director的配置。

Nginx负载均衡

2、测试

1、定义好hosts文件,访问www.daili.com(负载均衡器的地址)

Nginx负载均衡

3、现在把web2服务器的nginx关掉测试

Nginx负载均衡

看,我的web服务器坏一个也可以正常访问,就是在配置的时候可以用一个共享文件库,使得web集群的资源都一样,用户访问页面获取的信息都一样。

我再启用web2,又可以看到web2了。

二、Nginx负载均衡核心组件介绍:upstrem模块

1、upstream模块

ngx_http_upstream_module模块允许Nginx定义一组或者多组节点服务器组,可以通过proxypass代理方式把网站请求发送到实现定义好的upstream组的名字上。具体写法:http://www_server_pools

2、权重,我们把web2的权重改成2试试

Nginx负载均衡

访问出现出现web1和web2的比率是1:2

3、比较完整的upstream配置案例

upstream blog_server_pool {
    server 10.0.10.6:80 weight=1 max_fails=1 fail_timeout=10s
        }
含义:

server 10.0.10.6:80  RS配置:可以是ip或域名,如果端口不写,默认是80,如果是域名,要通过dns做负载均衡。

weight=1  权重

max_fails Nginx尝试连接后端主机失败的次数,这个数值是配合proxy_next_upstream、fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的,当Nginx接受后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404、502、503.Max_fails的默认值是1:企业场景下建议是2~3。京东是1次,蓝汛10次,根据业务需求去配置。

backup 热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS。这标志着这个服务器作为备份服务器,如果主服务器全部坏了,就会向它转发请求,注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态就不能是weight和backup了。

fail_timeout=10s 在max_fails定义失败次数后,距离下次检查的间隔时间、默认是10s;如果max_fails是5,就检查5次,如果5ci都是502,那么它就会根据fail_timeout的值,等待10s再去检查一次。

down 标志着服务器永远不可用,配合ip_hash使用。

4、Nginx代理Cache服务,可能要使用hash算法,此时如果主服务器坏了,就要通过设置down参数确保客户端用户按照当前的hash算法访问。

upstream backend {
    ip_hash;
    server 192.168.1.123;
    server 192.168.1.124 down;
    }

5、Haproxy负载均衡器server的配置示例

server php_server_1 10.12.25.68:80 cookie 1 check inter 2000 rize 3 fall weight 2

server php_server_bak 10.12.25.79:80 cookie 3 check inter 1500 rise 3 fall 3 backup

weight 权重
check 开启对服务器的健康检查
inter 设置连续两次的健康检查间隔时间,单位是毫秒,默认是2000
rise 指定多少次连续成功的健康检查后,即可认定该服务器处于可用状态
fall 指定多少次检查不健康后,则认为服务器处于坏的 默认是3
maxconn 指定可被发送到该服务器的最大并发连接数

更加具体的可以参考官方文档

6、upstream模块调度算法

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

(2)wrr:权重轮巡,静态

(3)ip_hash 静态:每个请求按客户端IP的hash结果分配,当新的请求到达时,先会将其客户端IP通过哈希算法哈希出一个值,在随后的客户请求中,客户IP的哈希值只要相同,就会分配到同一台服务器,该调度算法可以解决动态网页的session共享问题,但有时会导致分配不均。

(4)fair:动态调度算法 此算法根据后端服务器的响应时间来分配请求,响应时间短的优先分配,智能,要使用这种调度算法必须先下载upstream_fair。

upstream cwj_db {
    server 192.168.1.123;   
    server 192.168.1.124;
    fair;
    }

(5)least_conn 动态 根据后端节点的连接数来决定分配情况,哪个机器少就分发给谁

(6)url_hash算法 与ip_hash类似,根据访问URL的hash结果来分配请求,让每个URL定向到同一个后端服务器,后端服务器为缓存服务器时效果显著,如果需要使用这种调度算法,必须要安装Nginx的hash模块软件包

三、Nginx负载均衡核心组件介绍:proxy_pass模块

1、简单实用案例

1)、将匹配URI为name的请求抛给http://172.0.0.1/remote/

location /name/ {
proxy_pass http://127.0.0.1/remote/;
            }

2)、将匹配URI为some/path的请求抛给http://127.0.0.1

location /some/path {
proxy_pass http://127.0.0.1;
            }

3)、将匹配URI为name的请求用指定的rewrite规则,然后抛给http://127.0.0.1

loaction /name/ {
    rewrite /name/ ([^/]+)  /usersname=$1 break;
    proxy_pass http://127.0.0.1;
}

2、模块参数

通常配置完后,再最后加上proxysetheader Host $host;若后端有多个虚拟主机,它就可以识别代理的是哪个虚拟主机了,很关键。

13.jpg

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/65267

(1)
N24_yeziN24_yezi
上一篇 2016-12-29 18:09
下一篇 2016-12-29 23:21

相关推荐

  • 马哥教育网络班21期-第六周课程练习

    请详细总结vim编辑器的使用并完成以下练习题1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; #cp /etc/rc.d/rc.sysinit /tmp #vim /tmp/rc.sysinit :%s/^[[:space:]]/#…

    Linux干货 2016-08-15
  • N26-博客作业-week11

    1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1、先用单向加密算法计算出数据的特征码 2、私钥加密特征码,并将结果附加在数据之后 3、生成一个临时的对称密钥,并使用对称密钥加密整段数据 4、获取对方的公钥,使用该公钥加密之前生成的临时对称密钥,并附加在数据之后 5、将所有数据发送给对方解密过程 1、先使用私钥解密加密的对称密钥 2、用对称密钥解密…

    2017-04-18
  • 记事本操作的小小小技巧

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://jeffyyko.blog.51cto.com/28563/140063       大家在查看文本文件的时候,如果内容很多,想快速到达某一位置可能比较麻烦,这时如果按住shift,再点击右侧…

    Linux干货 2015-03-26
  • 集中练习4-bash脚本、计划任务

    集中练习4-bash脚本、计划任务

    Linux干货 2017-10-27
  • MySQL 字符集乱码及解决方案

    1、简介         字符集是一套符号和编码的规则,不论是在oracle数据库还是在mysql数据库,都存在字符集的选择问题,而且如果在数据库创建阶段没有正确选择字符集,那么可能在后期需要更换字符集,而字符集的更换是代价比较高的操作,也存在一定的风险,所以,我们推荐在应用开始阶段,就按…

    Linux干货 2015-09-27
  • N26-第十三周

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)  1)共享名为shared,工作组为magedu;  2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加samb…

    Linux干货 2017-06-01