Статьи

Балансировка нагрузки с помощью Apache

Недавно на встрече группы пользователей PHP в Берлингтоне, штат Вермонт, я выступил с докладом о балансировке нагрузки с помощью Apache :

Балансировка нагрузки с помощью Apache

 


Посмотреть больше
презентаций от

 

Я разместил примеры файлов конфигурации для справки.

 

Базовая балансировка нагрузки :

# Create a load balancer named "web-nodes"
<Proxy balancer://web-nodes>
    # Add three load balancer members
    BalancerMember http://www1.example.com
    BalancerMember http://www2.example.com
    BalancerMember http://www3.example.com
</Proxy>
# Send all requests to the "web-nodes" balancer
ProxyPass / balancer://web-nodes

Липкие сессии в PHP :

# Create a load balancer named "web-nodes"
<Proxy balancer://web-nodes>
    # Add three load balancer members
    BalancerMember http://www1.example.com
    BalancerMember http://www2.example.com
    BalancerMember http://www3.example.com
    # Use the PHPSESSID for sticky sessions
    ProxySet stickysession=PHPSESSID
</Proxy>
# Send all requests to the "web-nodes" balancer
ProxyPass / balancer://web-nodes

Создайте свои собственные липкие сессии :

# Set a cookie
Header add Set-Cookie "NODE=%{BALANCER_WORKER_ROUTE}e; path=/" \
env=BALANCER_ROUTE_CHANGED
# Create a load balancer named "web-nodes"
<Proxy balancer://web-nodes>
    # Add three load balancer members
    BalancerMember http://www1.example.com route=1
    BalancerMember http://www2.example.com route=2
    BalancerMember http://www3.example.com route=3
    # Use the NODE cookie for sticky sessions
    ProxySet stickysession=NODE
</Proxy>
# Send all requests to the "web-nodes" balancer
ProxyPass / balancer://web-nodes

Маршрут на основе метода HTTP :

# Enable mod_rewrite
RewriteEngine On

# Send POST, PUT, and DELETEs to "write" balancer
RewriteCond %{REQUEST_METHOD} ^(POST|PUT|DELETE)$
RewriteRule ^/(.*)$ balancer://write$1 [P]

# Send GET, HEAD, and OPTIONS to "read" balancer
RewriteCond %{REQUEST_METHOD} ^(GET|HEAD|OPTIONS)$
RewriteRule ^/(.*)$ balancer://read$1 [P]

# Modify HTTP response headers (e.g. Location)
ProxyPassReverse / balancer://write
ProxyPassReverse / balancer://read

Распределенное нагрузочное тестирование с помощью Tsung :

<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">

  <!-- Client side setup -->
  <clients>
    <client host="test-a" weight="1" maxusers="10000" cpu="4" />
    <client host="test-b" weight="1" maxusers="10000" cpu="4" />
  </clients>

  <!-- Server side setup -->
  <servers>
    <server host="www" port="80" type="tcp" />
  </servers>

  <!-- Load setup -->
  <load>
    <arrivalphase phase="1" duration="5" unit="minute">
      <users arrivalrate="200" unit="second" />
    </arrivalphase>
  </load>

  <!-- Session setup -->
  <session  name="default" probability="100" type="ts_http">
    <thinktime  value="1" random="true" />
    <request>
      <http method="GET" url="/" />
    </request>
  </session>

  <!-- Monitoring setup -->
  <monitoring>
    <monitor host="www" type="munin" />
    <monitor host="www1" type="munin" />
    <monitor host="www2" type="munin" />
    <monitor host="www3" type="munin" />
  </monitoring>

</tsung>

Я покрываю балансировки нагрузки и распределенной нагрузки тестирование более подробно в моей книге, Scaling CouchDB .

 

Источник: http://bradley-holt.com/2011/03/load-balancing-with-apache/