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

Batjargal
Unimedia Solutions
Published in
5 min readMay 16, 2018

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

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

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

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

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

nginx=stable
sudo add-apt-repository ppa:nginx/$nginx
sudo apt-get update
sudo apt-get install nginx

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: Nginx -ын default тохиргоон дээр засвар оруулая.

sudo nano /etc/nginx/sites-available/default
upstream myupstream {
server 192.168.100.198:8080;
server 192.168.100.199:8080;
}
server {
location / {
proxy_pass http://myupstream;
health_check;
}
}

upstream {upstream_name} гэсэн блокт load balance хийх серверүүдээ тохируулж өгөх бөгөөд server дотроо proxy_pass дээрээ зааж өгнө.

health_check гэдэг тохиргоо нь серверүүдийг ажиллаж буй эсэхийг тодорхой давтамжтайгаар шалгаж байх болно.

health_check interval=10 fails=3 passes=2;

Дээрх жишээн дээр: interval=10 шалгах давтамж хооронд 10 сек хүлээх, fails=3 гурваас дээш удаа шалгалтанд бүдэрвэл сервер унасан гэж үзнэ, 2 удаа шалгалтыг давбал ажиллаж байна гэж үзэх… гэх мэтээр default тохиргоонуудыг нь override хийж болдог.

health_check ийн default тохиргоонуудын талаар эндээс харж болно.

health_check нь Nginx ийн үнэтэй хувилбар дээр ажилладаг тул энэ удаа бид ашиглахгүй.

sudo service nginx restart

Одоо Nginx server лүү хандахад 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 хэрэглэгч орсон боловч 2 дахь сервер дээр яагаад ч юм 497 хэрэглэгч орж ирсэн байна. 3 хэрэглэгч хандаж чадаагүй нь хэт хурдтайгаар олон зэрэг хандалтыг бичиж амжаагүй байх магадлалтай.

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

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

nano /etc/nginx/sites-available/default
upstream myupstream {
ip_hash;
server 192.168.100.198:8080;
server 192.168.100.199:8080;
}
upstream myupstreamssl {
ip_hash;
server 192.168.100.198:8080;
server 192.168.100.199:8080;
}
server {
location / {
proxy_pass http://myupstream;
}
}
server {
listen 443 ssl;
ssl_certificate /home/un/cert/server.crt;
ssl_certificate_key /home/un/cert/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_client_certificate /home/un/cert/ca.crt;
ssl_verify_client on;
location / {
proxy_pass http://myupstreamssl;
}
}

Server ээ restart хий.

sudo service hginx restart

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

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

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

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

https ээр хандана

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

Good luck…

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

--

--

Batjargal
Unimedia Solutions

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