01. (反向代理)负载均衡的概念说明
什么是集群?
完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)
什么是负载均衡?
1) 实现用户访问请求进行调度分配
2) 实现用户访问压力分担
什么是反向代理?
反向代理: 外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网)
外网用户(客户端) --- 代理服务器 (服务端)
代理服务器(客户端) --- web服务器(服务端)
正向代理: 内网(局域网主机) --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本)
FQ的操作
02. 准备负载均衡的环境
集群服务器部署: PS: 集群中每天服务器的配置一模一样 企业中: 01. 先部署好一台LNMP服务器,上传代码信息 02. 进行访问测试 03. 批量部署多台web服务器 04. 将nginx配置文件进行分发 05. 将站点目录分发给所有主机 教学中: 01. 将web01作为模板主机克隆 sed -i 's#\.7#.8#g' /etc/sysconfig/network-scripts/ifcfg-eth[01] hostnamectl set-hostname web02 利用手动方式实现负载均衡: 修改hosts主机地址和域名映射文件 负载均衡服务器部署: 第一个历程: 安装部署nginx软件 .... 第二个历程: 编写nginx负载服务配置文件 ngx_http_upstream_module --- upstream 负载均衡 OK ngx_http_proxy_module --- proxy_pass 反向代理 upstream oldboy { #定义oldboy集群名称 server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } server { listen 80; server_name www.oldboy.com; location / { proxy_pass http://oldboy; #指定集群oldboy反向代理的地址 } } 第三个历程: 实现负载功能测试 搭建集群测试环境: for name in www bbs blog;do echo "$name 10.0.0.7">/html/$name/test.html;done for name in www bbs blog;do echo "$name 10.0.0.8">/html/$name/test.html;done for name in www bbs blog;do echo "$name 10.0.0.9">/html/$name/test.html;done 修改windows解析文件 10.0.0.5为负载均衡服务器 10.0.0.5 www.oldboy.com blog.oldboy.com bbs.oldboy.com
网页访问www.oldboy.com测试负载均衡 负载均衡访问网站异常排错思路: 第一步: 负载均衡 测试后端web节点服务器是否能够正常访问 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.7/test.html www 10.0.0.7 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.8/test.html www 10.0.0.8 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.9/test.html www 10.0.0.9 第二步: 负载均衡 利用curl命令访问负载均衡服务器 查看两个配置文件 第三步: 打开一个xshell连接 ping www.oldboy.com 第四步: 配置文件编写不正确
03. 负载均衡配置模块详细说明
ngx_http_upstream_module --- upstream 实现不同调度功能 1. 轮询分配请求(平均) 2. 权重分配请求(能力越强责任越重) upstream oldboy { server 10.0.0.7:80 weight=3; server 10.0.0.8:80 weight=2; server 10.0.0.9:80 weight=1; } 3. 实现热备功能(备胎功能) upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; } 4. 定义最大失败次数 健康检查参数 upstream oldboy { server 10.0.0.7:80 max_fails=5; server 10.0.0.8:80; server 10.0.0.9:80; } max_fails=5 5. 定义失败之后重发的间隔时间 健康检查参数 fail_timeout=10s 会给失败的服务器一次机会 实现不同调度算法 1. rr 轮询调度算法 2. wrr 权重调度算法 3. ip_hash 算法 (出现反复登录的时候) upstream oldboy { ip_hash; server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; } 4. least_conn 根据服务器连接数分配资源 ngx_http_proxy_module --- proxy_pass 01. 访问不同的网站地址,不能显示不同的网站页面 (面试题) proxy_set_header Host $host; location / { proxy_pass http://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_404 http_502 http_403; } 02. 访问网站用户地址信息无法进行分析统计 (面试题) proxy_set_header X-Forwarded-For $remote_addr; 03. 访问负载均衡会出现错误页面,影响用户体验 proxy_next_upstream error timeout http_404 http_502 http_403;
stream 和 http 区域同级即可
#四层端口代理 stream { upstream test_mysql { hash $remote_addr consistent; # 通过配置一致性 hash 来防止调度异常 server 192.168.1.1:3306 weight=5 max_fails=3 fail_timeout=30s; } server { listen 10086 so_keepalive=on; # 开启 TCP 存活探测 proxy_connect_timeout 10s; # 连接超时时间 proxy_timeout 300s; # 端口保持时间 proxy_pass test_mysql; } }