• About
  • Advertise
  • Privacy & Policy
  • Contact
NQ NEWS
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
  • Đời sống thường thức
    • Tất cả
    • Bí ẩn - Chuyện lạ
    • Câu chuyện Khoa học
    • Chăm sóc Nhà cửa
    • Chăm sóc Sức khỏe
    • Chụp ảnh - Quay phim
    • Cưới hỏi
    • Dịch vụ ngân hàng
    • Game - Trò chơi
    • Kỹ năng
    • Là gì?
    • Mẹo hay
    Ielts La Gi 640 1

    IELTS là gì? Những điều cần biết về IELTS

    Cài font chữ

    Kẻ ô ly vuông trong Word và in ô ly Word

    Vivo Y33s

    3 cách chụp ảnh đẹp trên Vivo Y33s với nhiều hiệu ứng, filter độc đáo

    cách xem tin nhắn đã thu hồi trên messenger trên điện thoại

    Cách xem tin nhắn đã thu hồi trên Messenger cho điện thoại Android

    Cách hẹn giờ gửi tin nhắn chúc mừng

    Cách hẹn giờ gửi tin nhắn chúc mừng trên điện thoại vào dịp đặc biệt

    cách nhập code Play Together

    Nhập Full Code Play Together MỚI NHẤT hôm nay nhận quà khủng 2022

    • Bí ẩn – Chuyện lạ
    • Câu chuyện Khoa học
    • Chăm sóc Nhà cửa
    • Chăm sóc Sức khỏe
    • Chụp ảnh – Quay phim
    • Cưới hỏi
    • Dịch vụ ngân hàng
    • Game – Trò chơi
    • Kỹ năng
  • Nhịp sống công nghệ
    • Tất cả
    • Ảnh đẹp Khoa học
    • Anh tài công nghệ
    • Ảnh, đồ họa
    • Bình luận công nghệ
    • Chuyện công nghệ
    • Công nghệ
    • Công nghệ mới
    • Dịch vụ công trực tuyến
    • Dịch vụ nhà mạng
    Cuoc Thi Bao Mat 700 1

    Hai chuyên gia bảo mật Việt Nam giành giải thưởng 40.000 USD trong cuộc thi tấn công mạng Pwn2Own 2021

    He Tri Thuc Viet So Hoa 650 1

    Trải nghiệm sử dụng itrithuc.vn – dự án hệ tri thức Việt được số hóa đầu tiên

    Viettel Kiem Tra Thong Tin Thue Bao 700 1

    Kiểm tra thông tin thuê bao Viettel như thế nào?

    Hang Dien Thoai Lon Nhat 640 1

    Danh sách những hãng smartphone lớn nhất thế giới (cập nhật liên tục)

    Ai Gpt 3 Cua Elon Musk Vua Viet Ca Mot Bai Xa Luan Gay Chan Dong Tren Bao Anh 640 1

    AI viết bài xã luận gây chấn động trên báo Anh, tuyên bố sẽ không hủy diệt loài người

    V120 Viettel Dang Ky 640 1

    Cách đăng ký gói V120 Viettel

    Youtube Da Ra Doi Nhu The Nao Doi Net Ve De Che Youtube640 1

    YouTube đã ra đời như thế nào? Đôi nét về ‘đề chế’ YouTube

    Apple Ung Dung Nhan Dien Airtag Tren Android700 1

    Apple phát hành ứng dụng nhận diện AirTag trên Android

    He Dieu Hanh Se Khong Con Co The Su Dung Whatsapp640 1

    Đây là những hệ điều hành không thể tải WhatsApp trong thời gian tới

Không có kết quả
Xem tất cả kết quả
  • Kiến thức tổng hợp
    • Development
    • Deep Learning
    • Cloud Computing
    • Kiến thức bảo mật
    • Tin học văn phòng
  • Thủ thuật
    • Phần Mềm
    • Sửa lỗi máy tính
    • Bảo mật máy tính
    • Tăng tốc máy tính
    • Thủ thuật Wifi
  • Quản trị hệ thống
    • Giải pháp bảo mật
    • Mail Server
    • Mạng LAN – WAN
    • Máy chủ
    • Windows Server 2012
  • Tin tức
  • Đời sống thường thức
    • Tất cả
    • Bí ẩn - Chuyện lạ
    • Câu chuyện Khoa học
    • Chăm sóc Nhà cửa
    • Chăm sóc Sức khỏe
    • Chụp ảnh - Quay phim
    • Cưới hỏi
    • Dịch vụ ngân hàng
    • Game - Trò chơi
    • Kỹ năng
    • Là gì?
    • Mẹo hay
    Ielts La Gi 640 1

    IELTS là gì? Những điều cần biết về IELTS

    Cài font chữ

    Kẻ ô ly vuông trong Word và in ô ly Word

    Vivo Y33s

    3 cách chụp ảnh đẹp trên Vivo Y33s với nhiều hiệu ứng, filter độc đáo

    cách xem tin nhắn đã thu hồi trên messenger trên điện thoại

    Cách xem tin nhắn đã thu hồi trên Messenger cho điện thoại Android

    Cách hẹn giờ gửi tin nhắn chúc mừng

    Cách hẹn giờ gửi tin nhắn chúc mừng trên điện thoại vào dịp đặc biệt

    cách nhập code Play Together

    Nhập Full Code Play Together MỚI NHẤT hôm nay nhận quà khủng 2022

    • Bí ẩn – Chuyện lạ
    • Câu chuyện Khoa học
    • Chăm sóc Nhà cửa
    • Chăm sóc Sức khỏe
    • Chụp ảnh – Quay phim
    • Cưới hỏi
    • Dịch vụ ngân hàng
    • Game – Trò chơi
    • Kỹ năng
  • Nhịp sống công nghệ
    • Tất cả
    • Ảnh đẹp Khoa học
    • Anh tài công nghệ
    • Ảnh, đồ họa
    • Bình luận công nghệ
    • Chuyện công nghệ
    • Công nghệ
    • Công nghệ mới
    • Dịch vụ công trực tuyến
    • Dịch vụ nhà mạng
    Cuoc Thi Bao Mat 700 1

    Hai chuyên gia bảo mật Việt Nam giành giải thưởng 40.000 USD trong cuộc thi tấn công mạng Pwn2Own 2021

    He Tri Thuc Viet So Hoa 650 1

    Trải nghiệm sử dụng itrithuc.vn – dự án hệ tri thức Việt được số hóa đầu tiên

    Viettel Kiem Tra Thong Tin Thue Bao 700 1

    Kiểm tra thông tin thuê bao Viettel như thế nào?

    Hang Dien Thoai Lon Nhat 640 1

    Danh sách những hãng smartphone lớn nhất thế giới (cập nhật liên tục)

    Ai Gpt 3 Cua Elon Musk Vua Viet Ca Mot Bai Xa Luan Gay Chan Dong Tren Bao Anh 640 1

    AI viết bài xã luận gây chấn động trên báo Anh, tuyên bố sẽ không hủy diệt loài người

    V120 Viettel Dang Ky 640 1

    Cách đăng ký gói V120 Viettel

    Youtube Da Ra Doi Nhu The Nao Doi Net Ve De Che Youtube640 1

    YouTube đã ra đời như thế nào? Đôi nét về ‘đề chế’ YouTube

    Apple Ung Dung Nhan Dien Airtag Tren Android700 1

    Apple phát hành ứng dụng nhận diện AirTag trên Android

    He Dieu Hanh Se Khong Con Co The Su Dung Whatsapp640 1

    Đây là những hệ điều hành không thể tải WhatsApp trong thời gian tới

Không có kết quả
Xem tất cả kết quả
NQ NEWS
Không có kết quả
Xem tất cả kết quả
Trang chủ Kiến thức tổng hợp Development

Sử dụng NGINX như một Load Balancer

@admiz bởi @admiz
21/04/2022
trong Development
0
Sử Dụng Nginx Như Một Load Balancer 60902ebd041ba.gif

Nội dung

  • 1 Thế nào Load Balancing
  • 2 Sử dụng NGINX làm load balancer
  • 3 Cấu hình Upstream trên Master
  • 4 Lựa chọn thuật toán cân bằng tải
  • 5 Bảo toàn session người dùng
  • 6 3. Thực hành

Thế nào Load Balancing

Load Balancing (hay còn gọi là Cân bằng tải) là một kỹ thuật thường được sử dụng để tối ưu hóa việc sử dụng tài nguyên, băng thông, giảm độ trễ, và tăng cường khả năng chịu lỗi.

Khi chúng ta có nhiều hơn một Web Server, cùng với đó là sự gia tăng lưu lượng truy cập thì việc bổ sung thêm một máy chủ để phân phối lưu lượng này một cách hợp lý là cần thiết. Máy chủ được bổ sung này được gọi là Load Balancer.

Ảnh 1.

Sử dụng NGINX làm load balancer

Trong bài viết này mình sẽ sử dụng 3 server đều được cài đặt nginx, với vai trò như sau:

• Master: Đóng vai trò là Load balancer

• Backend1: Webserver 1

• Backend2: Webserver 2

Cả 2 Web Server 1 & 2 đều có chứa source code của một ứng dụng php và kết nối tới chung một MariaDB server. Công việc của chúng ta là cấu hình sao cho khi người dùng truy cập vào vhost thì Masterserver sẽ điều hướng tới một trong hai Backend server, đồng thời không để mất Session người dùng.

Cấu hình Upstream trên Master

Để bắt đầu sử dụng NGINX với một nhóm các máy chủ web, đầu tiên, bạn cần khai báo upstreamgroup. Directive này được đặt trong http block.

http {

upstream backend {

server backend1;

server backend2;

Ở đây Backend1 và Backend2 chính là Server Name của 2 máy chủ Web, ta có thể thay bằng địa chỉ IP tương ứng.

Để truyền các Request từ người dùng vào một Group các Server, tên của Group được truyền vào với directive proxy_pass (hoặc fastcgi_pass, memcached_pass, uwsgi_pass, scgi_pass tùy thuộc vào giao thức). Trong bài viết này, Virtual Server chạy trên NGINX sẽ truyền tất cả các Request tới Backend Upstream Server:

server {

location / {

proxy_pass http://backend;

Kết hợp lại ta có cấu hình sau cho Master server:

http {

upstream backend {

server backend1;

server backend2;

server {

location / {

proxy_pass http://backend;

Lựa chọn thuật toán cân bằng tải

Có rất nhiều thuật toán cho mọi người lựa chọn như round-robin, least_conn, least_time, ip_hash,…

Trong bài viết này mình lựa chọn round-robin: Các Request lần lượt được đẩy về 2 Server Backend1 và Backend2 theo tỉ lệ dựa trên Server Weights, ở đây là 1:1:

upstream backend {

server backend1;

server backend2;

Bảo toàn session người dùng

Khi làm Product cho Khách hàng mình đã từng gặp bài toán Website sử dụng 2 Server Memcached để Share Session (Việc read & write session sử dụng memcached driver) người dùng giữa nhiều cụm Web Server Backend sử dụng Apache PHP 5.6 Laravel 5.2. Và khi đọc log thì ngỡ ngàng việc xảy ra quá nhiều lỗi:

TokenMismatchException in VerifyCsrfToken.php

Đơn giản chỉ vì việc đồng bộ hóa Session giữa 2 Server Memcached diễn ra quá chậm, bị ảnh hưởng bởi yếu tố Network, I/O.

Nhanh gọn hơn NGINX có cung cấp Sticky Directive, giúp NGINX Tracks user sessions và đưa họ tới đúng upstream server.

Tham khảo: https://www.nginx.com/products/session-persistence/

• Hash được sinh từ 3 chỉ số đầu của một IP, do đó tất cả IP trong cùng C-class network sẽ đc điều hướng tới cùng một backend.

• Tất cả user phía sau một NAT sẽ truy cập vào cùng một backend.

• Nếu ta thêm mới một backend, toàn bộ hash sẽ thay đổi, đương nhiên session sẽ mất.

Sau khi tham khảo các bài viết trên mạng thì mình tìm được hướng giải quyết như sau:

upstream backend {

server backend1;

server backend2;

map $cookie_backend $sticky_backend {

backend1 backend1;

backend2 backend2;

default backend;

server {

listen 80;

server_name localhost;

location / {

set $target http://$sticky_backend;

proxy_pass $target;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-Proto $scheme;

• Bước 1: Khi user lần đầu tiên truy cập vào Master server, lúc đó sẽ ko có backend cookie nào được đưa ra, và dĩ nhiên $sticky_backend NGINX variable sẽ được chuyển hướng tới Upstream group. Trong trường hợp này, Request sẽ được chuyển tới Backend 1 hoặc Backend 2 theo phương thức round robin.

• Bước 2: Trên các Webserver Backend 1 và Backend 2, ta cấu hình ghi các cookie tương ứng với mỗi Request đến:

server {

listen 80 default_server;

…

location ~ ^/. .php(/|$) {

add_header Set-Cookie “backend=backend1;Max-Age=3600”;

…

server {

listen 80 default_server;

…

location ~ ^/. .php(/|$) {

add_header Set-Cookie “backend=backend2;Max-Age=3600”;

…

Dễ thấy nếu Request được Pass vào Backend nào, thì trên Client của User sẽ ghi một cookie có name=backend & value=backend1 or backend2 tương ứng.

• Bước 3: Mỗi khi user Request lại tới Master, NGINX sẽ thực hiện map $cookie_backend với $sticky_backend tương ứng và chuyển hướng người dùng vào server đó qua proxy_pass.

Không biết cách này có tốt không, nhưng ở mức độ demo thì vẫn tạm ổn. Nếu chẳng may server tương ứng với cookie lăn ra chế thì vẫn chưa có hướng giải quyết 🙁

Health Checks (Giống kiểm tra sức khỏe vậy :3) là thực liên tục việc kiểm tra các Server trên Upstream được khai báo trong config của bạn để tránh việc điều hướng các Request của người dùng vào các Server không hoạt động. Tóm lại là việc này nhằm đảm bảo người dùng không nhìn thấy các page thông báo lỗi khi chúng ta tắt đi 1 Server nào đó, hoặc server nào đó đột xuất bị lỗi không hoạt động.

• max_fails: Số lần kết nối không thành công trong một khoảng thời gian nhất định tới backend server. Giá trị mặc định là 0 (disabled heath checks)

• fail_timeout: Khoảng thời gian xảy ra số lượng max_fails kết nối không thành công. Giá trị mặc định là 10.

Khi có 1 Server backend bị fail, Nginx Master sẽ điều hướng toàn bộ các Traffic sang lần lượt các backend còn lại.

upstream backend {

server backend1 max_fails=3 fail_timeout=10s;

server backend2 max_fails=3 fail_timeout=10s;

• Quay lại mục [2.3. Bảo toàn session người dùng] việc điều hướng tới Server nào đang nắm giữ Session dựa vào $sticky_backend, tuy nhiên nếu $sticky_backend=backend1 mà server backend 1 ra đi thì sao ? lúc này ta buộc phải chuyển hướng các user ở backend 1 sang các server backend còn lại. Ở đây mình trigger event set lại $sticky_backend sang server khác khi có lỗi Gateway Time-out xảy ra trên proxy server.

upstream backend {

server backend1;

server backend2;

…

server {

listen 80;

server_name localhost;

location / {

set $target http://$sticky_backend;

proxy_pass $target;

…

# 504 Gateway Time-out

error_page 504 = @backend_down;

location @backend_down {

proxy_pass http://backend;

PS: Nếu có $ thì có thể dùng add-on health checks của Nginx Plus: https://www.nginx.com/products/application-health-checks/

3. Thực hành

• Cài đặt docker: https://docs.docker.com/engine/installation/

• Cài đặt docker-compose: https://docs.docker.com/compose/install/

• Repo: https://github.com/euclid1990/nginx-load-balancing

Command:

$ git clone git@github.com:euclid1990/nginx-load-balancing.git

$ cd nginx-load-balancing

$ docker-compose up

Demo này mình chạy trên Ubuntu host, nếu chạy trên Mac hoặc Windows có thể phải sửa lại file docker-compose.yml cho phù hợp. Khi làm demo này, phần mình cảm thấy rắc rối nhất là generate ra file config cho Master server, vì nếu không khai báo IP của container Backend 1 & Backend 2 thì NGINX không tự động resolve đc host name theo tên service, trong khi IP của 2 container này không cố định (Để hiểu thêm về composer file, vui lòng tham khảo https://docs.docker.com/compose/compose-file/) :

Ảnh 12.

Sau khi quá trình Build và Run Container hoàn tất. Ta sẽ có 3 cụm máy chủ có thể Access theo địa chỉ sau:

• Master : http://localhost:8696

• Backend 1 : http://localhost:8697

• Backend 2 : http://localhost:8698

Ở đây source code web có được chỉnh sửa một chút, để ta dễ thấy việc chuyển hướng tới các máy chủ khác nhau khi truy cập qua Load balancer *Master*

Trên các browser truy cập vào địa chỉ của Master:

Ảnh 13.

Ảnh 14.

Ảnh 15.

Với mỗi Request tới Backend, chúng ta đều ghi Cookie cho Backend tương ứng để chuyển hướng đúng người dùng về Server đầu tiên họ vào, tránh việc bị mất Session khi truy cập.

Ảnh 16.

Post Views: 96

Có thể bạn quan tâm bài viết

5 Bước Cài đặt Lemp Stack Trên Ubuntu 16.04 60902eddebb15.png
Development

5 bước cài đặt LEMP stack trên Ubuntu 16.04

05/05/2021
Tăng Tốc độ Làm Việc Trên Ubuntu Qua Command đặc Biệt 60902eda2d54e.png
Development

Tăng tốc độ làm việc trên Ubuntu qua command đặc biệt

05/05/2021
Quản Lý Các User Trong Ubuntu Server (p1) 60902ed56b2cc.png
Development

Quản lý các User trong Ubuntu Server (P1)

05/05/2021
Tìm Hiểu Quy Trình Tc39 60902ecd58440.jpeg
Development

Tìm hiểu quy trình TC39

21/04/2022
Làm Quen Với Mithriljs – Phần 1 60902ec9a4f01.jpeg
Development

Làm quen với MithrilJS – Phần 1

21/04/2022
Làm Quen Với Mithriljs – Phần 2 60902ec600017.jpeg
Development

Làm quen với MithrilJS – Phần 2

21/04/2022

Bài mới nhất

Thiết Kế Website Thực Phẩm Chức Năng Uy Tín, Chất Lượng, Chuẩn Seo 612d08d83a296.jpeg

Thiết kế website thực phẩm chức năng uy tín, chất lượng, chuẩn SEO

05/02/2023
Thiết Kế Website Trung Tâm Gia Sư Uy Tín, Chuyên Nghiệp Và Chất Lượng 612d0a0d7e501.jpeg

Thiết kế website trung tâm gia sư uy tín, chuyên nghiệp và chất lượng

04/02/2023
Thiết Kế Website Dịch Vụ Bảo Vệ, An Ninh Chuyên Nghiệp Và Giao Diện Hiện đại 612d098d4c595.png

Thiết kế website dịch vụ bảo vệ, an ninh chuyên nghiệp và giao diện hiện đại

04/02/2023
Thiết Kế Website Xuất Khẩu Lao động, đi Du Học Chuyên Nghiệp, Giá Rẻ 612d08e0cb2c2.jpeg

Thiết kế website xuất khẩu lao động, đi du học chuyên nghiệp, giá rẻ

03/02/2023
Thiết Kế Website Bán Mắt Kính Uy Tín Và Thời Thượng Nhất Hiện Nay 612d0a181fc93.jpeg

Thiết kế website bán mắt kính uy tín và thời thượng nhất hiện nay

03/02/2023

Categories

  • Android
  • Ảnh đẹp Khoa học
  • Anh tài công nghệ
  • Ảnh, đồ họa
  • Bảo mật máy tính
  • Bảo mật, Antivirus
  • Bí ẩn – Chuyện lạ
  • Bình luận công nghệ
  • Câu chuyện Khoa học
  • Chăm sóc Nhà cửa
  • Chăm sóc Sức khỏe
  • Chụp ảnh – Quay phim
  • Chuyện công nghệ
  • Công nghệ
  • Công nghệ mới
  • Cưới hỏi
  • Deep Learning
  • Development
  • Dịch vụ công trực tuyến
  • Dịch vụ ngân hàng
  • Dịch vụ nhà mạng
  • DIY – Handmade
  • Đời sống thường thức
  • Game – Trò chơi
  • Giải pháp bảo mật
  • Giải trí
  • Giáng sinh – Noel
  • Giao tiếp, liên lạc, hẹn hò
  • Hệ thống
  • Hệ thống
  • Hỗ trợ học tập
  • Họp, học trực tuyến
  • Internet
  • iPhone
  • Khám phá khoa học
  • Khám phá thiên nhiên
  • Khoa học công nghệ
  • Khoa học Vũ trụ
  • Khoa học vui
  • Kiến thức bảo mật
  • Kiến thức căn bản
  • Kiến thức cơ bản
  • Kiến thức tổng hợp
  • Kinh nghiệm Du lịch
  • Kỹ năng
  • Là gì?
  • Làm đẹp
  • Lập trình
  • Linux
  • Linux OS
  • Lưu trữ đám mây
  • macOS
  • Mail Server
  • Mạng LAN – WAN
  • Máy ảo
  • Máy chủ
  • Máy công cụ
  • Máy hút mùi
  • Mẹo hay
  • Mẹo vặt
  • ms excel
  • ms-powerpoint
  • Nền tảng điện toán đám mây
  • Nhà thông minh
  • Phần cứng
  • Phần cứng
  • Phần Mềm
  • Phân phối
  • Quà tặng
  • Quản trị hệ thống
  • Quạt các loại
  • Quiz công nghệ
  • Raspberry Pi
  • Sửa lỗi máy tính
  • Tải game
  • Tấn công mạng
  • Tăng tốc máy tính
  • Tết 2022
  • Tết Trung thu
  • Thủ thuật
  • Thủ thuật SEO
  • Thủ thuật Wifi
  • Tiện ích hệ thống
  • Tin học văn phòng
  • Tin tức
  • Tivi
  • Trí tuệ nhân tạo (AI)
  • Tủ lạnh
  • Uncategorized
  • Ứng dụng
  • Ứng dụng văn phòng
  • Video Khoa học
  • Video, phim, nhạc
  • Website
  • Windows Server 2012

Tags

#app #chatbot #chatbot tự động #CRM #Email Marketing #Kiến thức cơ bản #Techblog #Thiết kế website Android apple cách chơi Pokémon Go Gmail Google Google Drive hacker HTML hàm python hàm python có sẵn hình nền máy tính học css học python học SQL ios iphone iphone 12 Microsoft minecraft mssql MS SQL Server Pokémon Go PUBG Mobile python Raspberry Pi Samsung smartphone SQL Server thiết bị số tivi tài liệu python windows windows 10 YouTube điện thoại di động điện thoại thông minh ứng dụng
  • About
  • Advertise
  • Privacy & Policy
  • Contact

© 2022 Pha Le Solution

Không có kết quả
Xem tất cả kết quả
  • Home

© 2022 Pha Le Solution

Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?