Apache (httpd) Load Balancer хэрхэн тохируулах вэ?

Batjargal
Unimedia Solutions
Published in
5 min readMay 15, 2018

Apache бол хамгийн алдартай, хамгийн өргөн хэрэглэгддэг http server гэдгийг бүгд мэдэх учир энэ серверийн тухай тайлбараа орхиод шууд load balancer хэрхэн тохируулж байгаа жишээ рүүгээ ороё.

Эхлээд надад 2 сервер хэрэгтэй. 1 сервер дээр нь load balancer аа тохируулна. Ер нь ачаалал ихтэй, олон сервертэй үед load balancer таа зориулж тусдаа сервер гаргасан нь зүгээр.

2 сервер ашигласан энгийн диаграм

Алхам 1: Сэрвэрүүдээ виртуалаар үүсгэе.

Step

2 server тээ 192.168.100.198 болон 199 IP өгөв.

Алхам 2: Apache2 server суулгах (load balancer байрлах сервертээ)

sudo apt-get update && apt-get install apache2

Browser аараа орж суусан эсэхийг нь шалгана

Алхам 3: Tomcat server суулгах (2 ууланд нь)

wget http://www-us.apache.org/dist/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz
tar -zxvf apache-tomcat-9.0.7.tar.gz
mv apache-tomcat-9.0.7 /home/un/tomcat

Tomcat аа татаж аваад задлаад байрлах газар луу нь зөөх үйлдэл хийлээ. Tomcat ажиллуулахын тулд таны сервер дээр Жава буюу JDK or JRE суусан байх шаардлагатай. Суулгах зааврын эндээс харж болно.

Одоо Tomcat-аа асаагаад 192.168.100.198:8080 гэж шалгана. Tomcat default аар 8080 порт дээр асдаг.

cd /home/un/tomcat/bin
./startup.sh

Алхам 4: Шаардлагатай модулиудыг суулгана.

sudo a2enmod rewrite
sudo a2enmod proxy
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo a2enmod headers
sudo a2enmod lbmethod_byrequests
sudo a2enmod ssl
sudo systemctl restart apache2

Алхам 5: Apache -ын default conf дээр засвар оруулая.

sudo nano/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Proxy balancer://mycluster>
BalancerMember http://192.168.100.198:8080
BalancerMember http://192.168.100.199:8080
</Proxy>

ProxyPreserveHost On
ProxyPreserveHost On
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>

Олон серверийг зарлахын тулд нэмэлт proxy блок ашигладаг. Блокийг balancer://mycluster (Өөрт тохирсон дурын нэр өгч болно) гэж зарлана. Balance manager гэдэг tool ийг давхар ажиллууллаа.

sudo systemctl restart apache2

Одоо Apache server лүү хандахад Tomcat сервер лүү орж байна. Зөв ажиллаж байна гэсэн үг

http://192.168.100.198/balancer-manager гэсэн хаягаар орж load balancer ийн гишүүдийн тухай мэдээллийг харж болно.

Алхам 6: Одоо тестлэхийн тулд Tomcat default page ийг өөрчлөөд хандалт бүрийг тоолдог болгоё.

cd /home/un/tomcat/webapps/ROOT
nano index.jsp
<!-- put bellow code -->
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>Application object in JSP</title>
</head>
<body>
<%
Integer hitsCount = (Integer)application.getAttribute("hitCounter");
if( hitsCount ==null || hitsCount == 0 ) {
/* First visit */
out.println("Welcome to my website! Server 1");
hitsCount = 1;
} else {
/* return visit */
out.println("Welcome back to my website! Server 1");
hitsCount += 1;
}
application.setAttribute("hitCounter", hitsCount);

String nameOfLogFile = "/home/un/tomcat/webapps/log.txt";
String str = "Total number of visits Server 1: "+hitsCount;
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfLogFile));
pw.println(str);
//clean up
pw.close();
} catch(IOException e) {
out.println(e.getMessage());
}
%>
<center>
<p>Total number of visits: <%= hitsCount%></p>
</center>
</body>
</html>
Хандалт бүрийг тоолдог хуудас

Одоо дээрх байдлаар харагдахаас гадна log.txt файл руу мөн бичих болно. Сэрвэр 2 ийн Tomcat дээр мөн дээрх өөрчлөлтийг хийгээрэй.

Алхам 7: Test

Олон хандалтаар “бөмбөгдөхийн” тулд JMeter ашиглахаар шийдлээ.

JMeter дээр thread үүсгээд тохируулна

Ачаалал өгөхдөө 1000 хэрэглэгч 20 секундын дотор зэрэг хандахаар тохируулав.

Үр дүн

Summary Report
Result Tree нь иймэрхүү харагдана

2 сервер дээр зэрэг tail хийж бэлдсэн лог файлаа үзэхэд

Дээрхээс харахад 1000 хэрэглэгч 2 сервер лүү 500 500 гаараа хуваагдаж хандсан байгаа нь харагдаж байна.

За одоо жоохон гүнзгийрүүлээд сервер дээрээ SSL Certificate тохируулж үзүүлэе.

SSL Certificate

cd /home/un
mkdir cert
cd cert

certificate байрлуулах folder оо үүсгэлээ

Одоо CA Certificate үүсгэнэ

openssl genrsa -des3 -passout pass:server -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -passin pass:server -out ca.crt -subj "/C=MN/ST=BLABLA/L=RootLoc/O=Test Ca corp/OU=issuer/CN=medium.com"

Дараа нь серверийнхээ сертификатыг үүсгэнэ

openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr -subj "/C=MN/ST=Ulaanbaatar/L=Ulaanbaatar/O=Test Corporation/OU=testUnit/CN=192.168.100.198"
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:server -CAcreateserial -out server.crt

Одоо хэрэглэгчийн сертификатаа үүсгээд хөтөчид таниулахад зориулж pkcs12 төрөл рүү хөрвүүлэх шаардлагатай байдаг.

openssl req -nodes -newkey rsa:2048 -keyout client.key -out client.csr -subj “/C=MN/ST=Ulaanbaatar/L=Ulaanbaatar/O=Test Corporation/OU=testUnit/CN=192.168.100.198”
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -passin pass:server -CAcreateserial -out client.crt
openssl x509 -in client.crt -out client.x509
openssl pkcs12 -export -in client.x509 -inkey client.key -name client -out client.p12 -password pass:server
Үүсгэсэн файлын жагсаалт

Apache -ын default conf дээр засвар оруулая.

sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Proxy balancer://mycluster>
BalancerMember http://192.168.100.198:8080
BalancerMember http://192.168.100.199:8080
</Proxy>
ProxyPreserveHost On
<Location /balancer-manager>
SetHandler balancer-manager
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
<VirtualHost *:443>
<Proxy balancer://myclusterssl>
BalancerMember http://192.168.100.198:8080
BalancerMember http://192.168.100.199:8080
</Proxy>
SSLHonorCipherOrder On
SSLCipherSuite RC4-SHA:ALL:!ADH:!EXPORT:!LOW:!MD5:!SSLV2:!NULL
SSLEngine on
SSLProxyEngine On
SSLCertificateFile /home/un/cert/server.crt
SSLCertificateKeyFile /home/un/cert/server.key
SSLCACertificateFile /home/un/cert/ca.crt
ServerName 192.168.100.198
ProxyPass / balancer://myclusterssl/
ProxyPassReverse / balancer://myclusterssl/
ProxyBadHeader Ignore
SSLVerifyClient require
SSLVerifyDepth 5
</VirtualHost>

Server ээ restart хий.

sudo systemctl restart apache2

Browser дээрээ үүсгэсэн хэрэглэгчийн сертификатаа тохируулж өгөх хэрэгтэй.

Өөрийн үүсгэсэн client.p12 файлаа сонгоод Open дар.

Пассворд хэсэг дээр нь үүсгэхдээ хийсэн server гэдэг үгийг бичиж өгнө.

Ийм байдалтай харагдана.

https ээр хандана

Сертификатыг чинь асууна. Ок дарна.

Good luck…

Load Balancer -ын тухай ерөнхий ойлголтыг эндээс уншина уу

--

--

Batjargal
Unimedia Solutions

Infra Engineer & Senior Software Developer at Unimedia Solutions, Unimedia.mn