Triển khai dịch vụ High Available với Keepalived + HAproxy trên server Ubuntu
High Available có tên tiếng Việt thân thiện là " tính sẵn sàng cao" - ám chỉ các dịch vụ, ứng dụng hoặc một thứ gì đó luôn sẵn sàng hoạt động phục vụ người dùng. Trong thời buổi công nghệ thông tin bùng phát như hiện nay, một dịch vụ có thể có đến hàng chục nhà cung cấp khác nhau. Do vậy, để tăng ...
High Available có tên tiếng Việt thân thiện là " tính sẵn sàng cao" - ám chỉ các dịch vụ, ứng dụng hoặc một thứ gì đó luôn sẵn sàng hoạt động phục vụ người dùng. Trong thời buổi công nghệ thông tin bùng phát như hiện nay, một dịch vụ có thể có đến hàng chục nhà cung cấp khác nhau. Do vậy, để tăng năng lực cạnh tranh cũng như hiệu quả kinh doanh thì ngoài dịch vụ tốt ra, các nhà cung cấp còn phải đảm bảo yếu tố "luôn luôn sẵn sàng phục vụ" của dịch vụ mà mình cung cấp.
Bạn cứ thử tưởng tượng, với một dịch vụ mail chẳng hạn. Bạn vốn là user ruột của dịch vụ abc@mail gì gì đó ,bỗng dưng 1 ngày đẹp trời sáng trăng nọ, bạn đang cần nhận một email từ khách hàng hoặc bạn bè. Thế mà cái dịch vụ mail kia bỗng dưng dở chứng 404 với 505 các kiểu con đà điểu ! Bạn không thể nào check được cái mail mà mình cần. Rồi bạn liên lạc với khách hàng, bạn bè của bạn và than phiền rằng mình không thể check được mail do bị làm sao ấy chả biết ! Bạn bè, khách hàng của bạn lập tức cho bạn lời khuyên rằng " Sao ông không dùng cái mail xyz ấy, nó tốt hơn nhiều, chả bao giờ bị thế đâu !! ". Và thế là a-lê-hấp , anh dịch vụ mail abc@mail bỗng dưng mất một user trung thành vào tay anh xyz@mail vì lý do mail server bị chuột cắn mất dây =)).
Để phòng tránh các sự cố làm gián đoạn dịch vụ như trên, tất nhiên chúng ta phải tiến hành diệt chuột tận gốc trong khu vực đặt server =)). Ngoài chuột ra thì còn có ty tỷ lý do khác khiến cho dịch vụ chúng ta bị gián đoạn. Lúc này nguyên tắc bất hủ "không bao giờ để trứng trong cùng một rổ" được áp dụng tối đa. Ở bài viết trước, mình đã hướng dẫn các bạn cách tách riêng các server ra và cân bằng tải cũng như fail-over với HAproxy . Các bạn có thể tham khảo tại đây.
Trong mô hình mình triển khai ở bài viết trước như trên. Rất dễ nhận ra điểm yếu của hệ thống nằm ở anh Loadbalancer HAproxy ! Nếu chẳng may anh ấy đột tử thì xem như việc tăng số lượng webserver phía sau gần như không còn ý nghĩa gì trong việc tăng khả năng chịu lỗi(fail-over) của dịch vụ. Vậy, giải pháp nâng cấp cho mô hình trên tất nhiên sẽ là xây dựng thêm nhiều anh HAproxy nữa. Khi xây dựng thêm các Loadbalancer cùng chạy song song thì lại nảy sinh ra một vấn đề khác - đó là user sẽ truy cập vào đâu ?? Cùng một dịch vụ, chúng ta không thể nào đưa cho user 2 IP truy cập được. Để giải quyết bài toán đó, chúng ta có 1 giải pháp đó là sử dụng Virtual IP ( IP ảo) để user truy cập vào. Các Loadbalacer của chúng ta lúc này sẽ chỉ hoạt động với cùng một V-IP. Có khá nhiều giải pháp cung cấp tính năng Virtual IP như UCARP , Keepalived... Và trong khuôn khổ bài viết này, mình sẽ giới thiệu các bạn về Keepalived.
Keepalived (Nghe như lời 1 bài hát của nhóm Scorpions =))) là một dạnh định tuyến "mềm" được viết bằng C. Mục đích để cung cấp các tính năng Loadbalacing và High available cho các hệ thống Linux. Phiên bản đầu tiên được ra đời tháng 12-2000, đến nay đã trải qua 16 năm phát triển. Các bạn có thể xem thêm tại www.keepalived.org Để dễ hiểu về tính năng cũng như cách hoạt động của keepalived, chúng ta sẽ đi thẳng vào phần cài đặt và config.
Vì vấn đề con lap cùi không thể chạy nhiều máy ảo được , và chủ yếu là ..... lười nên mình sẽ chỉ dựng lên 2 server, với mỗi server mình sẽ cài đặt cả 3 dịch vụ keepalived , HAproxy và Apache2. Mô hình như sau :
– Test1 Hostname: test1 OS: Ubuntu server 16.04 Service : Keepalived + HAproxy + Apahce2 Private IP: 172.17.3.98 – Test2 Hostname: test2 OS: Ubuntu server 16.04 Service : Keepalived + HAproxy + Apache2 Private IP: 172.17.3.99
Cài đặt các máy chủ :
Trên mỗi máy chủ, chúng ta lần lượt cài đặt các dịch vụ sau :
sudo apt-get update sudo apt-get install apache2 sudo apt-get keepalived sudo apt-get install haproxy #hoặc lười gì gõ luôn sudo apt-get install apache2 keepalived haproxy
Sau khi cài đặt , có thể kiểm tra các phiên bản đã cài bằng các câu lệnh :
apache2 --v haproxy --v keepalived --v
Lần lượt trên từng máy test1 và test2, các bạn thay đổi nội dung trang index.html mặc định trong /var/www/html/index.html để chuẩn bị cho bước test cho dễ