nginx
特点
-
- 功能强大,性能卓越,运行稳定。
-
- 配置简单灵活。
-
- 能够自动剔除工作不正常的后端服务器。
-
-
上传文件使用异步模式。
client—nginx—web1 web2 web3 lvs同步请求 DR client -->dr—web1
-
-
- 支持多种分配策略,可以分配权重,分配方式灵活。
优势
-
nginx复制用户请求,在后端服务器出现问题时。nginx会再复制一份请求发给另一台后端服务器。 lvs则在这种情况,只能用户重新发请求
-
缺点
- 流量会经过nginx,nginx成为瓶颈
-
生产架构
nginx负载均衡算法
-
1.round robin(默认)
- 轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂掉的机器可以自动从服务列表中剔除。
-
2.weight
-
根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
-
例如:
例如: upstream bakend { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
-
-
3.IP_hash
-
根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
-
例如:
例如: upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
-
-
4.url_hash(第三方)
-
根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。
-
需要额外安装 nginx的upstream_hash模块
- wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz
-
在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法 复制代码
upstream backend { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
-
-
5.fair(第三方)
-
根据后台响应时间来分发请求,响应时间短的分发的请求多。
-
例如:
upstream backend { server server1; server server2; fair; }
-
-
每个设备的状态设置为:
- 1.down 表示单前的server暂时不参与负载
- 2.weight 默认为1.weight越大,负载的权重就越大。
- 3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
- 4.fail_timeout:max_fails次失败后,暂停的时间。
- 5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
- nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
- client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
- client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
- location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
-
7层负载均衡语法示例
-
通过location对不同的请求进行进行负载均衡,因为通过http协议,所以称作7层
-
location / { } location ~ \.html${ proxy_pass ... } location ~ \.php${ proxy_pass ... } location ~ \.(jpg|png|css|js)${ proxy_pass ... }
-
-
环境
- client:client
- nginx:nginx
- apache:web1
- apache:web2
-
案例
-
1.关闭防火墙和selinux(略)
-
2.域名解析
-
3.同步时间(实验环境略)
- 计划任务执行如下命令
- ntpdate 时间服务器地址
-
4.准备web1页面
-
5.配置nginx(192.168.145.16)
-
yum install -y epel-release
-
如果用的是之前的环境( yum remove haproxy -y)
-
yum install -y nginx
-
vim /etc/nginx/ngxin.conf
-
注意IP地址
-
http { upstream html { server web1:80; server web2:80; } server { location / { proxy_pass http://html; } } }
-
-
-
6.测试负载均衡
- 访问nginx服务器。能交替的看到web1和web2
-
7.动静分离(略)
-
1 增加一个upstream php server web3
-
2.增加一个location ~ .php {}
-
3.示例
-
upstream html { server web1:80; server web2:80; } upstream php { server web3:80; server web4:80; } server { location / { proxy_pass http://html; } location ~ \.php$ { proxy_pass http://php; } }
http { upstream html { server 192.168.145.136:80; server 192.168.145.137:80; } upstream php { server 192.168.145.145:80; server 192.168.145.155:80; } server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; location / { proxy_pass http://html; } location ~ \.php$ { proxy_pass http://php; } }
-
-
4.客户端测试:
[root@client ~]# elinks --dump http://192.168.145.16/index.html web11111 [root@client ~]# elinks --dump http://192.168.145.16/index.html web22222 [root@client ~]# elinks --dump http://192.168.145.16/index.php php111111 [root@client ~]# elinks --dump http://192.168.145.16/index.php php2222222
-
-