精华内容
下载资源
问答
  • php实现负载均衡
    千次阅读
    2022-04-07 18:08:26

    一、多台服务器
    192.168.1.1 主
    192.168.1.2 辅1
    192.168.1.3 辅2

    主服务器nginx 配置

    # 负载均衡模块
    upstream ceshi.com {
      server 192.168.1.2:80;
      server 192.168.1.3:80;
      server 192.168.1.1:8080; #主服务器 可用127.0.0.1 也可以不加本机
    }
    
    # 代理到本机8080端口 80已经被占用做转发 本机可不配置项目
    server{
            listen 8080;
            server_name ceshi.com;
            index index.html;
            root /www/wwwroot;
    }
    #监听80端口的访问,转发
    server{
            listen 80;
            server_name ceshi.com;
            location / {
                    proxy_pass http://ceshi.com;
    }
    
    

    辅服务器配置

    server{
            listen 80;
            server_name ceshi.com;
            root /www/wwwroot;
            location / {
                    index index.html;
            }
    }
    

    负载均衡四种模式
    一 、轮询 (默认)
    二、weight 权重
    weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,2的访问比率要比1的访问比率高一倍。
    用法
    upstream url {
    server ip:端口 weight=1;
    server ip:端口 weight=2;
    }
    三、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    用法
    upstream url{
    ip_hash;
    server ip:端口;
    server ip:端口;
    }
    四、 fair(第三方)
    后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

    upstream url{
    server ip:端口;
    server ip:端口;
    fair;
    }
    五、url_hash
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

    upstream url{
    server ip:端口;
    server ip:端口;
    hash $request_uri;
    hash_method crc32;
    }

    更多相关内容
  • 本文实例讲述了PHP实现负载均衡的加权轮询方法。分享给大家供大家参考,具体如下: 1. 负载均衡算法有哪些? 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际...
  • 本文实例讲述了PHP实现负载均衡session共享redis缓存操作。分享给大家供大家参考,具体如下: 1、首先先创建html表单页面 <meta chatset='utf-8'> <form action=se.php method=post> 帐号: ...
  • 主要介绍了PHP实现负载均衡下的session共用功能,结合实例形式分析了php基于memcache的session共享相关实现技巧,需要的朋友可以参考下
  • 〉另外一个功能就是作为反向代理服务器实现负载均衡 以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也...
  • Nginx如何实现负载均衡

    千次阅读 2021-10-24 15:03:15
     〉另外一个功能就是作为反向代理服务器实现负载均衡 以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也...

    nginx 这个轻量级、高性能的 web server 主要可以干两件事情:

      〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持);
      〉另外一个功能就是作为反向代理服务器实现负载均衡

      以下我们就来举例说明如何使用 nginx 实现负载均衡。因为nginx在处理并发方面的优势,现在这个应用非常常见。当然了Apache的 mod_proxy和mod_cache结合使用也可以实现对多台app server的反向代理和负载均衡,但是在并发处理方面apache还是没有 nginx擅长。

      1)环境:

      a. 我们本地是Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统。
      在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口)。在虚拟的Linux系统上安装apache(侦听80端口)。
      这样我们相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器(可以看作是小型的server cluster。;-) );

      b. nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口;
      nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。
      也就是说,可以把我们网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。

      c. 如下介绍两种方法实现server cluster的负载均衡。
      我们假设前端nginx(为127.0.0.1:80)仅仅包含一个静态页面index.html;
      后台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和test.php(里面测试代码为print “server1“;),另一台根目录仅仅放置一个test.php(里面测试代码为 print “server2“;)。

      2)针对不同请求 的负载均衡:

      a. 在最简单地构建反向代理的时候 (nginx仅仅处理静态不处理动态内容,动态内容交给后台的apache server来处理),我们具体的设置为:在nginx.conf中修改:
      复制代码 代码如下:

      location ~ \.php$ {
      proxy_pass 158.37.70.143:80 ;
      }

      〉 这样当客户端访问localhost:8080/index.html的时候,前端的nginx会自动进行响应;
      〉当用户访问localhost:8080/test.php的时候(这个时候nginx目录下根本就没有该文件),但是通过上面的设置 location ~ \.php$(表示正则表达式匹配以.php结尾的文件,详情参看location是如何定义和匹配的wiki.nginx.org/NginxHtt httpdule) ,nginx服务器会自动pass给 158.37.70.143的apache服务器了。该服务器下的test.php就会被自动解析,然后将html的结果页面返回给nginx,然后 nginx进行显示(如果nginx使用memcached模块或者squid还可以支持缓存),输出结果为打印server2。

      如上是最为简单的使用nginx做为反向代理服务器的例子;

      b. 我们现在对如上例子进行扩展,使其支持如上的两台服务器。
      我们设置nginx.conf的server模块部分,将对应部分修改为:
      复制代码 代码如下:

      location ^~ /phpMyAdmin/ {
      proxy_pass 127.0.0.1::80 ;
      }
      location ~ \.php$ {
      proxy_pass 158.37.70.143:80 ;
      }

      上面第一个部分location ^~ /phpMyAdmin/,表示不使用正则表达式匹配(^~),而是直接匹配,也就是如果客户端访问的 URL是以localhost:8080/test.phpMyAdm开头的话(本地的nginx目录下根本没有phpMyAdmin目录),nginx会自动pass到127.0.0.1:80 的Apache服务器,该服务器对phpMyAdmin目录下的页面进行解析,然后将结果发送给nginx,后者显示;
      如果客户端访问URL是localhost:8080/test.php的话,则会被pass到158.37.70.143:80 的apache进行处理。

      因此综上,我们实现了针对不同请求的负载均衡。
      〉如果用户访问静态页面index.html,最前端的nginx直接进行响应;
      〉如果用户访问test.php页面的话,158.37.70.143:80 的Apache进行响应;
      〉如果用户访问目录phpMyAdmin下的页面的话,127.0.0.1:80 的Apache进行响应;

      3)访问同一页面 的负载均衡:
      即用户访问localhost:8080/test.php  这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。

      a. 现在我们的情况是在windows下nginx是localhost侦听8080端口;
      两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。

      b. 因此重新配置nginx.conf为:
      〉首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义:
      复制代码 代码如下:

      upstream myCluster {
      server 127.0.0.1:80 ;
      server 158.37.70.143:80 ;
      }

      表示这个server cluster包含2台服务器
      〉然后在server模块中定义,负载均衡:
      复制代码 代码如下:

      location ~ \.php$ {
      proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
      }

      这样的话,如果访问localhost:8080/test.php的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。
      上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
      复制代码 代码如下:

      upstream myCluster {
      server 127.0.0.1:80 weight=5;
      server 158.37.70.143:80 ;
      }

      这样表示5/6的几率访问第一个server,1/6访问第二个。另外还可以定义max_fails和fail_timeout等参数。

      综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
      nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。

      通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。
      两种均衡:
      1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上;
      2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。
      实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。

    展开全文
  • 一、实验目的:负载均衡PHP应用二、逻辑构建:三、实验需要:4台虚拟机,一台作为客户端,一台作为VS,两台作为RS四、实验环境:VS的DIP要与RS的IP在同一个私网内,RS的默认网关为DIP;VS则要开启路由转发功能echo 1...

    一、实验目的:负载均衡PHP应用

    二、逻辑构建:

    3c8ce6380daa33c267ccb0e2e66a02de.png

    三、实验需要:4台虚拟机,一台作为客户端,一台作为VS,两台作为RS

    四、实验环境:VS的DIP要与RS的IP在同一个私网内,RS的默认网关为DIP;VS则要开启路由转发功能echo 1>/proc/sys/net/ipv4/ip_forword,注意防火墙和selinux都要关闭

    五、实验步骤:

    1、设置相应IP地址

    2、开启VS路由转发

    echo 1>/proc/sys/net/ipv4/ip_forword

    3、在RS上安装httpd、php、php-mysql、mariadb-server,并启动httpd和mariadb,

    a)编辑两个RS的/var/www/html/index.html的首页文件

    编辑RS1

    Vim /var/www/html/index.html

    Hello,I am RS 1,192.168.0.2

    编辑RS2

    Vim /var/www/html/index.html

    Hello,I am RS 1,192.168.0.4

    Systemctl start httpd

    b)设置RS1数据库

    systemctl start mariadb

    mysql –uroot –h127.0.0.1  #授权远程用户的连接

    >create databse wpdb;

    >grant all privileges on wpdb *.* to

    wpuser@’%’ identified by “wppass”;

    >quit

    4、布置VS规则

    ipvsadm -A -t 172.18.24.1:80 -s rr

    ipvsadm -a -t 172.18.24.1:80 -r

    192.168.0.2:80 -m

    ipvsadm -a -t 172.18.24.1:80 -r 192.168.0.4:80

    –m

    5、在客户端上检验:

    For i in {1..10};do curl

    http://172.18.24.1;done

    查看显示信息,判断是否按照制定规则进行轮询。如没有按照轮询显示效果,则重返上述步骤,检查修改,若显示效果正常则继续。

    6、在RS1上安装nfs-utils,并启动服务

    Yum install nfs-utils

    Systemctl start nfs

    7、在RS1创建共享文件download

    Mkdir /var/www/html/download

    Chown –R mysql.mysql /var/www/html/download

    Vim /etc/exports

    /var/www/html/download 192.168.0.4/24(rw,all_squash,anonuid=27,anongid=27)  #定义所有人压缩,27为mysql的uid,注意客户端必须也有个mysql其UID也是27

    Exports –ra

    把wordpress放置在共享文档里,并且给予其写权限

    Chmod –R o+w /var/www/html/download/wordpress

    8、RS2挂载共享文档

    Mkdir /var/www/html/download

    mount –t nfs 172.18.24.1: /var/www/html/download

    /var/www/html/download

    9、测试:前端访问WordPress,并检测WordPress是否有上传、读写等功能。

    六、实验总结:通过实验,客户端访问服务器的动态页面时候,需要会话保持,否则其会根据VS上设置的轮询规则,进行刷新,导致页面不能正常加载使用,并且RS服务器需要实现共享存储,才能确保信息的完整性。

    原创文章,作者:chenxu@magedu.com,如若转载,请注明出处:http://www.178linux.com/75120

    展开全文
  • PHP超级负载均衡

    2020-12-31 02:27:51
    摘要超级负载均衡旨在为解决服务不断扩展、机器不断增多、机器性能差异等问题,以增强系统的稳定性,自动分配请求压力。算法实现了多个模型和均衡策略,能通过配置实现随机、轮询、一致hash等。同时也能实现跨机房的...

    摘要

    超级负载均衡旨在为解决服务不断扩展、机器不断增多、机器性能差异等问题,以增强系统的稳定性,自动分配请求压力。算法实现了多个模型和均衡策略,能通过配置实现随机、轮询、一致hash等。同时也能实现跨机房的相关分配。现已经在多个系统中使用。

    TAG

    负载均衡

    内容

    现有系统中存在的问题:

    1.慢连接、瞬时访问慢。

    场景一:

    如果后端新增加机器,cache命中率低,因此响应速度慢,但是能连接上且不超时。如果ui持续访问就会把ui夯住。

    场景二:

    如果后端模块某一台机器响应较慢。如果前端持续访问就会被夯住。

    2.死机。

    场景一:

    能断断续续响应请求,不过速度很慢。造成ui夯住。

    3.混合部署。

    场景一:

    多个模块在同一机器上,项目影响。

    4.机器权重。

    场景一:

    老机器,性能差;新机器,性能彪悍。因此他们应该承载不同的压力。

    5.跨机房冗余。

    场景一:

    后端对cache依赖很高的模块,因为采用的是一致hash算法,如果挂掉一台机器,对另外的机器cache命中率冲击很大。因此希望将对这个机器的请求均衡到另外一个机房。

    6. php和c使用同样的策略。

    现在php和c希望能使用的策略实际上是有很大的一致。为了避免重复开发,php和c希望采用同样的负载均衡库。

    要解决的问题:

    设计思路:

    1. 根据均衡策略计算出的均衡值对Server进行逆序排序。

    2. 负载选择。对步骤1排序后的Server按以下顺序进行选择:

    a、按连接失败概率进行选择。

    注:横轴代表失败次数,纵轴代表选择的概率。

    Cconn:一段区间内失败次数

    f(Cconn):连接概率,取值范围在(0,100]

    b、按健康状态选择。

    整个模型基于服务处理时间的收敛性。

    分析:

    1) 如果机器状态良好,则平均处理时间会保持在一个稳定水平;即使是小波动,也会较快平稳在一个状态。

    2) 如果机器开始出现问题,处理时间会开始增长。如果增长持续超过一段时间,则说明有可能会影响服务;如果一段时间后稳定了,说明对请求没有太多影响。

    f(healthy):机器健康状态,取值范围[0,1]

    select(healthy):机器选择概率,取值范围[R,1]

    c、如果所有机器都没选中,则随机选择一台机器进行服务。

    3. 机器流量均分。

    不同的机器处理能力是不一样的。当按照步骤2选择了某台机器,需要将其他处理时间为他的1/T(T>=2)的机器也选取出来,将部分压力分给对应的机器。

    设k台机器的处理时间分别是t1, t2,…,tk, 选中的机器id=i,比该机器处理能力高的机器时间分别为p1,p2,..,pr, (其中pj × T <= ti)。设一段时间总访问量为Y,每台机器理论上的访问量应该为Vg=Y/k。而实际的Vr=Y/(ti * (1/t1+1/t2+…+1/tk))。则应该分出Vg-Vr的流量给pj。pj的流量比例为1/p1:1/p2:…:1/pr

    算法设计:

    A、均衡算法

    1. 一致hash算法。

    将每个server的ip和port加上balance_key三者做字符串拼接后,做md5签名。

    value(server) = md5(server_ip + server_port + balance_key)

    2. 随机算法。

    value(server) = random();

    3. 轮询算法。

    value(server) =((server.id – (rounds % server_count)) + server_count) % server_count

    4. 多个选一算法。

    rank初始化为1, 如果默认的server失败,则rank+1

    value(server) =((server.id – (rank % server_count)) + server_count) % server_count

    B、负载算法

    1. 连接状态算法。

    a、对每一个server开辟一个状态队列。bool queue[K] 用来统计失败次数。每次有坏状态进队,计数加一。如果有坏状态出队,则计数减一。

    b、按照f(Cconn)公式计算出选择概率。

    c、利用rand()%100是否在[0,f(Cconn)]来决定是否选择该机器。

    2. 健康状态算法。

    a、每台机器维持一个一秒钟内的处理时间T和次数C。

    b、当一秒过去以后,将T、C计算为平均处理时间R。

    c、每M秒,统计每台机器最近一段时间的平均处理时间, 按照公式select(healthy)算出选择概率。

    d、利用rand()%100是否在[0, select(healthy)*100]来决定是否选择该机器。

    C、流量均分

    按照策略选出满足要求的机器,按照流量均分公式进行流量分配。

    分配时按照balance_key+server方式和random()来分配机器, 尽量保证请求落在同一台机器。

    展开全文
  • GRPC 负载均衡实现

    2021-11-12 11:24:06
    在负载均衡方面不如dubbo的组件那么丰富,但是其提供了服务发现的接口, 可以通过实现其接口,灵活实现负载均衡功能。 下面通过本地配置文件,启动时注册可用的服务,可以快速实现负载均衡功能。 grpc: hosts: host1...
  • Nginx + Tomcat 实现负载均衡

    万次阅读 2021-10-19 08:49:53
    而我们在 Linux 平台上通过 Nginx + PHP 实现动静分离,而实际生产中往往一台 nginx 需要 “对应” 多个动态处理的服务(即 tomcat),所以如何将前端接收到的动态请求转交给后端多个 tomcat 处理,是我们此处研究的...
  • 于中、小型企业,如果没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过 Nginx Keepalived 实现 Nginx 负载均衡器双机互备,任意一台机器发生故障,对方都能够将虚拟IP...
  • PHP+Nginx+宝塔+rsync代码同步 实现Nginx负载均衡 作为一个PHP菜鸟,最近闲着没事,就想搭建一个Nginx试试,因为重来没有搭过,特此记录一下,也希望能为新入门的兄弟们提供一点帮助! 第一步 准备服务器,这里我使用了两台...
  • 使用Nginx实现负载均衡

    万次阅读 多人点赞 2018-08-28 17:48:52
    负载均衡这里面涉及的东西相对也是比较多的,理论就不说太多了,网上,书上很多,今天我们就利用Nginx服务器来实现一个简单的负载均衡 负载均衡算法 源地址哈希法:根据获取客户端的IP地址,通过哈...
  • 用nginx实现负载均衡

    千次阅读 2021-06-25 16:05:09
    负载均衡 反向代理 操作步骤 首先检查自己电脑上是否克隆好了3个centos虚拟机,若未克隆,先克隆 最后的: 在虚拟机server2、server3中进行如下操作 首先打开终端进入root su root 安装nginx 配置两个源站 ...
  • nginx实现四层负载均衡

    千次阅读 2021-08-20 19:36:03
    文章目录一、四层负载均衡(TCP层)1.1 什么是四层负载均衡1.2 四层负载均衡应用场景1.3 四层负载均衡优缺点1.4 nginx四层与LVS四层的区别二、四层负载均衡场景实践2.1 配置示例2.2 实现TCP协议负载均衡2.3 基于端口...
  • PHP写的可对读数据库进行负载均衡的插件,在连接数据库之前调用该插件的Get_con函数可获取数据库端连接地址,用户名密码等,通过轮询和权重两种算法(后面会加上LRU算法)进行数据库连接选择,目前支持集群形式的...
  • 宝塔Nginx负载均衡

    2022-05-13 10:22:39
    宝塔Nginx负载均衡 注意点: 配置了负载均衡后,前端没有分配服务器,先检查后端服务器的端口是否被放行 在站点的配置文件中添加多个后端服务器 upstream myschool { server 124.223.67.254:9081 weight=2; # 124....
  • Nginx 不仅可以作为一个 Web 服务器或反向代理服务器,还可以按照权重、轮询、 ip hash、 URL hash 等多种方式实现对后端服务器的负载均衡。本节将对负载均衡实现的原理以及具体配置进行详细讲解。 什么是负载均衡 ...
  • nginx实现负载均衡的原理及策略

    万次阅读 2018-09-18 20:58:16
    负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台...
  • 使用Nginx轻松实现开源负载均衡 张宴 2008.9.20 北京 个人简介 张宴曾在新浪等公司任系统工程师系统架构师工作内容主要涉及服务器系统架构设计与部署系统运维与调优网络故障解决网站后端以及接口类PHP程序开发Unix...
  • win10下实现负载均衡

    千次阅读 2020-08-11 21:51:22
    #设定负载均衡的服务器列表 upstream tomcatserverCms { #weigth参数表示权值,权值越高被分配到的几率越大 server 10.204.3.223:8080 weight=3000 max_fails=2 fail_timeout=30s;#真实服务器A server 10.204.3.20:...
  • apache配置负载均衡

    2017-10-26 11:10:57
    Apache从软件上低投入实现访问请求分流,提高访问性能, 负载均衡就是把所有用户的访问压力分散到多台服务器上, 也可以分散到多个tomcat里
  • Linux下实现nginx+Tomcat 的负载均衡

    千次阅读 2022-04-19 22:41:37
    (1)Nginx 服务端 :安装 Nginx反向代理两个Tomcat站点实现负载均衡 (2) 配置 nginx (3) 重启验证: (4)主机访问nginx服务器(192.168.80.147): 简述: 当请求访问到我这台 Nginx 服务器时我本身不...
  • 应用Docker容器技术部署Nginx负载均衡

    千次阅读 2022-03-28 18:31:17
    利用Docker容器技术实现如下负载均衡 # 搜索nginx镜像 docker search nginx # 拉取nginx镜像 docker pull nginx # 检查镜像是否拉取成功 docker images # 运行一个测试的nginx docker run -d --name nginxtest ...
  • 如何用Haproxy+nginx实现负载均衡

    千次阅读 2018-11-09 20:45:58
    7 修改nginx的默认界面内容(方便我们查看负载均衡效果) nginx 的默认页面放在/usr/local/nginx/html [root@node1 html]# vi index.html <h1>NO.2 7 访问192.168.194.144查看是否部署成功 同理部署...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,460
精华内容 19,784
关键字:

php实现负载均衡