一、反向代理和负载均衡的概念

在理解反向代理和负载均衡概念之前我们首先要明白的是集群的概念,简单来说集群就是干相同事情的服务器,如web集群、数据库集群、存储集群等,集群有两个主要作用一是提高网站处理用户请求的能力二是提高网站运行的稳定性,一般来说集群可分为高可用集群(HA)和负载均衡集群(LB)而负载均衡集群可以用F5、A10等硬件设备来实现,也可以用LVS(四成)、nginx(七层、1.9之后支持四层)等软件来实现

  • 负载均衡简单来说就是对用户的请求进行调度管理和压力分担

  • 反向代理简单来说就是接收用户请求代替用户向后端访问

二、配置反向代理负载均衡服务

(一)、环境规划

hostname server type Ip addr
WEB01 web 10.0.0.7
WEB02 web 10.0.0.8
WEB03 web 10.0.0.9
LB01 LB 10.0.0.5

(二)、模块说明

1、upstream 模块

  • 常用功能 ①. 定义后端可调度节点信息放在http区块 例子: upstream jiang { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } ②. 实现权重值负载访问功能-weight upstream jiang { server 10.0.0.7:80 weight=3; server 10.0.0.8:80 weight=1; server 10.0.0.9:80 weigth=1; } ③. 定义后端访问的失败次数-max_fails

upstream jiang { server 10.0.0.7:80 max_fails=3; server 10.0.0.8:80 max_fails=3; server 10.0.0.9:80 max_fails=3; }

④. 定义后端失败重试的间隔-fail_timeout upstream jiag { server 10.0.0.7:80 max_fails=3 fail_timeout=10s; server 10.0.0.8:80 max_fails=3; server 10.0.0.9:80 max_fails=3; }

说明:在尝试多次失败后在指定超时时间过去之后,会再给相应节点一次机会 ⑤. 定义后端服务的热备节点-backup(负载节点服务器都挂了,使用备份) upstream jiang { server 10.0.0.7:80 max_fails=3 fail_timeout=10s; server 10.0.0.8:80 max_fails=3; server 10.0.0.9:80 max_fails=3 backup; }

模块调度算法 ①. 定义轮询调度算法-rr-默认调度算法 采用平均分配原则 ②. 定义权重调度算法-wrr 能者多劳 ③. 定义静态调度算法-ip_hash 用一个hash值记录访问的记录,下次客户端再去访问的时候还是会把请求分配给上一次的服务器,访问用户反复登陆; upstream jiang { ip_hash; server 10.0.0.7:80 max_fails=3 fail_timeout=10s; server 10.0.0.8:80 max_fails=3; server 10.0.0.9:80 max_fails=3 ; } ④. 定义最小的连接数-least_conn 看谁比较闲就把请求分配给谁 upstream oldboy { least_conn;
server 10.0.0.7:80 max_fails=3 fail_timeout=10s; server 10.0.0.8:80 max_fails=3; server 10.0.0.9:80 max_fails=3 ; }

2、 ngx_http_proxy_module模块

①.proxy_pass 把客户段的请求抛送给upstream模块中的相应的地址池 location / { proxy_pass http://jiang; } ②.修改反向代理到后端请求头信息-proxy_set_header location / { proxy_pass http://oldboy; proxy_set_header host $host; }
proxy_set_header X-Forwarded-For $remote_addr;---让后端服务日志里写入真正客户端的IP地址信息;

(三)、部署实现

1、按照规划部署好相应的环境,并创建好相应的虚拟主机(暂时忽略)

2、配置nginx反向代理负载均衡

[root@lb01 conf]# vim nginx.conf

worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream jiang { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } server { listen 80; server_name blog.etiantian.org; root html; index index.html index.htm; location / { proxy_pass http://jiang; } } } 检查语法重启nginx即可

3、访问测试

在浏览器上输入域名刷新测试结构