>  기사  >  운영 및 유지보수  >  Apache에서 로드 밸런싱을 구성하는 방법

Apache에서 로드 밸런싱을 구성하는 방법

步履不停
步履不停앞으로
2019-06-29 10:39:5111639검색

로드 밸런싱이란 무엇입니까? Apache에서 로드 밸런싱을 구성하는 방법은 무엇입니까? 다음 글에서는 Apache 로드 밸런싱 구성 방법을 소개하겠습니다. 도움이 되길 바랍니다.

Apache에서 로드 밸런싱을 구성하는 방법

로드 밸런싱이란

로드 밸런싱은 분산 시스템 아키텍처 설계에서 고려해야 할 요소 중 하나입니다. 일반적으로 요청/데이터를 [균등하게] 할당하여 실행됩니다. 여러 운영 단위, 로드 밸런싱의 핵심은 [균등]입니다.

공통 로드 밸런싱 솔루션


일반적인 인터넷 분산 아키텍처는 위와 같이 클라이언트 계층, 역방향 프록시 nginx 계층, 사이트 계층, 서비스 계층 및 데이터 계층으로 구분됩니다. 각 다운스트림에 여러 개의 업스트림 호출이 있는 것을 볼 수 있습니다. 각 업스트림이 각 다운스트림에 균등하게 액세스하는 한 "실행을 위해 요청/데이터를 여러 작업 단위에 균등하게 배포"할 수 있습니다.

[클라이언트 레이어->역방향 프록시 레이어] 로드 밸런싱


[클라이언트 레이어]에서 [역방향 프록시 레이어] 로드 밸런싱은 "DNS 폴링"을 통해 구현됨: DNS 서버는 여러 개로 구성됩니다. 도메인 이름에 대한 확인 IP. DNS 서버에 액세스하기 위해 DNS 확인 요청이 이루어질 때마다 이러한 IP가 폴링되고 반환되어 각 IP의 확인 확률이 동일한지 확인합니다. 이들 IP는 nginx의 외부 네트워크 IP이므로 각 nginx의 요청 분포도 균형을 이룬다.

[역방향 프록시 레이어->사이트 레이어] 로드 밸런싱


[역방향 프록시 레이어]에서 [사이트 레이어]로의 로드 밸런싱은

"nginx"를 통해 이루어집니다. nginx.conf

를 수정하여 다양한 로드 밸런싱 전략을 구현할 수 있습니다. 1) 요청 폴링: DNS 폴링과 유사하며 요청은 차례로 각 웹 서버로 라우팅됩니다

2) 최소 연결 라우팅: 어떤 웹- 서버 연결이 적습니다. 웹 서버가 라우팅할 곳

3) IP 해시: 웹 서버는 접속하는 사용자의 IP 해시 값에 따라 라우팅됩니다. 이론적으로 균일한 IP 해시 균형 조정 방법을 사용하면 동일한 사용자의 요청이 항상 동일한 웹 서버에 속하게 됩니다. 이 전략은 세션과 같은 상태 저장 서비스에 적합합니다. 상태가 없다는 것은 분산 아키텍처 설계의 기본 원칙 중 하나입니다. 세션은 데이터 계층에 가장 잘 저장됩니다.)

4)...

[사이트 계층->서비스 계층] 로드 밸런싱



[사이트 계층]에서 [서비스 계층]으로의 로드 밸런싱은 "

서비스 연결 풀

"을 통해 이루어집니다. 업스트림 연결 풀은 다운스트림 서비스와 여러 연결을 설정하며 각 요청은 다운스트림 서비스에 액세스하기 위한 연결을 "무작위로" 선택합니다.

이전 기사 "RPC-클라이언트 구현 세부 사항"에는 로드 밸런싱, 장애 조치 및 시간 초과 처리에 대한 자세한 설명이 있습니다. 링크를 클릭하면 볼 수 있으며 여기에서는 확장되지 않습니다.

[데이터 계층] 로드 밸런싱

데이터의 양이 많은 경우 데이터 계층(db, 캐시)은 데이터의 수평 분할을 포함하므로 데이터 계층의 로드 밸런싱이 더 복잡합니다.

"데이터 밸런싱"과 "요청 밸런싱"

으로 나누어집니다. 데이터 균형이란 수평 분할 후 각 서비스(db, 캐시)의

데이터 양

이 거의 동일함을 의미합니다. 요청 균형이란 수평 분할 후 각 서비스(db, 캐시)에 대해

요청량

이 거의 동일함을 의미합니다. 업계에는 몇 가지 일반적인 수평 분할 방법이 있습니다.

1. 범위에 따른 수평 분할

위 그림과 같이 각 데이터 서비스는

특정 범위의 데이터를 저장합니다

: user0 서비스, 스토리지 uid 범위 1-1kw

user1 서비스, 스토리지 uid 범위 1kw-2kw

이 솔루션의 이점은 다음과 같습니다.

(1) 규칙은 간단하며 서비스는 uid만 결정하면 됩니다. 해당 스토리지 서비스

(2) 데이터 밸런스가 더 좋습니다

(3) 언제든지 uid [2kw, 3kw]로 데이터 서비스를 추가할 수 있습니다

단점은:

(1) 요청 부하가 반드시 균형을 이루는 것은 아닙니다. 일반적으로 새로 등록한 사용자는 기존 사용자보다 더 활동적이며 광범위한 서비스 요청에 대한 부담이 더 클 것입니다

두 번째, ID 해시에 따라 분할됩니다. level


각 데이터 서비스는 특정 키 값을 해싱한 후 데이터의 일부를 저장합니다, 위 그림은 예시입니다:

user0 서비스, UID 데이터까지 저장

user1 서비스, 이상한 UID 저장 data

이 솔루션의 이점은 다음과 같습니다.

(1) 규칙은 간단하며 서비스는 해당 저장소 서비스로 라우팅되기 위해 uid를 해시하기만 하면 됩니다.

(2) 데이터 균형이 더 좋습니다

(3 ) 요청 균일성이 더 좋습니다

단점은

(1) 데이터 서비스 확장이 쉽지 않고 해시 방식이 변경되면 데이터 마이그레이션이 필요할 수 있습니다

요약

로드 밸런스는 분산 시스템 아키텍처 설계에서 고려해야 할 요소 중 하나로, 일반적으로 실행을 위해 요청/데이터를 여러 운영 단위에 [균등하게] 할당하는 것을 의미합니다. 로드 밸런싱의 핵심은 [균등하게]입니다.

(1) [클라이언트 레이어]에서 [역방향 프록시 레이어]로의 로드 밸런싱은 "DNS 폴링"을 통해 이루어집니다.

(2) [역방향 프록시 레이어]에서 [사이트 레이어]로의 로드 밸런싱은 "nginx를 통해 이루어집니다. "

(3) [사이트 계층]에서 [서비스 계층]으로의 로드 밸런싱은 "서비스 연결 풀"을 통해 이루어집니다.

(4) [데이터 계층]에서 로드 밸런싱을 고려해야 합니다. 데이터 밸런싱"과 "요청 밸런싱" 일반적인 방법은 "범위에 따른 수평 분할"과 "해시 수평 분할"입니다

Apache 로드 밸런싱 설정 방법

일반적으로 로드 밸런싱은 클라이언트 요청을 여러 실제 서버에 분산시키는 것입니다. 로드 밸런싱의 목적을 달성하기 위한 백엔드. 또 다른 방법은 두 개의 서버를 사용하여 하나는 메인 서버(Master)로, 다른 하나는 핫 백업(Hot Standby)으로 사용하는 것입니다. 메인 서버가 다운되면 즉시 메인 서버로 전환됩니다. 백업 서버 시스템의 전반적인 가용성을 향상시키기 위해

저도 이 제목을 처음 보고 놀랐습니다. Apache가 실제로 로드 밸런싱을 할 수 있습니까? 너무 강력해요. 좀 조사해본 결과 실제로 가능하고 기능도 전혀 나쁘지 않다는 것을 알았습니다. 이것은 모두 mod_proxy 모듈 덕분입니다. 정말 강력한 아파치입니다.

더 이상 고민하지 않고 로드 밸런싱을 설정하는 방법을 설명하겠습니다.

일반적으로 로드 밸런싱은 로드 밸런싱의 목적을 달성하기 위해 클라이언트 요청을 백엔드의 다양한 실제 서버에 분산시키는 것입니다. 또 다른 방법은 두 개의 서버를 사용하여 하나는 메인 서버(Master)로, 다른 하나는 핫 백업(Hot Standby)으로 사용하는 것입니다. 메인 서버가 다운되면 즉시 메인 서버로 전환됩니다. 백업 서버는 시스템의 전반적인 신뢰성을 향상시킵니다.

1. 로드 밸런싱 설정

1) 기본 구성

Apache는 위의 두 가지 요구 사항을 충족할 수 있습니다. 먼저 로드 밸런싱을 수행하는 방법에 대해 논의하겠습니다. 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

mod_proxy는 프록시 서버 기능을 제공하고, mod_proxy_balancer는 로드 밸런싱을 제공합니다. 함수, mod_proxy_http를 사용하면 프록시 서버가 HTTP 프로토콜을 지원할 수 있습니다. mod_proxy_http가 다른 프로토콜 모듈(예: mod_proxy_ftp)로 대체되면 다른 프로토콜의 로드 밸런싱을 지원할 수도 있습니다. 관심 있는 친구는 직접 시도해 볼 수 있습니다.
그런 다음 다음 구성을 추가합니다.

코드는 다음과 같습니다.

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>

참고: node-a.myserver.com, node-b.myserver.com은 다른 두 서버의 도메인 이름이 아니라 다른 두 서버의 도메인 이름입니다. 현재 서버

위 ProxyRequests Off에서 로드 밸런서가 실제로 역방향 프록시임을 알 수 있지만 프록시 전달 주소는 특정 서버가 아니라 Balancer:// 프로토콜:

ProxyPass / Balancer :// mycluster 프로토콜 주소는 임의로 정의할 수 있습니다. 그런 다음 11951de53252afd7f744ef2dcc6c9390 섹션에서 밸런서 프로토콜의 내용을 설정합니다. BalancerMember 지시어는 로드 밸런싱 그룹에 실제 서버 주소를 추가할 수 있습니다.

다음 섹션 ba087f03004fe4f66fd7615e84a09336는 로드 밸런싱의 작동 상태를 모니터링하는 데 사용됩니다. 디버깅 중에 추가할 수 있으며(프로덕션 환경에서는 사용이 금지되어 있습니다!) http://를 방문하세요. localhost/balancer-manager/ 로드 밸런싱의 작동 상태를 확인할 수 있습니다.

자, 변경 후 서버를 다시 시작하고 Apache 서버 주소(www.a.com)를 방문하여 로드 밸런싱 효과를 확인하세요.

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

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.

이유는 구성: # ProxyPass / Balancer://mycluster가 누락되었을 수 있음 /

2) 비례 분포 로드

밸런서-관리자 인터페이스를 열면 볼 수 있습니다. 요청이 평균적으로 할당되었음을 나타냅니다.

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

向下拉动文档找到794ea01c23a0d5c1a7b2f169e4879de9节点,在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>

然后回到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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제