Назад | Перейти на главную страницу

резервное копирование сервера балансировки нагрузки apache

Я хочу использовать балансировщик нагрузки apache, чтобы один сервер tomcat был основным, а вторичный сервер был в сети, только если первый сервер не работает. Как это может быть сделано?

Если вы собираетесь выполнять только балансировку нагрузки, я бы порекомендовал что-нибудь более легкое, чем Apache, например HAproxy, но предположим, что вы собираетесь использовать apache.

Существует несколько методов балансировки нагрузки, поэтому вам следует потратить немного времени на ознакомление с ними. Есть отличная статья Вилли Тарро под названием Обеспечение масштабируемости приложений с помощью балансировки нагрузки это стоит вашего времени, чтобы прочитать.

Есть несколько инструментов для того, чтобы сделать Apache балансировщиком нагрузки, и, возможно, самый простой (который я знаю) - использовать mod_proxy_balancer. Единственная проблема заключается в том, что он не выполняет балансировку нагрузки при отказе (что вам и нужно: высокая доступность, а не истинная балансировка нагрузки).

Поскольку вы используете Tomcat, почему бы не использовать mod_jk, разъемы Apache tomcat?

Предположим на секунду, что мы находимся в системе на основе Redhat (я использую CentOS 5.5), которая настроена для компиляции (например, имеет gcc и соответствующие библиотеки (это не очень хорошая идея для производственных систем. Сейчас не время и не место для обсуждения Упаковка RPM, хотя)

 yum install httpd httpd-devel

Это установит Apache вместе с материалами для разработки для создания модулей, а каталог конфигурации будет / etc / httpd /

Текущие (20110130) разъемы Tomcat - 1.2.31 (но вы можете проверить наличие последних Вот), так что скачайте их:

 wget http://mirror.cc.columbia.edu/pub/software/apache//tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz

Распакуйте, скомпилируйте и установите их:

 tar zxvf tomcat-connectors-1.2.31-src.tar.gz 
 cd tomcat-connectors-1.2.31-src/native
 ./configure --with-apxs=/usr/sbin/apxs 
 make 
 sudo make install 

Убедитесь, что mod_jk.so установлен:

 ls -al /etc/httpd/modules/mod_jk.so 
 -rwxr-xr-x 1 root root 903072 Jan 30 15:21 /etc/httpd/modules/mod_jk.so

Теперь мы можем его настроить.

Отредактируйте /etc/httpd/conf.d/jk.conf:

 # This actually tells apache to load the module we built
 LoadModule jk_module modules/mod_jk.so 

 # This file holds the instructions for which servers the proxy will be talking to
 JKWorkersFile /etc/httpd/conf.d/workers.properties

 # This is (obviously) the logfile that it will write to. Change to whatever you want
 JKLogFile /var/log/httpd/mod_jk.log 

 # Simplistically, we'll set up a virtualhost that listens on all IPs on port 80. 
 # HTTPS is left as an exercise for the reader
 NameVirtualHost *:80
 <VirtualHost *:80>
     ServerAdmin you@yourdomain.com 
     ServerName thedomainnameoftheproxy.com

     # The following line says "send anything to the JK Worker named MyProxyCluster"
     JKMount /* MyProxyCluster

 </VirtualHost>
 #EOF

Хорошо, это говорит Apache, что мы хотим использовать mod_jk, что мы хотим использовать файл с именем /etc/httpd/conf.d/workers.properties, и что у нас есть один виртуальный хост, на котором все отправляется рабочим. Отлично, теперь давайте настроим рабочих. Отредактируйте /etc/httpd/conf.d/workers.properties:

 # We're telling mod_jk which workers it needs to look for. We're going to define 
 # a total of 3 workers: MyProxyCluster (the load balancer job), worker1, and worker2 
 # (the two backend servers) 
 worker.list=MyProxyCluster

 worker.worker1.port=8009
 worker.worker1.host=hostname.or.ip.of.1st.tomcat.server

 # ajp13 means Apache JServ Protocol version 1.3, and is apparently universal
 worker.worker1.type=ajp13

 worker.worker1.lbfactor=1

 # When worker1 dies, we're going to want it to go to worker2
 worker.worker1.redirect=worker2

 ### End of worker1 config

 # repeat the same things for worker2
 worker.worker2.port=8009
 worker.worker2.host=hostname.of.ip.of.2nd.tomcat.server
 worker.worker2.type=ajp13
 worker.worker2.lbfactor=1
 # Disable worker2 except when it fails over
 worker.worker2.activation=disabled

 # make the actual load balancer worker that we referenced in the beginning
 worker.MyProxyCluster.type=lb
 worker.MyProxyCluster.balance_workers=worker1,worker2
 # EOF

Теперь у нас есть два реальных воркера и один виртуальный балансировщик нагрузки для них. Теперь вы можете запустить Apache:

 service httpd start 

Проверьте это, перейдя на компьютер, и он должен перейти на первый сервер Tomcat. Вы сможете убедиться в этом, посмотрев /var/log/httpd/mod_jk.log (или куда бы вы на это указали).

Удачи!

Вот гораздо более простое решение с использованием AJP вместо JK:

<Proxy balancer://cluster>
    BalancerMember ajp://127.0.0.1:8009 route=jvm1 status=-D
    BalancerMember ajp://127.0.0.2:8009 route=jvm2 status=+H
</Proxy>

ProxyPass /app balancer://cluster/app

Вы можете установить еще несколько свойств конфигурации, например, коэффициенты дифференциальной нагрузки, если у вас больше серверных модулей, различные алгоритмы балансировки, наборы балансировщиков и т. Д.: См. Документацию Apache mod_proxy, но приведенное выше делает именно то, что вы указали. -D означает «не отключен», а + H означает «горячий резерв». И вы также можете поменять их местами во время выполнения.

Вам просто нужно запустить два Tomcats с коннекторами AJP, работающими на порту 8009 с адресом = "127.0.0.1", address = "127.0.0.2" и т. Д., Столько, сколько вам нужно, с <Engine jvmRoute="jvm1"> и <Engine jvmRoute="jvm2"> соответственно. Обратите внимание на экономию портов: то же самое можно сделать и с портом отключения. Выбросьте в конфигурации Tomcat все, что касается JK, mod_jk и т. Д. Вам не нужны эти ужасные workers.properties файлы тоже. Вы также можете выбросить все соединители HTTP и HTTPS и завершить входящий SSL на Apache HTTPD, что дает вам более точный контроль над SSL.