負荷分散とは何ですか? Apacheで負荷分散を設定するにはどうすればよいですか? Apacheの負荷分散設定方法については以下の記事で紹介していますので、ご参考になれば幸いです。
#負荷分散とは
負荷分散 (負荷分散) は、分散システム アーキテクチャの一部です。設計 考慮する必要がある要素の 1 つは、通常、実行のために複数のオペレーティング ユニットにリクエスト/データを [均等に] 割り当てることを指します。負荷分散の鍵は、[均等に] です。
#一般的な負荷分散ソリューション
##一般的なインターネット分散アーキテクチャは上記のとおりで、次のように分かれています。
。各ダウンストリームには複数のアップストリーム呼び出しがあることがわかりますが、各アップストリームが各ダウンストリームに均等にアクセスする限り、「リクエスト/データを複数の演算ユニットに均等に分散して実行する」ことが実現できます。
[クライアント層 -> リバースプロキシ層]の負荷分散
[クライアント層]への負荷分散[リバース プロキシ レイヤー] は、「
」によって実現されます。DNS サーバーは ドメイン名に対して複数の解決 IP で構成されており、各 DNS 解決リクエストにアクセスします。DNS サーバーはポーリングし、これらの ip を返して、各 IP の解決確率が同じであることを確認します。これらの IP は nginx の外部ネットワーク IP であるため、各 nginx のリクエスト分散もバランスがとれます。
[リバース プロキシ レイヤー - > サイト レイヤー] 負荷分散
[リバース プロキシ レイヤー] 負荷分散[サイト レイヤー] は
を変更することで、さまざまな負荷分散戦略を実装できます。 1) リクエスト ポーリング: DNS ポーリングと同様に、リクエストは各 Web サーバーに順番にルーティングされます
2 )最小接続ルーティング: どの Web サーバーの接続数が少ないか、どの Web サーバーがルーティングされるか
3) IP ハッシュ: Web サーバーは、アクセスしているユーザーの IP ハッシュ値に従ってルーティングされます。ユーザーの IP 分布が均一である限り、リクエストは理論的には均一です。IP ハッシュ バランシング方式でこれを実現できます。同じユーザーのリクエストは常に同じ Web サーバーに送られます。この戦略は、次のようなステートフル サービスに適しています。 as session (58 Chen Jian のコメント: これを行うことはできますが、強くお勧めしません。サイト層のステートレス性は分散アーキテクチャ設計の基本原則の 1 つです。セッションをデータ層に保存するのが最善です)
#4)…[サイト層 -> サービス層] 負荷分散
[サイト層] から [サービス層] への負荷分散は、「サービス接続プール
」を通じて実現されます。
アップストリーム接続プールはダウンストリーム サービスとの複数の接続を確立し、各リクエストはダウンストリーム サービスにアクセスするための接続を「ランダムに」選択します。 前の記事「RPC クライアント実装の詳細」には、ロード バランシング、フェイルオーバー、タイムアウト処理について詳しく説明されています。リンクをクリックして参照してください。ここでは展開しません。
[データ層]の負荷分散データ量が多い場合、データ層(db、キャッシュ)はデータを水平に分割するため、データ層の負荷分散はさらに複雑で、「データ分散」と「リクエスト分散」に分かれています。
データバランスとは、水平分割後の各サービス(db、キャッシュ)のデータ量がほぼ同じであることを指します。
リクエストのバランスとは、水平分割後の各サービス (db、キャッシュ) のリクエスト量がほぼ同じであることを指します。
業界では、一般的な水平方向のセグメンテーション方法がいくつかあります:1. 範囲に応じた水平方向のセグメンテーション
各データ サービスは、特定範囲のデータを保存します、上の図は例です:
user0 サービス、uid 範囲 1 ~ 1kw# を保存します# #user1 サービス、ストレージ uid 範囲 1kw-2kw このソリューションの利点は次のとおりです:
(1) ルールは単純で、サービスはルーティングする uid 範囲を決定するだけで済みます。
##(2) データバランスが良くなる(3) 拡張が比較的容易で、任意の場所にuid [2kw, 3kw]のデータサービスを追加できます。時間欠点は次のとおりです:(1) リクエストの負荷は必ずしも均等ではありません。一般に、新規登録ユーザーの方が古いユーザーよりもアクティブになり、広範囲のサービス リクエストに対するプレッシャーが大きくなります。
2. ID ハッシュの水平セグメンテーションに従って、
各データ サービスは、特定のキー値でハッシュされたデータの一部を格納します、上に示すように 例:
user0 サービス、偶数の uid データを保存します
user1 サービス、奇数の uid データを保存します
このソリューションの利点は次のとおりです:
(1) ルールは単純です。サービスは、対応するストレージ サービスにルーティングされる uid をハッシュするだけで済みます。
(2) データ バランスは良好です
(3) ) リクエストの均一性が良い
デメリットは:
#(1) 拡張が容易ではない データサービスを拡張する場合、ハッシュ方式が変わるとデータ移行が必要になる場合があります#概要負荷分散 (ロード バランス) は、分散システム アーキテクチャの設計において考慮する必要がある要素の 1 つであり、通常、リクエスト/データを [均等に割り当てること] を指します。 ] を複数のオペレーティング ユニットに実行させます。負荷分散の鍵は [均等に] です。
(1) [クライアント層]から[リバースプロキシ層]への負荷分散は「DNSポーリング」により実現します
(2) [リバースプロキシ層]から[サイト層]への負荷分散「nginx」を通じて実現されます
#(3) [サイト層] から [サービス層] への負荷分散は「サービス接続プール」を通じて実現されます (4) [データ層] 負荷分散は必要です「データバランス」と「リクエストバランス」の2点を考慮する 一般的な方法としては「範囲による水平分割」「ハッシュ水平分割」 Apache負荷分散設定方法 一般的に、負荷分散とは、負荷分散の目的を達成するために、クライアントのリクエストをバックエンド上のさまざまな実サーバーに分散することです。もう 1 つの方法は、2 台のサーバーを使用し、1 台をメイン サーバー (マスター) として、もう 1 台をホット バックアップ (ホット スタンバイ) として使用することです。すべてのリクエストはメイン サーバーに与えられ、メイン サーバーがダウンすると、すぐにメイン サーバーに切り替えられます。バックアップ サーバー システム全体の可用性を向上させるために
1. 負荷分散設定
1). 基本構成
Apache は、上記 2 つのニーズを満たすことができます。まず、負荷分散を行う方法について説明します。 Apache サーバーのドメイン名が www.a.com であると仮定すると、最初に Apache のいくつかのモジュールを有効にする必要があります。コードは次のとおりです。
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_http_module modules/mod_proxy_http.so
次に、次の構成を追加します:
コードは次のとおりです:
ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://node-a.myserver.com:8080 BalancerMember http://node-b.myserver.com:8080 </Proxy> ProxyPass / balancer://mycluster/ # 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!! <Location /balancer-manager> SetHandler balancer-manager order Deny,Allow Deny from all Allow from localhost </Location>
出错提示: 访问网页提示Internal Serveral Error,察看error.log文件
[warn] proxy: No protocol handler was valid for the URL /admin/login_form. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
バランサー マネージャー インターフェイスを開くと、リクエストが均等に分散されていることがわかります。
如果不想平均分配怎么办?给 BalancerMember 加上 loadfactor 参数即可,取值范围为1-100。比如你有三台服务器,负载分配比例为 7:2:1,只需这样设置:
Httpd.conf代码
ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://node-a.myserver.com:8080 loadfactor=7 BalancerMember http://node-b.myserver.com:8080 loadfactor=2 BalancerMember http://node-c.myserver.com:8080 loadfactor=1 </Proxy> ProxyPass / balancer://mycluster
3).负载分配算法
默认情况下,负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用 lbmethod 属性。如:
代码如下:
ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://node-a.myserver.com:8080 loadfactor=7 BalancerMember http://node-b.myserver.com:8080 loadfactor=2 BalancerMember http://node-c.myserver.com:8080 loadfactor=1 </Proxy> ProxyPass / balancer://mycluster ProxySet lbmethod=bytraffic
lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
各种算法的原理请参见Apache的文档。
2. 热备份(Hot Standby)
热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:
代码如下:
ProxyRequests Off <Proxy balancer://mycluster> BalancerMember http://node-a.myserver.com:8080 BalancerMember http://node-b.myserver.com:8080 status=+H </Proxy> ProxyPass / balancer://mycluster
从 balancer-manager 界面中可以看到,请求总是流向 node-a ,一旦node-a挂掉, Apache会检测到错误并把请求分流给 node-b。Apache会每隔几分钟检测一下 node-a 的状况,如果node-a恢复,就继续使用node-a。
apache负载均衡的安装和实现方法
其实无论是分布式,数据缓存,还是负载均衡,无非就是改善网站的性能瓶颈,在网站源码不做优化的情况下,负载均衡可以说是最直接的手段了。其实抛开这个名词,放开了说,就是希望用户能够分流,也就是说把所有用户的访问压力分散到多台服务器上,也可以分散到多个tomcat里,如果一台服务器装多个tomcat,那么即使是负载均衡,性能也提高不了太多,不过可以提高稳定性,即容错性。当其中一个主tomcat当掉,其他的tomcat也可以补上,因为tomcat之间实现了Session共享。待tomcat服务器修复后再次启动,就会自动拷贝所有session数据,然后加入集群。这样就可以不间断的提供服务。如果要真正从本质上提升性能,必须要分布到多台服务器。同样tomcat也可以做到。网上相关资料比较多,可以很方便的查到,但是质量不算高。我希望可以通过这篇随笔,系统的总结。
本文的 例子是同一台服务器上运行两个tomcat,做两个tomcat之间的负载均衡。其实多台服务器各配置一个tomcat也可以,而且那样的话,可以使用安装版的tomcat,而不用是下文中的免安装的tomcat,而且tomcat端口配置也就不用修改了。下文也会提到。
tomcat的负载均衡需要apache服务器的加入来实现。在进行配置之前请先卸载调已安装的tomcat,然后检查apache的版本。我这次配置使用的是apache-tomcat-6.0.18免安装版本,我亲自测试后推断安装版的tomcat在同一台机子上会不能启动两个以上,可能是因为安装版的tomcat侵入了系统,导致即使在server.xml里修改了配置,还是会引起冲突。所以我使用tomcat免安装版。
apache使用的是apache_2.2.11-win32-x86-no_ssl.msi。如果版本低于2.2Apache负载均衡的配置要有所不同,因为这个2.2.11和2.2.8版本集成了jk2等负载均衡工具,所以配置要简单许多。别的版本我没有具体测试,有待考究。这两个软件可以到官方网站下载。
把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"It works!"的页面就代表Apache已经正常工作了。把tomcat解压到任意目录,赋值一个另命名。起名和路径对配置没有影响。但要保证端口不要冲突,如果装有Oracle或IIS的用户需要修改或关闭相关接口的服务。当然jdk的配置也是必须的,这个不再过多叙述。
想要达到负载均衡的目的,首先,在Apache安装目录下找到conf/httpd.conf文件,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。
代码如下:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so
向下拉动文档找到
然后打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上
代码如下:
<VirtualHost *:80> ServerAdmin 管理员邮箱 ServerName localhost ServerAlias localhost ProxyPass / balancer://sy/ stickysession=jsessionid nofailover=On ProxyPassReverse / balancer://sy/ ErrorLog "logs/sy-error.log" CustomLog "logs/sy-access.log" common </VirtualHost>
然后回到httpd.conf,在文档最下面加上
代码如下:
ProxyRequests Off <proxy balancer://sy> BalancerMember ajp://127.0.0.1:8009 loadfactor=1 route=jvm1 BalancerMember ajp://127.0.0.1:9009 loadfactor=1 route=jvm2 </proxy>
ProxyRequests Off 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了。route参数对应后续tomcat负载均衡配置中的引擎路径(jvmRoute)
以上がApache で負荷分散を構成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。