linux集群技术(三)--七层负载均衡-nginx

news2024/11/27 18:40:10
  1. nginx特点
  2. nginx优势、缺点
  3. 生产架构
  4. nginx 7层负载均衡语法示例
  5. nginx负载均衡算法
  6. 测试案例
  7. 生产案例

1.nginx特点

1. 功能强大,性能卓越,运行稳定。
2. 配置简单灵活。
3. 能够自动剔除工作不正常的后端服务器。
4. 上传文件使用异步模式。client---nginx---web1 web2 web3  lvs同步请求 DR client -->dr---web1
5. 支持多种分配策略,可以分配权重,分配方式灵活。

2.nginx优势、缺点

nginx复制用户请求,在后端服务器出现问题时。nginx会再复制一份请求发给另一台后端服务器。
lvs则在这种情况,只能用户重新发请求

流量会经过nginx,nginx成为瓶颈

3.生产架构

4.nginx 7层负载均衡语法示例

通过location对不同的请求进行进行负载均衡,因为通过http协议,所以称作7层

location  / {

}
location ~ \.html${
proxy_pass ...
}
location ~ \.php${
proxy_pass ...
}
location ~ \.(jpg|png|css|js)${
proxy_pass ...
}     

5.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进行匹配.可以进行重定向或者进行新的代理 负载均衡

6.测试案例

        6.1环境

client:client
nginx:nginx
apache:web1
apache:web2

        6.2步骤

        (一)准备工作

1.关闭防火墙和selinux

2.域名解析

3.同步时间
    计划任务执行如下命令
    ntpdate  时间服务器地址

4.准备web1、、web2页面

        (二)配置nginx

yum install -y epel-release

yum  install -y nginx

vim  /etc/nginx/ngxin.conf
    upstream  html {
    server web1:80;
    server web2:80;
}
server {

location / {
proxy_pass   http://html;
}
}

        (三)测试负载均衡

访问nginx服务器。能交替的看到web1和web2

        6.3 动静分离

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;
        }
}

4.客户端测试:

7.生产案例

        7.1

需求:

Nginx实现七层的负载均衡

调度到不同组上游服务器
1. 动静分离
2. 网站进行分区

案例:

一、实施过程
1. 根据站点分区进行调度
http {
    upstream news {
        server 192.168.1.11:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.12:80 weight=2 max_fails=2 fail_timeout=2;
        server 192.168.1.13:80 weight=2 max_fails=2 fail_timeout=2;
       }
       
    upstream milis {
        server 192.168.1.21:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.22:80 weight=2 max_fails=2 fail_timeout=2;
        server 192.168.1.23:80 weight=2 max_fails=2 fail_timeout=2;
       }
       
     upstream videos {
        server 192.168.1.31:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.32:80 weight=2 max_fails=2 fail_timeout=2;
        server 192.168.1.33:80 weight=2 max_fails=2 fail_timeout=2;
       }
       
     upstream images {
        server 192.168.1.41:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.42:80 weight=2 max_fails=2 fail_timeout=2;
        server 192.168.1.43:80 weight=2 max_fails=2 fail_timeout=2;
       }
       
      upstream others {
        server 192.168.1.51:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.52:80 weight=2 max_fails=2 fail_timeout=2;
        server 192.168.1.53:80 weight=2 max_fails=2 fail_timeout=2;
       }
       
     server {
              location / {
              proxy_pass http://others;
              }
              
              location /news {
              proxy_pass http://news;
              }
              
              location /mili {
              proxy_pass http://milis;
              }
              
              location ~* \.(wmv|mp4|rmvb)$ {
              proxy_pass http://videos;
              }
              
              location ~* \.(png|gif|jpg)$ {
              proxy_pass http://images;
              }
}
 

2. 根据动静分离进行调度
http {
     upstream htmlservers {
        server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.4:80 weight=2 max_fails=2 fail_timeout=2;
         }
         
     upstream phpservers {
        server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=2;
        server 192.168.1.4:80 weight=2 max_fails=2 fail_timeout=2;
         }
         
      server {
              location ~* \.html$ {
              proxy_pass http://htmlservers;
              }
              
              location ~* \.php$ {
              proxy_pass http://phpservers;
              }
      }
 }


二、Keepalived实现调度器HA
注:主/备调度器均能够实现正常调度
1. 主/备调度器安装软件
[root@master ~]# yum -y install ipvsadm keepalived 
[root@backup ~]# yum -y install ipvsadm keepalived

2. Keepalived
Master 
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id director1            //辅助改为director2
}

vrrp_instance VI_1 {
    state BACKUP
    nopreempt                
    interface eth0                //心跳接口,尽量单独连接心跳
    virtual_router_id 80        //MASTER,BACKUP一致
    priority 100                    //辅助改为50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.80
    }
}

BACKUP


3. 启动KeepAlived(主备均启动)
# chkconfig keepalived on
# service keepalived start
# ip addr


4. 扩展对调度器Nginx健康检查(可选)
思路:
让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived
a. script
[root@master ~]# cat /etc/keepalived/check_nginx_status.sh
#!/bin/bash                                                
/usr/bin/curl -I http://localhost &>/dev/null    
if [ $? -ne 0 ];then                                        
    /etc/init.d/keepalived stop                        
fi                                                                
[root@master ~]# chmod a+x /etc/keepalived/check_nginx_status.sh

b. keepalived使用script
! Configuration File for keepalived

global_defs {
   router_id director1
}

vrrp_script check_nginx {
   script "/etc/keepalived/check_nginx_status.sh"
   interval 5
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    nopreempt
    virtual_router_id 90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass tianyun
    }
    virtual_ipaddress {
        192.168.1.80
    }

    track_script {
        check_nginx
    }
}

        7.2关于php和php-fpm的一点点区别

--------------------
proxy_pass   
    后端服务器用的非php独立进程
    apache+php模块
fastcgi_pass
    后端服务器用的是php-fpm
    php-fpm(fastcgi形式的php)

后端服务器部署详细过程:
安装软件:
    # yum install nginx php php-fpm -y
    # vim /etc/nginx/nginx.conf   //添加php配置
    在server里面添加如下配置:
    location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
   
   修改php-fpm进程账户并开启php-fpm的进程: 端口是9000  
   #vim /etc/php-fpm.d/www.conf  //修改如下参数,默认值是apache
   user = nginx
   group = nginx
   
   为什么设置成nginx:
       因为nginx.conf配置的账户为nginx
   
   # systemctl start php-fpm
       

前端nginx反向代理服务器:
    upstream web {
         server 10.0.0.21;
         server 10.0.0.22;
        }
    upstream phpserver {
         server 10.0.0.23;
         server 10.0.0.24;
        }       #上面的配置写到http里面server外面
       
    server {
        listen 80;
        server_name www.baidu.com;
        location / {                        #html的配置
        proxy_pass http://web;
        }

        location ~* \.php$ {         #php的配置
        proxy_pass http://phpserver;
        }
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp: 基础开发官网文档

1、uniapp官网文档:https://uniapp.dcloud.net.cn/component/2、uView跨端UI组件库:http://v1.uviewui.com/components/intro.html3、lunch-request(类似axios的请求库):https://www.quanzhan.co/luch-request/handboo…

图神经网络基础 Graph 图以及python实现

摘要: 本文将介绍图的基本知识、无向图、有向图、邻接矩阵 python实现:度、连通分量、强连通图、弱连通图、图直径、度中心性、特征向量中心性、中介中心性、连接中心性等基本概念。 python计算代码: 先安装依赖: pip install n…

Java-模块化

模块的基本使用 模块使用步骤 创建模块(创建模块,创建包,创建类,定义方法) -创建两个模块myOne,myTwo在模块的src目录下创建module-info.java的描述性文件,该文件专门定义模块名,访问权限&#…

一文读懂函数编程及其工作原理

微软MVP实验室研究员 马洪喜-微软 MVP 19年研发经验 云计算咨询顾问专家 容器云及基础架构云技术专家 DevOps 及微服务咨询专家 什么是函数编程 我先用通俗的大白话给大家解释一下函数(Functions, Function as a Service, FaaS)的几个要点,这样看后面示例时才不…

跑步带的耳机选择啥样的好、推荐几款跑步专用耳机

我是个比较喜欢运动的人,每天下班都会在小区湖边跑步健身,每次跑步要是少了耳机,那可没什么兴趣跑了,喜欢跑步的时候对着音乐的节奏跑,所以我的耳机基本上是用的比较紧实不易掉落的无线耳机。接下来我来为大家介绍下我…

ChatGPT 可收费的那种产品该如何实现?一点尝试

导读|时隔两个月,勇哥终于把chatGPT生成SQL的功能发布上线了,支持统计分析查询、创建表、数据生成等多种全面的SQL DDL生成能力,本文就和大家聊聊相关功能的使用和背后实现逻辑,并希望相关功能能帮助大家在工作中提升一定的工作效…

手把手搭建springboot项目05-springboot整合Redis及其业务场景

目录前言一、食用步骤1.1 安装步骤1.1.1 客户端安装1.2 添加依赖1.3 修改配置1.4 项目使用1.5 序列化二、应用场景2.1 缓存2.2.分布式锁2.2.1 redis实现2.2.2 使用Redisson 作为分布式锁2.3 全局ID、计数器、限流2.4 购物车2.5 消息队列 (List)2.6 点赞、签到、打卡 (Set)2.7 筛…

如何弄小程序?公司企业可以这样做小程序

公司企业现在对于小程序的需求已经是刚需了,即使已经有官网的情况下,也会考虑再弄一个小程序来做小程序官网。那么公司企业如何弄小程序呢?下面跟大家说说方法。 流程一、找小程序服务商 由于一些公司企业并不像现在的互联网公司企业那样有…

考试系统 (springboot+vue前后端分离)

系统图片 下载链接 地址: http://www.gxcode.top/code 介绍 一款多角色在线培训考试系统,系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能,考试流程完善。 技术栈 Spr…

Java8中@Contended和伪共享

Java8引入了Contented这个新的注解来减少伪共享(False Sharing)的发生。 sun.misc.Contended注解是被设计用来解决伪共享问题的 文章目录1.缓存行2.伪共享(False Sharing)2.1 CPU的缓存机制3.填充(Padding)4.Contended方式4.总结1.缓存行 CPU读取内存数据时并非一次只读一个字…

ATTCK实战系列——红队实战(二)

网络配置 网卡: WEB: PC: DC: IPWEB10.10.10.80(内)/192.168.111.80(外)PC10.10.10.201(内)/192.168.111.201(外)DC10.10.10.10物理机…

评论字数统计案例、评论回车发布、 Tab 栏切换、验证码倒计时、显示与隐藏密码——DOM事件

目录 一、DOM事件 1. 评论字数统计案例 2. 评论回车发布 3. Tab 栏切换 4. 验证码倒计时 5. 显示与隐藏密码 一、DOM事件 1. 评论字数统计案例 该案例中的显示输入字数及最大字数模块.wrapper .total 刚开始是看不见的,使用的是不透明度(opacit…

量化交易-单因子分析-alphalens

1. 数据准备 1.1 计算因子IC重要函数 def get_clean_factor_and_forward_returns(factor,prices,groupbyNone,binning_by_groupFalse,quantiles5,binsNone,periods(1, 5, 10),filter_zscore20,groupby_labelsNone,max_loss0.35,zero_awareFalse,cumulative_returnsTrue)facto…

Nginx优化与防盗链

Nginx优化与防盗链 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! &#x1f4c…

图文并茂详解NAT协议(含实例分析)

什么是 NAT 协议 我们的计算机要想访问互联网上的信息,就需要一个地址,而且这个地址是大家(其他主机)所认可的,是公共的,这个地址也叫做公有 IP 地址。 与之相对的,除了公有 IP 地址外&#x…

Python自动化测试框架【Allure-pytest功能特性介绍】

Python自动化测试框架【Allure-pytest功能特性介绍】 目录:导读 前言 生成报告 测试代码 目录结构 Allure特性 Environment Categories Fixtures and Finalizers allure.attach 总结 写在最后 前言 Allure框架是一个灵活的轻量级多语言测试报告工具&am…

【PMP考试最新解读】第七版《PMBOK》应该如何备考?(含最新资料)

PMP新版大纲加入了ACP敏捷管理的内容,而且还不少,敏捷混合题型占到了 50%,前不久官方也发了通知8月启用第七版《PMBOK》,大家都觉得考试难度提升了,我从新考纲考完下来,最开始也被折磨过一段时间&#xff0…

玩游戏用哪个牌子的蓝牙耳机最好?打游戏无延迟的蓝牙耳机

作为一名苦逼的打工人,从早忙到黑,每天最期待的事莫过于下班回到家或是周末闲暇时光,来两把王者或吃鸡,配合无线游戏耳机,效果直接拉满,下面分享几款打游戏无延迟的蓝牙耳机。 一、南卡小音舱蓝牙耳机 蓝…

孪生工厂:机械臂加工产线 HMI 监控界面

2018 年,世界经济论坛(WEF)携手麦肯锡公司共同倡议并正式启动了全球“灯塔工厂网络项目”(Lighthouse Network),共同遴选率先应用工业革命 4.0 技术实现企业盈利和持续发展的创新者与示范者。这就使得工厂系统需要对各流水线及生产运行成本方面进行多角度…

设计模式(十五)-面向对象概念

软件设计(十五)-UML建模(下)https://blog.csdn.net/ke1ying/article/details/129152487 一、设计原则 1、单一职责:设计目的单一的类。 2、开放-封闭原则:对扩展开放,对修改关闭。 3、里氏替…