Config Server ง่าย ๆ ด้วย NGINX ตอนที่ 2
ฮัลโหลลลล สวัสดีปีใหม่ครับทุกท่าน -/\- เดือนที่แล้วกระผมได้เขียนบล็อก 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 ให้มันทำงานมากกว่าชาวบ้านนั้นเอง