Config Server ง่าย ๆ ด้วย NGINX ตอนที่ 2

Jonathan D Comrade
Fungjai
Published in
2 min readJan 8, 2018

ฮัลโหลลลล สวัสดีปีใหม่ครับทุกท่าน -/\- เดือนที่แล้วกระผมได้เขียนบล็อก Config Server ง่าย ๆ ด้วย NGINX เอาไว้ 1 ตอนถ้วน จากตอนที่ 1 ผมได้ค้างเรื่อง load balance ไว้ ตอนนี้เราจะมาทำกันต่อโล๊ดดด

Load Balance เอาไว้ทำไร ?? ทำทำไม ?? ทำเพื่ออันใด ??

แปลตรงตัวก็ “สมดุลของการโหลด” นั้นแหละครับ ยกตัวอย่างเช่นถ้าทำเว็บไซต์มาสักตัวแล้วเกิดดังเปรี้ยงจนคนเข้ามาใช้เยอะมากกกกกกกกกกกก ซึ่งอาจทำให้เซิร์ฟเวอร์ล่มได้ ก็เลยเอาเจ้า load balance เนี้ยมาช่วยกระจายโหลดด้วยการสร้างเว็บเซิร์ฟเวอร์ขึ้นมาอีกตัว พอมีการ request จาก client เจ้า load balance จะช่วยกระจายโหลดไปที่เว็บเซิร์ฟเวอร์แต่ละตัว

เกริ่นมาซะยาวเลย ลงมือทำกันเลยดีฟ่า เอาโค้ดเก่าจากตอนที่ 1 มาใช้ก็ได้นะครับ

git clone https://github.com/tongzcomradez/nginx_blog.git

หลังจาก clone มาเสร็จแล้วเรามาปรับโค้ดกันหน่อย

docker-compose.ymlversion: '2'  services:    site_a:      ........      volumes:        - ./site_a:/var/www/html/website        - ./nginx/nginx.conf:/etc/nginx/nginx.conf      networks:        vpcbr:          ipv4_address: 10.5.0.2    site_b:      .....
volumes:
- ./site_b:/var/www/html/website - ./nginx/nginx.conf:/etc/nginx/nginx.conf networks: vpcbr: ipv4_address: 10.5.0.3 docker_proxy: .... ports: - "80:80" networks: vpcbr: ipv4_address: 10.5.0.4 networks: vpcbr: driver: bridge ipam: config: - subnet: 10.5.0.0/16 gateway: 10.5.0.1** ตัวเข้มที่โค้ดที่เพิ่มเข้ามา
** เนื่องจากพอลบ container แล้ว ip address ของ container แต่ละตัวมันจะเปลี่ยนไปเรื่อย ผมเลยฟิกค่ามันไปเลยละกัน

อีกไฟล์นึงคือ

nginx/conf.d/site_a.confupstream site_a {  server 10.5.0.2; # ip ของ container site_a อ้างอิงจาก docker-compose ด้านบน
server 10.5.0.3 weight=2; # weight คือการตั้งค่าให้เครื่องนี้รับโหลดมากกว่าชาวบ้าน
# ถ้ามีเครื่องอีกก็ใส่เพิ่มได้เลย
}server { listen 80; server_name a.site.com; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://site_a; }}

** ติ๊งต่างว่า site_a คือเว็บเซิร์ฟเวอร์ตัวที่ 1 และ site_b คือเว็บเซิร์ฟเวอร์ตัวที่ 2

พอปรับโค้ดตามด้านหมดแล้วเราก็จัดการ

nginx_blog# docker-compose

ถ้ารันผ่านแบบไม่มี error ก็เปิดบราวเซอร์แล้วเข้าไปที่ a.site.com ตามที่เราเคยกำหนดไว้ตั้งแต่ตอนที่ 1 นั้นแหละครับ

โอ้เยสสส หน้าเว็บขึ้นมาแล้ว ลองทดสอบกันหน่อยว่า load balance ทำงานไหมด้วยการกด F5 เพื่อ refresh จะเห็นว่าหน้าเว็บจะขึ้นเป็น Hello Site A บ้าง Hello Site B บ้างสลับกันเพราะมันกระจายโหลดไปให้แต่ละ container ทำงาน แต่จะสังเกตได้ว่ามันจะขึ้น Hello Site B บ่อยกว่าเพราะว่าเรากำหนด weight ให้มันทำงานมากกว่าชาวบ้านนั้นเอง

ตอนที่ 2 ก็ขอจบแต่เพียงเท่านี้นะค้าบบบ ส่วนตอนที่ 3 จะมีหรือเปล่าต้องรอดูอีก ขอบคุณทุกท่านที่ติดตามครับ -/\-

--

--