Chúng ta đều biết NGINX là một công cụ Web Server được sử dụng phổ biến để làm Reverse Proxy, cân bằng tải hay HTTP cache. Hôm nay, mình sẽ hướng dẫn bạn cách triển khai Highly Available (HA) cho NGINX Web Server sử dụng công cụ keepalived.
Trước hết, bạn cần cài đặt NGINX để làm Web Server:
$ sudo dnf install -y nginx
Tiếp theo, bạn cần tạo file index.html trên cả 2 node:
[tel4vn@nginx1 ~]$ echo "<h1>This is NGINX Web Server from Node 1</h1>" | sudo tee /usr/share/nginx/html/index.html
[tel4vn@nginx2 ~]$ echo "<h1>This is NGINX Web Server from Node 2</h1>" | sudo tee /usr/share/nginx/html/index.html
Tiếp tục mở port cho NGINX trên firewall:
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd -reload
Khởi động lại dịch vụ NGINX:
$ sudo systemctl start nginx $ sudo systemctl enable nginx
Lúc này, bạn có thể kiểm tra lại để xác nhận NGINX trên cả 2 node đều chạy đúng:
$ curl http://192.168.1.130 <h1>This is NGINX Web Server from Node 1</h1> $ curl http://192.168.1.140 <h1>This is NGINX Web Server from Node 2</h1>
Trước hết, bạn hãy cài đặt keepalived trước khi có thể cấu hình nó:
$ sudo dnf install -y keepalived
Sau đó, bạn hãy cấu hình để node 1 là master node, node 2 là backup node như sau:
[tel4vn@nginx1 ~]$ echo -n | sudo tee /etc/keepalived/keepalived.conf [tel4vn@nginx1 ~]$ sudo vi /etc/keepalived/keepalived.conf
Thêm đoạn cấu hình sau vào file:
global_defs { # Keepalived process identifier router_id nginx } # Script to check whether Nginx is running or not vrrp_script check_nginx { script "/bin/check_nginx.sh" interval 2 weight 50 } # Virtual interface - The priority specifies the order in which the assigned interface to take over in a failover vrrp_instance VI_01 { state MASTER interface enp0s3 virtual_router_id 151 priority 110 # The virtual ip address shared between the two NGINX Web Server which will float virtual_ipaddress { 192.168.1.150/24 } track_script { check_nginx } authentication { auth_type AH auth_pass secret } }
Tiếp theo, bạn hãy tạo một shell script để thực hiện kiểm tra xem NGINX có chạy hay không. Nếu kết quả trả về trừ script là không chạy thì keepalived sẽ chuyển sang địa chỉ IP trên backup node:
[tel4vn@nginx1 ~]$ sudo vi /bin/check_nginx.sh #!/bin/sh if [ -z "`pidof nginx`" ]; then exit 1 fi
Lưu lại file script và gán quyền thực thi:
[tel4vn@nginx1 ~]$ sudo chmod 755 /bin/check_nginx.sh
[tel4vn@nginx1 ~]$ scp /etc/keepalived/keepalived.conf root@192.168.1.140:/etc/keepalived/ [tel4vn@nginx1 ~]$ scp /bin/check_nginx.sh root@192.168.1.140:/bin/
Trong đó, file /etc/keepalived/keepalived.conf trên node 2 cần phải chỉnh sửa state từ MASTER thành BACKUP và priority chỉnh thành 100 như bên dưới:
Tiếp tục, bạn cần thực thi các câu lệnh mở port cho địa chỉ IP ảo trên firewall ở cả 2 node:
$ sudo firewall-cmd --add-rich-rule='rule protocol value="vrrp" accept' --permanent $ sudo firewall-cmd --reload
Cuối cùng là khởi động lại dịch vụ keepalived để cập nhật cấu hình mới:
$ sudo systemctl start keepalived $ sudo systemctl enable keepalived
Bạn có thể kiểm tra trạng thái của keepalived theo câu lệnh bên dưới:
$ sudo systemctl status keepalived
Khi kiểm tra địa chỉ IP trên master node, bạn có thể thấy một địa chỉ IP ảo được tạo ra:
Bây giờ, bạn hãy thử truy cập website theo địa chỉ IP ảo 192.168.1.150. Mặc định sẽ master node sẽ phản hồi các truy cập:
Tiếp tục tắt NGINX trên master node, khi truy cập lại website theo địa chỉ IP ảo, bạn sẽ thấy keepalived đã chuyển lưu lượng sang cho backup node:
Như vậy, mình đã hướng dẫn bạn cài đặt và cấu hình HA trên NGINX sử dụng keepalived. Cuối cùng, với bất kì thắc mắc nào, bạn hãy bình luận ở bên dưới để mình hỗ trợ nhé.
Nguồn bài viết: https://www.linuxtechi.com/
Powered by BetterDocs
Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Δ
Ghi nhớ tôi
Chưa đăng ký? Đăng ký
Năm sinh
Bạn đã đăng ký? Đăng nhập ngay