nginx-负载均衡
Posted huxl1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx-负载均衡相关的知识,希望对你有一定的参考价值。
基于七层的负载
负载均衡:把同一类的请求通过调度器按一定的调度算法分发到后端服务器上
调度器有:
硬件: bigip A10 netscaler
软件:
四层:lvs nginx (基于stream module) haproxy (基于 tcp mode)
七层:http ats nginx(基于 upstream module) haproxy (基于 http mode)
2负载均衡存在一个问题就是后端服务器之间会话问题
1 会话绑定 持久连接
2 会话同步
可以在后端服务器做会话集群,做服务器之间会话信息同步可以通过组播方式传输
组播:是指向一个组播域的主机通信按照组播地址来定义的,组播地址相同的处于同一个组播内。
3 在后端用一个专门的存储来存放会话信息
Memcached:内存系统但一旦当机 信息会丢失
Redis: 是可以持久保存的
Nginx的负载均衡:
通过upstream模块来定义
1 把后端服务器相同应用放在一个组中,并指明这个组在接受到用户请求时则么被调用出来响应,
基于 ngx_http_upstream_module; 指令 upstream
在rs上
配置ip地址 rs1 192.168.10.2
Rs2 192.168.10.3
Vip 192.168.220.130
Dip 192.169.10.1
安装http应用
启动http
Vim /var/www/html/index.html
在nginx上
定义 组
upstream websvrs {
server 192.168.10.2:80;
server 192.168.10.3:80;
}
调用组
location / {
proxy_pass http://websvrs;
}
访问 curl http://192.168.220.130
Server 192.168.10.2:80 weight=2; 加权轮询 默认是轮询的
访问:for i in {1..10};do curl http://192.168.220.130 done
Max_conns=number ; 一个服务器的最大并发连接数
Fail_timeout=time; 多长时间内做一次健康检查
Max_fails=number; 最多失败几次 默认1次
Nginx 默认自带有状况健康检查
server 127.0.0.1:80 backup; 在后端服务器全部当机才会响应
server 192.168.10.2:80 down; 将服务器在组中down到
Slow_start_time : 慢启动 一般用于新加如的一台服务器
Ip_hash; 把来同一个客户端的请求,放在同一台服务器上,注意他不能与backup一起使用
Hash key; 如hash cookie 是按cookie来定义的
如: hash $remote_addr = ip_hash
$request_uri 完整的URI 如http://192.168.220.130/index.html
$request 不完整的URI 如 http://192.168.220.130
Keepalive 32; 保持每个worker上多少个长连接
基于四层
stream {
upstream websrvs {
server 192.168.10.2:80;
server 192.168.10.3:80;
}
server {
listen 80;
proxy_pass websrvs;
}
}
访问:
for i in {1..5};do curl http://192.168.220.130; done
基于四层的反代:
Stream {
Server {
Listen 80;
Proxy_pass 192.168.10.2:80;
}
}
mysql的测试实验
在客户端安装mysql 启动服务 添加用户test 密码 testpass
GRANT ALL on mydb.* to [email protected]’%’ IDENTIFIED BY ‘testpass’;
Flush privileges;
在另台上测试: mysql -utest -h192.168.10.1 -p testpass
Upstrem mysvrs {
Server 192.168.10.2:3306;
Server 192.168.10.3:3306;
}
Server {
Listen 3306;
Proxy_pass mysvrs;
}
以上是关于nginx-负载均衡的主要内容,如果未能解决你的问题,请参考以下文章