Tổng quan

Hôm nay chúng ta bàn về việc sử dụng Proxmox, một nền tảng ảo hóa opensource mạnh mẽ và kết hợp nó với Ceph để tạo thành một nền tảng HyperConverged (HCI) mạnh mẽ. Nền tảng HCI này có khả năng cạnh tranh với các giải pháp thông dụng như của Dell, Nutanix, VMware và nó dựa trên opensource miễn phí (nhưng hỗ trợ trả phí có sẵn).

Một đặc điểm của các hệ thống HCI phân tán là cần có các kết nối tốc độ cao và dự phòng (10+ Gbps) giữa các node để sao chép dữ, lưu trữ dữ liệu liệu và migrate máy ảo (VM). Điều này có thể tạo ra rào cản đối với các doanh nghiệp nhỏ, vì họ phải mua các switch tốc độ cao đắt tiền chỉ để vận hành một cụm máy chủ 3 node nhỏ.

Vì Proxmox chạy trên hệ điều hành Linux, nó sử dụng những khả năng vô tận của network kernel trong Linux để giải quyết vấn đề này, bằng cách sử dụng các kết nối trực tiếp giữa các node HCI. Tuy nhiên, mỗi tùy chọn (STP, định tuyến tĩnh và truyền trực tiếp) đều có nhược điểm liên quan đến việc sử dụng con đường tối ưu và tính dự phòng. Vậy phương pháp tốt hơn chúng ta muốn hướng tới là Định tuyến động.

Mô hình Định tuyến động

Giải pháp cốt lõi mà chúng ta cần cung cấp là một kênh giao tiếp giữa các node Proxmox/Ceph có sẵn khả năng chống lại sự cố về vật lý, ngắt cáp, vv…, và nó có khả năng truyền tải với tốc độ cao và không cần sử dụng switch vật lý đắt tiền. Trong các thuật ngữ mạng, chúng ta muốn mỗi node có một Interface/IP Address với kết nối dự phòng và nhanh chóng đến các Interface/IP Address tương ứng trên tất cả các node đồng cấp thông qua các kết nối trực tiếp.

Các thành phần mà chúng ta sẽ sử dụng để xây dựng giải pháp này bao gồm:

  • OSPF (Open Shortest Path First): Chúng ta sẽ sử dụng bộ công cụ Free Range Routing (FRR) để chạy OSPF trên mỗi máy ảo (hypervisor). Điều này sẽ cung cấp cho chúng ta định tuyến động và đảm bảo lựa chọn con đường tối ưu cũng như tính dự phòng với các con đường thay thế.
  • Interface Loopback: Chúng ta muốn đặt địa chỉ IP trên các interface mà không bao giờ bị ngắt kết nối, và giao diện loopback là cách để làm điều này. Chúng ta sẽ sử dụng giao diện loopback cho tất cả lưu lượng giao tiếp giữa các node Proxmox và Ceph và sẽ sử dụng các interface vật lý chỉ để thiết lập kết nối OSPF và chia sẻ tuyến đường.
  • Chỉ sử dụng IPv6 trên Mạng Nội Bộ: Chúng ta chỉ sử dụng IPv6 trên mạng nội bộ của cụm. Network cluster này sẽ dành riêng cho việc giao tiếp giữa các node, trong khi mạng VM và quản lý các node trong cluster vẫn có thể sử dụng IPv4. Tuyệt đối, bạn có thể sử dụng IPv4 cho network cluster và giải pháp vẫn hoạt động, nhưng bạn sẽ bỏ lỡ một số lợi ích của việc sử dụng IPv6.

Điều quan trọng là bạn có tùy chọn để sử dụng IPv6 hoặc IPv4 trên network cluster, nhưng sử dụng IPv6 có thể mang lại một số ưu điểm cụ thể trong giải pháp này.

Sử dụng IPv4: Tôi đã thử nghiệm nó, nó hoạt động, nhưng nó không thú vị bằng việc sử dụng chỉ IPv6.

Ưu điểm và nhược điểm của giải pháp

Có một số lý do tốt để sử dụng chỉ IPv6 trên cụm của chúng ta.

  • Liên kết local (Link-Local) giữa các node hàng xóm OSPF.
    • Không cần thiết phải đặt bất kỳ loại địa chỉ IP nào trên các interface vật lý, chỉ cần kích hoạt chúng trong OSPF và bạn sẽ được cấp 1 địa chỉ IP và có thể kết nối ngay đến hàng xóm OSPF.
  • Mô hình mạng linh hoạt.
    • Vì bạn không cần đặt địa chỉ IP trên các interface vật lý, bạn có thể kết nối cáp giữa các node bất kỳ cách nào bạn muốn.
    • Bạn cũng có thể dễ dàng thêm các interface hoặc các node khác trong tương lai mà không cần phải cấu hình quá nhiều.
  • Không xảy ra xung đột địa chỉ IP:
    • Sử dụng IPv6 mang lại tính linh hoạt lớn về cách bạn xác định địa chỉ của các node. Các địa chỉ IP được đặt trên node không thể sử dụng trên mạng ngoài nên bạn không sợ bị đụng IP ở bên ngoài.

Bên cạnh đó nó cũng có một số nhược điểm.

  • Sự Phức Tạp Bổ Sung:
    • Sử dụng định tuyến động giữa các máy chủ Linux (hypervisor) tạo ra sự phức tạp cho hệ thống. Hãy xem xét điều này khi quyết định xem đây có phải là giải pháp đúng cho bạn hoặc khách hàng của bạn.
  • Phụ thuộc vào routing Daemons:
    • Cụm lưu trữ Ceph sẽ phụ thuộc hoàn toàn vào dịch vụ định tuyến OSPF FRR để giao tiếp với các node Ceph khác. Các routing table OSPF trong bảng định tuyến sẽ bị xóa nếu dịch vụ OSPF gặp sự cố.
    • Giải pháp này được thiết kế để được cài đặt và sau đó và không nên thay đổi (ít nhất là về cấu hình network trong cụm). Nó không nên thường xuyên được thay đổi và sửa đổi. Nguy cơ ở đây chủ yếu là do lỗi phần mềm hơn là do cấu hình sai lầm tình cờ.

Sơ đồ kết nối và yêu cầu

Mô hình của tôi gồm có:

  • Số lượng interface trên mỗi node: 2
  • Tên interface của mỗi node: ens3f0 và ens3f1
  • Tên Cluster: HCI1
  • Node #1:
    • Tên: pmx1
    • Tên miền đầy đủ (FQDN): pmx1.example.com
    • Địa chỉ IP quản lý Proxmox: 10.0.0.101
    • Địa chỉ IPv6 cluster: fc00::1
  • Node #2:
    • Tên: pmx2
    • Tên miền đầy đủ (FQDN): pmx2.example.com
    • Địa chỉ IP quản lý Proxmox: 10.0.0.102
    • Địa chỉ IPv6 cluster: fc00::2
  • Node #3:
    • Tên: pmx3
    • Tên miền đầy đủ (FQDN): pmx3.example.com
    • Địa chỉ IP quản lý Proxmox: 10.0.0.103
    • Địa chỉ IPv6 cụmcluster fc00::3

Lưu ý: Các địa chỉ IPv6 fc00:: là Địa chỉ local bạn sẽ được tự động cấp khi kích hoạt interface và không nhất thiết phải thay thế bằng nó bằng IP khác, trừ khi bạn đang sử dụng hoặc có kế hoạch sử dụng các địa chỉ này ở nơi khác trong môi trường của bạn.

Chuẩn bị môi trường

Kích hoạt các interface

  • Trên mỗi node, đăng nhập vào giao diện GUI của Proxmox và điều hướng đến System > Network.
  • Xác định các interface trong danh sách mà bạn đang sử dụng cho kết nối cluster. Trong trường hợp này, chúng là ens3f0 và ens3f1.
  • Chỉnh sửa các interface và đảm bảo rằng “Autostart” được chọn.
  • Nhấn Apply Configuration để thực hiện thay đổi.

Cài đặt LLDP (đề xuất, không bắt buộc)

Đăng nhập vào SSH với quyền root, sau đó cài đặt dịch vụ LLDP bằng lệnh.

apt install lldpd -y

Khi hoàn tất, chạy lệnh lldpctl để xem các node hàng xóm qua các interface kết nối cluster của bạn. Điều này đảm bảo rằng các interface của bạn đang hoạt động và được kết nối theo cách bạn muốn.

root@pmx1:~# lldpctl 
-------------------------------------------------------------------------------
LLDP neighbors:
-------------------------------------------------------------------------------
Interface:    ens3f0, via: LLDP, RID: 8, Time: 0 day, 01:06:22
  Chassis:     
    ChassisID:    mac xx:xx:xx:xx:xx:xx
    SysName:      pmx3.example.com
    SysDescr:     Debian GNU/Linux 11 (bullseye) Linux 5.13.19-6-pve #1 SMP PVE 5.13.19-15 (Tue, 29 Mar 2022 15:59:50 +0200) x86_64
    MgmtIP:       10.0.0.103
    MgmtIface:    9
    Capability:   Bridge, on
    Capability:   Router, on
    Capability:   Wlan, off
    Capability:   Station, off
  Port:        
    PortID:       mac xx:xx:xx:xx:xx:xx
    PortDescr:    ens3f1
    TTL:          120
    PMD autoneg:  supported: yes, enabled: yes
      Adv:          100Base-TX, HD: no, FD: yes
      Adv:          1000Base-T, HD: no, FD: yes
      MAU oper type: 10GigBaseCX4 - X copper over 8 pair 100-Ohm balanced cable
-------------------------------------------------------------------------------
Interface:    ens3f1, via: LLDP, RID: 9, Time: 0 day, 01:06:19
  Chassis:     
    ChassisID:    mac xx:xx:xx:xx:xx:xx
    SysName:      pmx2.example.com
    SysDescr:     Debian GNU/Linux 11 (bullseye) Linux 5.13.19-6-pve #1 SMP PVE 5.13.19-15 (Tue, 29 Mar 2022 15:59:50 +0200) x86_64
    MgmtIP:       10.0.0.102
    MgmtIface:    10
    Capability:   Bridge, on
    Capability:   Router, on
    Capability:   Wlan, off
    Capability:   Station, off
  Port:        
    PortID:       mac xx:xx:xx:xx:xx:xx
    PortDescr:    ens3f0
    TTL:          120
    PMD autoneg:  supported: yes, enabled: yes
      Adv:          100Base-TX, HD: no, FD: yes
      Adv:          1000Base-T, HD: no, FD: yes
      MAU oper type: 10GigBaseCX4 - X copper over 8 pair 100-Ohm balanced cable

Điều này sẽ đảm bảo rằng các interface của bạn đang hoạt động và được kết nối đúng cách.

Tạo interface Loopback

Trên mỗi node, sử dụng terminal SSH, chỉnh sửa file interfaces: vi /etc/network/interfaces.

Thêm thông tin interface dưới đây. Số ::1 nên đại diện cho số node của bạn (sửa thành ::2 cho node 2, ::3 cho node 3, vv.).

Đây sẽ là địa chỉ IP kết nối cluster của node này cho dịch vụ Ceph và cụm Proxmox.

...
auto lo
iface lo inet loopback

auto lo:0
iface lo:0 inet static
        address fc00::1/128
...

Lưu lại và đóng file, sau đó khởi động lại network để áp dụng các thay đổi.

systemctl restart networking.service

Sử dụng IPv4: Để sử dụng IPv4 trên network cluster, bạn cần chỉ định địa chỉ IPv4 /32 cho các interface loopback thay vì địa chỉ fc00::x/128.

Kích hoạt chuyển tiếp IPv6

Khi có một kết nối trong cluster bị hỏng, một số node sẽ cần giao tiếp với nhau thông qua việc định tuyến qua một node hàng xóm. Để cho phép điều này xảy ra, chúng ta cần kích hoạt chuyển tiếp IPv6 trong kernel Linux.

Trên mỗi node, chỉnh sửa file sysctl: vi /etc/sysctl.conf.

Bỏ dấu “#” trước dòng:

net.ipv6.conf.all.forwarding=1

Lưu lại và đóng file. Áp dụng cấu hình.

sysctl -p

Kết quả đúng sẽ là: net.ipv6.conf.all.forwarding = 1.

Sử dụng IPv4: Ở đây, bạn sẽ sử dụng thiết lập net.ipv4.ip_forward thay vì net.ipv6.conf.all.forwarding cho network cluster IPv4.

Leave a Reply

This site uses cookies to offer you a better browsing experience. By browsing this website, you agree to our use of cookies.