Khi hệ thống mạng gia đình (home network) ngày càng phát triển và số lượng dịch vụ tự host tăng lên, sự phụ thuộc vào các dịch vụ đó cũng theo đó mà lớn dần. Đây là sự đánh đổi giữa quyền riêng tư khi dữ liệu nằm trên các thiết bị của riêng bạn, thay vì trên các máy chủ đám mây của công ty khác, và đi kèm với đó là hàng loạt trách nhiệm bổ sung. Dù sẵn lòng chấp nhận, điều này có nghĩa là bạn cần tìm cách đảm bảo tính sẵn sàng cao (High Availability – HA) cho các dịch vụ đó, bởi vì bạn không phải là người duy nhất trong gia đình sử dụng, và sự cố mất dịch vụ giờ đây là vấn đề của chính bạn.
Điều này dẫn đến việc xây dựng một cụm Proxmox HA để các máy ảo (VM) ít có khả năng bị gián đoạn hơn, nhưng vẫn còn một điểm lỗi duy nhất về mặt kết nối mạng. Đây là lúc Keepalived xuất hiện. Keepalived sử dụng giao thức dự phòng bộ định tuyến ảo (Virtual Router Redundancy Protocol – VRRP) để chia sẻ nhiều máy chủ hoặc dịch vụ trên một địa chỉ IP ảo duy nhất, đồng thời cung cấp phương pháp chuyển đổi dự phòng (failover) nếu một trong số chúng gặp sự cố. Đây là một công cụ tuyệt vời để xây dựng một mạng lưới linh hoạt hơn và hoạt động gần như liền mạch. Dù có thể sử dụng HAProxy cho chức năng failover tương tự và có thêm cân bằng tải, nhưng điều gì sẽ ngăn HAProxy gặp sự cố? À, đúng rồi, một phiên bản Keepalived khác. Vì vậy, tôi sẽ tập trung vào các giải pháp đơn giản mà tôi đã biết, ít nhất là ở giai đoạn này.
1. Đảm Bảo Máy Chủ DNS (Ví Dụ: Technitium) Luôn Hoạt Động
Technitium mạnh mẽ, nhưng cần Keepalived cho đến khi có tính năng clustering
Tự host một máy chủ DNS là một quá trình đáng giá, mang lại sự riêng tư rất cần thiết cho các thiết bị, mạng và thông tin cá nhân của bạn trong thời đại mà mọi hoạt động trên internet đều có thể bị theo dõi và kiếm tiền từ đó. Thay vì chấp nhận điều này, chúng ta nên chủ động thực hiện các biện pháp phòng ngừa. Đồng nghiệp của tôi đã sử dụng hai máy chủ Pi-hole chính vì lý do này, để nếu một máy chủ gặp sự cố, máy chủ kia sẽ tiếp quản và mạng của anh ấy vẫn được bảo vệ.
Tôi thực hiện một cách tương tự, nhưng với Technitium, một máy chủ DNS đầy đủ tính năng mà bạn có thể tự host. Lộ trình phát triển của nó có đề cập đến tính năng clustering trong tương lai, vì vậy tại một thời điểm nào đó, tôi sẽ có thể kết nối nhiều phiên bản Technitium với nhau bằng các cài đặt tích hợp sẵn. Nhưng ngày đó vẫn còn ở phía trước. Cho đến lúc đó, tôi đã cài đặt Keepalived trên NAS và trên một mini PC chạy Proxmox, cho phép tôi sử dụng một IP ảo để truy cập cả hai phiên bản Technitium. Điều duy nhất khác biệt để nó hoạt động là thêm dòng sau vào các máy chủ, sau đó liên kết Technitium với cả IP máy chủ và IP ảo trong Keepalived, và thêm IP ảo vào cài đặt DNS Server Local End Points trong Technitium.
net.ipv4.ip_nonlocal_bind=1
Một máy tính xách tay Windows hiển thị giao diện Pi-hole trong trình duyệt web
2. Hệ Thống Nhà Thông Minh (Home Assistant) Không Bao Giờ Gián Đoạn
Home Assistant không nên có một điểm lỗi duy nhất
Tôi sử dụng Home Assistant để tự động hóa nhà thông minh và tích hợp nhiều hệ sinh thái khác nhau mà tôi đã thu thập trong nhiều năm thành một thể thống nhất. Điều này hoạt động cực kỳ hiệu quả khi máy ảo (VM) chạy trên NAS của tôi có thể truy cập được bởi phần còn lại của mạng. Tuy nhiên, đôi khi kết nối đến thiết bị đó bị ngắt. Bạn sẽ không chấp nhận việc các máy chủ Google Home hoặc HomeKit ngừng hoạt động trong một khoảng thời gian đáng kể, và tôi cũng không chấp nhận việc Home Assistant của tôi làm điều tương tự.
Nhưng với Keepalived, tôi không cần phải lo lắng về điều đó. Tôi có thể giữ máy ảo đó làm máy chủ chính để định tuyến các yêu cầu và có một container Docker với Home Assistant trên thiết bị có Docker Compose stack của tôi, cũng có một thành phần Keepalived để kiểm tra xem máy ảo có đang chạy hay không. Với gói đăng ký Home Assistant Cloud, tôi có các bản sao lưu để dễ dàng duy trì sự đồng bộ giữa hai phiên bản HA, và một vài tính năng mà container Docker không thể chạy được không phải là dịch vụ thiết yếu đối với tôi, vì vậy việc chúng không khả dụng trong thời gian ngắn cho đến khi tôi có thể khởi động lại NAS hoặc khắc phục sự cố kết nối là điều chấp nhận được.
HomeAssistant Jukebox Helpers
3. Đảm Bảo Reverse Proxy Luôn Truy Cập Được
Truy cập là tất cả trong home lab
Reverse proxy là cổng vào các dịch vụ tự host của tôi, khiến nó trở thành một phần thiết yếu trong kiến trúc mạng và là một điểm lỗi duy nhất nếu có bất kỳ điều gì không ổn. Hầu hết các dịch vụ của tôi đều chạy trên máy chủ Ubuntu hoặc Debian, bao gồm cả Proxmox, bởi vì đó là những gì tôi biết và tôi muốn tập trung việc học vào kiến trúc mạng mà tôi ít quen thuộc hơn. Cho dù tôi sử dụng Nginx hay HAProxy làm reverse proxy, cả hai đều dễ dàng liên kết với Keepalived. Tất cả những gì tôi cần là ba địa chỉ IP và nhớ thay đổi priority của hai phiên bản VRRP để một cái cao hơn cái kia.
$ sudo iptables -I INPUT -p 112 -d 224.0.0.18 -j ACCEPT$ sudo iptables -I INPUT -p 51 -d 224.0.0.18 -j ACCEPT
Lần đầu tiên tôi thiết lập cái này, mọi thứ đều có vẻ đúng, nhưng tôi không thể tìm ra lỗi ở đâu. Sau đó, tôi tìm thấy một hướng dẫn khác đề cập đến việc thêm các quy tắc tường lửa cho vrrp và ah (xác thực) để chúng có thể đi qua, điều này khá đơn giản trong Ubuntu.
Một thiết lập Proxmox home lab
4. Đảm Bảo Kết Nối VPN Không Bao Giờ Bị Gián Đoạn Khi Truy Cập Từ Xa
Việc dịch vụ gặp sự cố khi bạn ở nhà đã đủ tệ rồi
Truy cập từ xa vào mạng và home lab của tôi là điều cần thiết cho kiến trúc của tôi. Nhưng chuỗi kết nối được tạo ra cẩn thận đó sẽ trở nên vô dụng nếu máy chủ chạy OpenVPN gặp sự cố. Nếu tôi sử dụng OpenVPN vì bất kỳ lý do gì, tôi sẽ chạy nó trên hai máy chủ, với chúng được liên kết với IP ảo trong Keepalived và IP riêng của chúng. Điều này làm cho máy chủ thứ cấp hoạt động như máy chủ chính khi liên kết gặp sự cố vì bất kỳ lý do gì.
Một người đang kiểm tra một trang web
Điều đó có nghĩa là máy chủ VPN của tôi luôn khả dụng. Và nếu điều tồi tệ nhất xảy ra, hai máy chủ trên mạng gia đình của tôi gặp sự cố, tôi sẽ có những vấn đề lớn hơn việc không thể đăng nhập từ xa. Tôi có thể làm điều gì đó tương tự với Pangolin, nhưng tôi vẫn sẽ gặp vấn đề tương tự với các địa chỉ IP mà Pangolin được ánh xạ tới bị gián đoạn. Ít nhất là trừ khi tôi cũng chạy Keepalived trên tất cả các dịch vụ đó. Tôi nghĩ cuối cùng tôi sẽ có các máy chủ ứng dụng được đồng bộ hóa đằng sau hai phiên bản HAProxy và Keepalived để mọi thứ có cơ hội hoạt động ổn định nhất, nhưng đó là một kế hoạch trong tương lai khi tôi lên kế hoạch cho các giao dịch mua sắm sắp tới.
5. Quản Lý Proxmox Cluster Một Cách Liền Mạch
Failover HA quá chậm, và IP ảo là chìa khóa
Thiết lập một cụm Proxmox HA là một cách tuyệt vời để đảm bảo các container và máy ảo của bạn luôn sẵn sàng cho người dùng. Nhưng điều gì sẽ xảy ra khi bạn cần thực hiện các tác vụ quản trị trên các node Proxmox? Nếu một node bị lỗi, bạn cần biết node nào để có thể sử dụng một trong các node khác. Theo ý kiến của tôi, các tác vụ quản trị nên được thiết lập sao cho ít ma sát nhất có thể.
Thiết lập Keepalived để truy cập cụm bằng một IP ảo duy nhất giúp tiết kiệm thời gian khi tôi cần thay đổi điều gì đó. Nó sẽ luôn đăng nhập vào node đang hoạt động, điều này rất tiện lợi và dễ dàng. Có thể mỗi lần đăng nhập chỉ mất vài giây, nhưng thời gian đó sẽ cộng dồn theo thời gian, và tôi sẽ sử dụng cụm này trong một thời gian dài.
Một cụm Proxmox bao gồm hai node
Ưu tiên Keepalived cho mọi dịch vụ (nếu có thể)
Gần đây tôi cũng đã chuyển tường lửa của mình sang OPNsense, và Keepalived không hoàn toàn hoạt động trong tình huống đó. Điều này chỉ đơn giản là vì OPNsense đã tích hợp sẵn CARP, cho phép bạn nhanh chóng tạo một cụm với tính năng failover mà không cần bất kỳ công cụ bổ sung nào. Nếu không có, tôi sẽ phải tìm cách thiết lập failover, cộng với việc đồng bộ cài đặt giữa hai tường lửa. Lý tưởng nhất, tôi muốn mọi dịch vụ hoặc máy chủ mà tôi chạy đều có tính năng clustering gốc để tôi không cần cài đặt bổ sung, nhưng Keepalived sẽ làm tốt công việc đó cho đến khi có các giải pháp tích hợp.
Bạn đã từng sử dụng Keepalived hay các giải pháp tính sẵn sàng cao nào khác trong mạng gia đình của mình chưa? Hãy chia sẻ kinh nghiệm và những mẹo hữu ích của bạn ở phần bình luận bên dưới!