Linux-14 Nginx负载均衡
Nginx代理
1.正向代理
代理的是客户端,假设我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。
2.反向代理
代理的是服务端,对于客户端而言,代理服务器就像是原始服务器。
3.实现一个简单的反向代理
1.配置方式,准备2台机器 在机器1中,添加参数 server { listen 80; server_name www.s14huoying.com; location / { proxy_pass http://192.168.12.38; #请求会直接转发给node2节点,也就是http://192.168.12.38; } 2.在两台机器上,检测access.log ,查看请求来源 #nginx的反向代理功能就是 proxy_pass参数 #xshell的快捷用法:找到查看 > 撰写 >撰写栏
Nginx负载均衡概述
Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,
实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾
Nginx要实现负载均衡需要用到proxy_pass代理模块配置
Nginx负载均衡与Nginx代理不同地方在于
Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池
Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。
nginx负载均衡配置
1.环境准备,准备3台服务器
192.168.12.96 nginx入口node1 192.168.12.67 康琛的应用服务器 192.168.12.38 伟华的应用服务器
2.关闭所有机器的防火墙
iptables -F
3.在node1节点上配置负载均衡配置(发牌人)
1.修改配置文件nginx.conf ,写入如下配置 #定义负载均衡池名字叫做s14django upstream s14django { #池子中存放2个服务器,默认轮训方式调度服务器 server 192.168.12.38:8000; server 192.168.12.67:8000; } #root参数定义网页的根目录,可以写在虚拟主机内,局部变量 #如果写在server标签外,就是全局变量 root html; #虚拟主机1 server { listen 80; server_name www.s14huoying.com; location / { #当请求发送到www.s14huoying.com的时候,匹配到 / ,就执行以下代码 proxy_pass http://s14django; #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建 #这个proxy_params文件创建在/opt/nginx1-12/conf底下 include proxy_params; } } 2.手动创建这个参数文件 touch /opt/nginx1-12/conf/proxy_params 写入信息 proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;
4.配置weihua的应用服务器
1.准备一个flask代码,运行 pip3 install flask 2.准备代码 myflask.py from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "<h1>我是伟华</h1>" if __name__=="__main__": app.run(host='0.0.0.0',port=8000) 3.启动应用服务器 python3 myflask.py
5.配置chenchen的应用服务器
pip3 install flask 2.准备代码 myflask.py from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "<h1>我是琛琛</h1>" if __name__=="__main__": app.run(host='0.0.0.0',port=8000) 3.启动应用服务器 python3 myflask.py
6.启动nginx,
./sbin/nginx
通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式
1.访问自己的nginx负载均衡的ip地址,查看结果
upstream分配策略
weight 权重
upstream django { server 10.0.0.10:8000 weight=5; server 10.0.0.11:9000 weight=10;#这个节点访问比率是大于8000的 }
nginx负载均衡调度算法
调度算法 概述 轮询 按时间顺序逐一分配到不同的后端服务器(默认) weight 加权轮询,weight值越大,分配到的访问几率越高 ip_hash 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器 url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器 least_conn 最少链接数,那个机器链接数少就分发
1.轮询(不做配置,默认轮询)
2.weight权重(优先级)
3.ip_hash配置,根据客户端ip哈希分配,不能和weight一起用
幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。