HAProxy Load Balancer хэрхэн тохируулах вэ?

Batjargal
Unimedia Solutions
Published in
5 min readMay 16, 2018

За энэ удаа бас HAProxy load balancer хэрхэн тохируулахыг энгийн жишээгээр үзүүлэе.

Мөн уламжлал ёсоороо 2 сервертэй архитектур гаргая. 1 сервер дээр нь load balancer аа тохируулна.

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

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

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

sudo apt show haproxy
sudo apt install -y haproxy
haproxy -v

HAProxy ийн онцлог бол цэвэр Load balancer болон Proxy server юм. Серверийн рэсурс маш бага хэрэглэдэг мөртөө маш их хэмжээний ачаалал даах чадвартай олон жил буюу 2000 оноос хөгжүүлэлт хийж ирсэн open source software юм. HAProxy серверийн давуу талуудын талаар эндээс хараарай. HAProxy серверийн тохиргоо нь global, defaults, frontend, listen, backend гэсэн үндсэн хэсгүүдэд хуваагддаг. global, defaults дотор үндсэн ерөнхий тохиргоогоо хийнэ. Харин frontend, listen дотор хэрэглэгчийн хүсэлтийг хүлээж авах хэсгийг, backend дотор серверүүдтэй харьцах хэсгийг тохируулж өгдөг.

Алхам 3: HAProxy server тохируулах

Маш амархан…. :)

frontend http_front
bind *:80
stats uri /stats
default_backend http_back
backend http_back
balance roundrobin
server tomcat1 192.168.100.198:8080 check
server tomcat2 192.168.100.199:8080 check

Ингээл болоо.

/etc/haproxy/haproxy.cfg файл руу ороод хамгийн доор нь буюу global, defaults багц тохиргоонуудын доор нь frontend backend ийнхээ тохиргоог нэмж өгөхөд л хангалттай. http_back нэртэй backend зарлаад түүн дотроо серверүүдээ тохируулж өгнө. Түүнийгээ http_front нэртэй frontend дотроос дуудаад л болно. stats uri /stats тохиргоо нь /stats гэсэн зам дээр Load balancer -ийн хаа мэдээлэлийг авах боломжтой болгож байна.

Алхам 4: 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

80 port оор хандахад мөн tomcat руугаа орох ёстой.

Алхам 5: Одоо тестлэхийн тулд 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 дээр мөн дээрх өөрчлөлтийг хийгээрэй.

Алхам 6: Test

Apache жишээн дээрх шиг JMeter ашиглан олон зэрэг хандалт хийж тестэлцгээе.

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

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

Үр дүн

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

Server ийнхээ сертификат, түлхүүр 2 -ийн хослолоор PEM file үүсгэх хэрэгтэй.

sudo cat server.crt server.key \ | sudo tee server.pem

Одоо хэрэглэгчийн сертификатаа үүсгээд хөтөчид таниулахад зориулж 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
Үүсгэсэн файлын жагсаалт

HAProxy тохиргооны файл дээрээ засвар оруулая

global тохиргоон дотор ssl-server-verify required гэсэн мөр нэмнэ.

frontend http_front
bind *:80
mode http
stats uri /stats
default_backend http_back
frontend http_front_ssl
mode http
bind *:443 ssl crt /home/un/cert/server.pem ca-file /home/un/cert/ca.crt verify required
stats uri /stats
default_backend http_back
backend http_back
mode http
balance roundrobin
server tomcat1 192.168.100.198:8080 check
server tomcat2 192.168.100.199:8080 check

frontend backend тохиргоонууд чинь ийм болно.

Server ээ restart хий.

sudo service haproxy restart

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

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

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

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

HTTPS ээр хандана

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

Good luck…

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

--

--

Batjargal
Unimedia Solutions

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