Heim > Betrieb und Instandhaltung > Apache > So konfigurieren Sie den Lastausgleich in Apache

So konfigurieren Sie den Lastausgleich in Apache

步履不停
Freigeben: 2022-04-07 18:52:58
nach vorne
11737 Leute haben es durchsucht

Was ist Lastausgleich? Wie konfiguriere ich den Lastausgleich in Apache? Der folgende Artikel stellt Ihnen die Konfigurationsmethode für den Apache-Lastausgleich vor. Ich hoffe, dass er für Sie hilfreich ist.

So konfigurieren Sie den Lastausgleich in Apache

Was ist Lastausgleich?

Lastausgleich ist ein Teil des verteilten Systemarchitekturdesigns. Einer der Faktoren, die berücksichtigt werden müssen, beziehen sich normalerweise auf die gleichmäßige Zuweisung von Anforderungen/Daten an mehrere Betriebseinheiten zur Ausführung. Der Schlüssel zum Lastausgleich ist [gleichmäßig] .

Gemeinsame Lastausgleichslösungen


Gemeinsame verteilte Internetarchitekturen sind wie oben, unterteilt in Client-Schicht, Reverse-Proxy-Nginx-Schicht, Site-Schicht, Service-Schicht, Datenschicht. Es ist ersichtlich, dass jeder Downstream mehrere Upstream-Aufrufe hat. Solange jeder Upstream gleichmäßig auf jeden Downstream zugreift, kann eine „gleichmäßige Verteilung der Anforderungen/Daten auf mehrere Operationseinheiten zur Ausführung“ erreicht werden.

Lastausgleich der [Client-Schicht->Reverse-Proxy-Schicht]


[Client-Schicht] Lastausgleich auf Die [Reverse-Proxy-Schicht] wird durch „DNS-Abfrage“ erreicht: Der DNS-Server wird mit mehreren Auflösungs-IPs für einen Domänennamen konfiguriert, und auf jede DNS-Auflösungsanforderung wird zugegriffen. Der DNS-Server fragt ab und Geben Sie diese IPs zurück, um sicherzustellen, dass die Auflösungswahrscheinlichkeit jeder IP gleich ist. Diese IPs sind die externen Netzwerk-IPs von Nginx, sodass auch die Anforderungsverteilung jedes Nginx ausgeglichen ist.

Lastausgleich von [Reverse-Proxy-Schicht->Site-Schicht]


[Reverse-Proxy-Schicht] Lastausgleich zur [Site-Ebene] wird durch „nginx“ erreicht. Durch Ändern von nginx.conf können verschiedene Lastausgleichsstrategien implementiert werden:

1) Anforderungsabfrage: Ähnlich wie bei der DNS-Abfrage werden Anforderungen nacheinander an jeden Webserver weitergeleitet

2 )Least Connection Routing: Welcher Webserver hat weniger Verbindungen, zu welchem ​​Webserver wird weitergeleitet

3) IP-Hash: Leiten Sie den Webserver entsprechend dem IP-Hash-Wert des zugreifenden Benutzers weiter, als Solange die IP-Verteilung des Benutzers einheitlich ist und die Anforderungen theoretisch einheitlich sind, kann dies erreicht werden. Die Anforderung des gleichen Benutzers wird immer auf denselben Webserver übertragen, z Sitzung (58 Anmerkungen von Chen Jian: Sie können dies tun, es wird jedoch dringend nicht empfohlen. Zustandslosigkeit auf Standortebene ist eines der Grundprinzipien des verteilten Architekturdesigns. Sitzungen werden am besten in der Datenschicht gespeichert)

4)…

Lastausgleich von [Site-Layer->Service-Layer]



Der Lastausgleich von [Site-Ebene] zu [Service-Ebene] wird durch „Service Connection Pool“ erreicht.

Der Upstream-Verbindungspool stellt mehrere Verbindungen mit Downstream-Diensten her und jede Anfrage wählt „zufällig“ eine Verbindung aus, um auf den Downstream-Dienst zuzugreifen.

Der vorherige Artikel „RPC-Client-Implementierungsdetails“ enthält detaillierte Beschreibungen zu Lastausgleich, Failover und Timeout-Verarbeitung. Sie können ihn gerne durch Klicken auf den Link anzeigen und werden hier nicht erweitert.

Lastausgleich der [Datenschicht]

Im Fall einer großen Datenmenge, da die Datenschicht (Datenbank, Cache) eine horizontale Segmentierung der Daten beinhaltet, Daher ist der Lastausgleich der Datenschicht komplizierter und in „Datenausgleich“ und „Anforderungsausgleich“ unterteilt.

Das Datengleichgewicht bedeutet: Für jeden Dienst (Datenbank, Cache) nach der horizontalen Segmentierung ist die Datenmenge nahezu gleich.

Das Gleichgewicht der Anfragen bedeutet: Für jeden Dienst (Datenbank, Cache) nach der horizontalen Segmentierung ist das Anfragevolumen nahezu gleich.

In der Branche gibt es mehrere gängige horizontale Segmentierungsmethoden:

1. Horizontale Segmentierung nach Reichweite

Jeder Datendienst speichert einen bestimmten Datenbereich, wie im Bild oben gezeigt:

Benutzer0-Dienst, speichert den UID-Bereich 1-1 kW

Benutzer1-Dienst, Speicher-UID-Bereich 1 kW-2 kW

Die Vorteile dieser Lösung sind:

(1) Die Regeln sind einfach, der Dienst muss nur den UID-Bereich bestimmen, zu dem weitergeleitet werden soll der entsprechende Speicherdienst

(2) Die Datenbilanz ist besser

(3) Es ist relativ einfach, einen Datendienst mit UID [2kw, 3kw] hinzuzufügen

Die Nachteile sind:

(1) Die Anzahl der Anfragen ist nicht unbedingt ausgeglichen. Im Allgemeinen sind neu registrierte Benutzer aktiver als alte Benutzer, und der Druck auf umfangreiche Serviceanfragen wird größer sein

2. Gemäß der horizontalen ID-Hash-Segmentierung


Jeder Datendienst speichert einen Teil der Daten nach dem Hashing eines bestimmten Schlüsselwerts , wie oben gezeigt Zum Beispiel:

Benutzer0-Dienst, speichert gerade UID-Daten

Benutzer1-Dienst, speichert ungerade UID-Daten

Die Vorteile dieser Lösung sind:

(1) Die Regeln sind einfach, der Dienst muss nur die UID hashen, um sie an den entsprechenden Speicherdienst weiterzuleiten

(2) Die Datenbilanz ist gut

(3) Die Die Anforderungseinheitlichkeit ist gut

Die Nachteile sind:

(1) Bei der Erweiterung eines Datendienstes ist möglicherweise eine Datenmigration erforderlich, wenn sich die Hash-Methode ändert

Zusammenfassung

Der Lastausgleich ist einer der Faktoren, die beim Entwurf einer verteilten Systemarchitektur berücksichtigt werden müssen. Er bezieht sich normalerweise auf die [gleichmäßige] Zuweisung von Anforderungen/Daten an mehrere Betriebseinheiten für die Ausführung ist der Schlüssel zum Lastausgleich.

(1) Der Lastausgleich von [Client-Schicht] zu [Reverse-Proxy-Schicht] wird durch „DNS-Abfrage“ erreicht.

(2) [Reverse-Proxy-Schicht] zu [Site-Schicht] Lastausgleich wird durch „nginx“ erreicht

(3) Der Lastausgleich von [Site-Schicht] zu [Dienstschicht] wird durch „Dienstverbindungspool“ erreicht

(4) Für den Lastausgleich von [Datenschicht ] sollten zwei Punkte berücksichtigt werden: „Datenausgleich“ und „Anforderungsausgleich“. Zu den gängigen Methoden gehören „horizontale Segmentierung nach Bereich“ und „horizontale Segmentierung nach Hash“

Apache-Lastausgleichseinstellung Methode

Im Allgemeinen besteht der Lastausgleich darin, Clientanforderungen auf verschiedene reale Server im Backend auszulagern, um den Zweck des Lastausgleichs zu erreichen. Eine andere Möglichkeit besteht darin, zwei Server zu verwenden, einen als Hauptserver (Master) und den anderen als Hot-Backup (Hot Standby). Alle Anfragen werden an den Hauptserver weitergeleitet Backup-Server. Um die Gesamtleistung des Systems zu verbessern

Ich war überrascht, als ich zum ersten Mal sah, dass Apache tatsächlich Lastausgleich durchführen kann. Es ist so mächtig. Nach einigen Nachforschungen stellte ich fest, dass dies tatsächlich möglich ist und die Funktionalität überhaupt nicht schlecht ist. Dies alles ist dem mod_proxy-Modul zu verdanken. Es ist tatsächlich ein mächtiger Apache.

Lassen Sie uns ohne weitere Umschweife erklären, wie Sie den Lastausgleich einrichten.

Im Allgemeinen besteht der Lastausgleich darin, Clientanforderungen auf verschiedene reale Server im Backend zu verteilen, um den Zweck des Lastausgleichs zu erreichen. Eine andere Möglichkeit besteht darin, zwei Server zu verwenden, einen als Hauptserver (Master) und den anderen als Hot-Backup (Hot Standby). Alle Anfragen werden an den Hauptserver weitergeleitet Backup-Server, um die Gesamtzuverlässigkeit des Systems zu verbessern.

1. Lastausgleichseinstellungen

1). Grundkonfiguration

Apache kann die beiden oben genannten Anforderungen erfüllen. Lassen Sie uns zunächst besprechen, wie der Lastausgleich durchgeführt wird. Gehen Sie davon aus, dass der Domänenname eines Apache-Servers www.a.com ist. Zuerst müssen Sie mehrere Module von Apache aktivieren:

Der Code lautet wie folgt:

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
Nach dem Login kopieren

mod_proxy stellt die Proxy-Server-Funktion bereit und mod_proxy_balancer stellt die Lastausgleichsfunktion bereit. mod_proxy_http ermöglicht Proxy-Servern die Unterstützung des HTTP-Protokolls. Wenn mod_proxy_http durch andere Protokollmodule (z. B. mod_proxy_ftp) ersetzt wird, kann es möglicherweise den Lastausgleich anderer Protokolle unterstützen. Interessierte Freunde können es selbst ausprobieren.
Dann fügen Sie die folgende Konfiguration hinzu:

Der Code lautet wie folgt:

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>
Nach dem Login kopieren

Hinweis: node-a.myserver.com, node-b.myserver.com sind die Domänennamen von die anderen beiden Server. Nicht der Domänenname des aktuellen Servers

Wie aus den ProxyRequests Off oben hervorgeht, ist der Load Balancer tatsächlich ein Reverse-Proxy, aber seine Proxy-Weiterleitungsadresse ist kein bestimmter Server, sondern Ein Balancer://-Protokoll:

ProxyPass / Balancer://MyCluster-Protokolladresse kann beliebig definiert werden. Legen Sie dann den Inhalt des Balancer-Protokolls im Abschnitt fest. Die BalancerMember-Direktive kann die echte Serveradresse zur Lastausgleichsgruppe hinzufügen.

Der folgende Absatz wird verwendet, um den Arbeitsstatus des Lastausgleichs zu überwachen (die Verwendung in der Produktionsumgebung ist verboten!) und dann http:/ besuchen. /localhost/balancer-manager/, um den Arbeitsstatus des Lastausgleichs anzuzeigen.

OK, nachdem Sie die Änderungen vorgenommen haben, starten Sie den Server neu und besuchen Sie die Adresse Ihres Apache-Servers (www.a.com), um den Lastausgleichseffekt zu sehen.

出错提示: 
访问网页提示Internal Serveral Error,察看error.log文件
Nach dem Login kopieren

Fehler.log-Code

[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.
Nach dem Login kopieren

Der Grund ist, dass in der Konfiguration: # ProxyPass / balancer://mycluster möglicherweise eine fehlt /

2).

Öffnen Sie die Balancer-Manager-Schnittstelle und Sie können sehen, dass die Anfragen gleichmäßig verteilt sind.

如果不想平均分配怎么办?给 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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

从 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
Nach dem Login kopieren

向下拉动文档找到节点,在DirectoryIndex index.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。

然后打开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>
Nach dem Login kopieren

然后回到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>
Nach dem Login kopieren

ProxyRequests Off 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了。route参数对应后续tomcat负载均衡配置中的引擎路径(jvmRoute)

Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie den Lastausgleich in Apache. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage