1. Tổng Quan.
Bài viết này hướng dẫn cách tạo và cấu hình định tuyến cho một cụm Proxmox Cluster sử dụng giao thức OSPFv3 thông qua gói phần mềm Free Range Routing (FRR). Mục tiêu là tạo một subnet riêng biệt để quản lý traffic giữa các máy chủ trong cụm, dựa trên các kết nối point-point giữa các node.
Cách cải thiện network này trong các hệ thống sử dụng Proxmox Cluster giúp cho doanh nghiệp không cần phải mua các thiết bị mạng đắt tiền như switch có tốc độ cao. Đây có thể là trường hợp của các hệ thống nhỏ, ví dụ như có 2 hoặc 3 node trong một cluster, nơi bạn có thể sử dụng các card mạng 10 gigabit với cáp kết nối trực tiếp mà không cần sử dụng switch. Hoặc bạn có thể đang quản lý một cluster gồm 5 node và muốn sử dụng các card mạng gigabit với nhiều cổng trên mỗi node, mà không muốn mua một switch có 20 cổng và thiết lập gom nhóm kết nối. Hoặc có thể bạn muốn thử nghiệm việc sử dụng các máy tính nhỏ như Intel NUCs với kết nối Thunderbolt giữa chúng.
Cách để làm điều này là tạo các kết nối point-point giữa từng node trong hệ thống, không kể bạn muốn sắp xếp chúng theo cách nào. Sau đó, sử dụng giao thức OSPFv3 để trao đổi thông tin về định tuyến qua tất cả các kết nối này. Khi chúng ta đã cấu hình OSPF trên tất cả các interface quan trọng, một bản đồ định tuyến của cụm sẽ được tự động tạo ra và cập nhật nếu có bất kỳ kết nối nào bị ngắt, và con đường ngắn nhất sẽ được chọn dựa trên tốc độ kết nối và ưu tiên của chúng.
2. Tóm tắt quy trình triển khai.
- Cài đặt FRR: Bắt đầu với việc cài đặt gói phần mềm FRR bằng lệnh
apt install frr -y
. - Kích hoạt OSPFv3 Daemon: Cấu hình để kích hoạt tiến trình OSPFv3 trong tệp
/etc/frr/daemons
. - Cấu hình FRR: Chỉnh sửa tệp cấu hình
/etc/frr/frr.conf
trên mỗi máy chủ. Đặt địa chỉ máy chủ cho giao diện vòng lặp và gán nó vào zero-area với trạng thái “passive” để OSPF không hoạt động trên giao diện này. - Thiết lập Giao diện Broadcast: Cấu hình giao diện gigabit (
vmbr0
) như một lựa chọn dự phòng cho trường hợp không có kết nối nhanh tới máy chủ khác. Chọn một cost dự phòng tùy ý (ví dụ: 100). - Thiết lập Kết Nối point-point: Cấu hình các kết nối point-point trên các giao diện với cost khác nhau nếu cần. Sử dụng các cấu hình như
ipv6 ospf6 area
,ipv6 ospf6 network point-to-point
, vàipv6 ospf6 cost
trên mỗi giao diện. - Cấu hình Router ID: Đặt Router ID thành một giá trị duy nhất cho mỗi máy chủ trong tệp cấu hình router.
- Khởi động lại FRR: Sử dụng lệnh
systemctl restart frr
để khởi động lại dịch vụ FRR với cấu hình mới.
3. Chi tiết quy trình triển khai.
3.1. Routed Cluster Subnet.
Trong cụm Proxmox của mình, ví dụ mình đang có sẵn một subnet với subnet mask 192.168.1.0/24 (IPv4) hoặc 2000:db8::/64 (IPv6). Nhưng để xác định traffic trên subnet liên kết dự phòng cluster của cụm, mình sẽ tạo một subnet hoàn toàn mới, ví dụ fd69:beef:cafe::/64 (IPv6). Chỉ có các node trong cụm mới biết subnet thứ hai này và traffic sử dụng subnet này sẽ được là một đường truyền tốc độ cao (high speed backbone).
Trong subnet này, mình sẽ gán một địa chỉ cho mỗi node. Trong ví dụ của mình, mình quyết định sử dụng các địa chỉ 551, 552 và 553 cho các node.
Để cài đặt các liên kết point-point các node, mình chỉ cần kích hoạt các interfaces và sẽ có một địa chỉ link-local address sẽ tự động được gán cho mỗi interfaces.
3.2. Cài đặt và cấu hình.
Chúng ta sẽ sử dụng Free Range Routing (FRR) để thực hiện điều này, nó sẽ triển khai giao thức OSPFv3, vì vậy chúng ta cần phải cài đặt nó.
Sử dụng lệnh sau để cài đặt:
apt install frr -y
Tiếp theo, chúng ta cần kích hoạt OSPFv3 trong /etc/frr/daemons
. Chúng ta có thể bắt đầu nó bây giờ, nhưng chúng ta nên cấu hình nó trước.
Lưu ý:
Phương pháp trong bài viết này yêu cầu sử dụng IPv6. OSPFv3 (Open Shortest Path First version 3) là một giao thức định tuyến thường được sử dụng cho IPv6 và các cấu hình trong bài viết đều liên quan đến IPv6. Nếu bạn đang sử dụng mạng IPv4, bạn có thể cần tìm kiếm cách cấu hình OSPF cho IPv4 hoặc sử dụng một giao thức định tuyến khác phù hợp với IPv4.
Để cấu hình FRR, bạn cần chỉnh sửa /etc/frr/frr.conf
. Mình sẽ hướng dẫn cách làm điều này trên node đầu tiên, nhưng bạn sẽ cần thực hiện cùng việc này trên tất cả các node của bạn ứng với các interfaces cụ thể trên máy đó.
Vì Linux sẽ định tuyến các gói tin bên trong kernel (với điều kiện đã bật tính năng định tuyến), chúng ta có thể gửi các gói tin đến địa chỉ subnet của cụm qua bất kỳ interfaces nào và Linux sẽ chấp nhận chúng. Vì vậy, chúng ta không cần phải gán địa chỉ trực tiếp trên các kết nối point-point, miễn là chúng đi qua đúng interface. Để đảm bảo rằng chúng ta có thể chấp nhận các gói tin cho subnet của cụm khi bất kỳ interface nào bị ngắt, chúng ta sẽ thêm địa chỉ của node vào interfaces. Vì vậy, từ đầu file cấu hình, chúng ta sẽ thêm một địa chỉ vào interfaces. Chúng ta cũng sẽ thêm nó vào zero-area và đặt nó ở trạng thái passive vì không có lý do gì để OSPF hoạt động trên interfaces này.
!
interface lo
ipv6 address fd69:beef:cafe::551/128
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 passive
Tiếp theo, chúng ta có thể thêm interfaces gigabit hiện có như một phương án dự phòng. Nếu không có đường tốc độ cao tới các node khác, chúng ta có thể sử dụng network public
làm lựa chọn dự phòng. Vì vậy, chúng ta sẽ cấu hình interfaces vmbr0 như một mạng broadcast như sau:
#Backup links via primary gigabit link (vmbr0)
#Cost for 1G assumptions (100 gig reference / 1 gig = 100 cost)
!
interface vmbr0
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network broadcast
ipv6 ospf6 cost 100
Khi bạn đặt giá trị cost, bạn có thể chọn bất kỳ số nguyên nào bạn muốn, tiêu chuẩn là chia tỷ lệ băng thông tham chiếu nào đó cho tốc độ kết nối, nhưng con đường định tuyến thực sự sẽ là con đường có cost thấp nhất qua tất cả các interface. Trong ví dụ của mình, mình đặt cost dự phòng là 100 và cost point-point là 10.
Lưu ý rằng việc sử dụng cost để định tuyến trong OSPF giúp xác định đường đi dựa trên cost thấp nhất.
Bây giờ chúng ta sẽ cấu hình tất cả các kết nối point-point của bạn. Các kết nối này có thể có cost khác nhau nếu các interface của bạn có băng thông khác nhau. Sử dụng tên interface ở đây (sử dụng lệnh ip a
để tìm chúng).
Dưới đây là một ví dụ cấu hình cho một kết nối point-point trên interface ens19
:
!
interface ens19
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network point-to-point
ipv6 ospf6 cost 10
!
Cuối cùng, chúng ta cần cấu hình thông tin của router. Đặt ID của router thành một giá trị duy nhất cho mỗi node, nó có thể là bất kỳ giá trị nào bạn muốn.
Dưới đây là một ví dụ cấu hình thông tin router trong tệp /etc/frr/frr.conf
:
#OSPF router settings (unique router ID required for each router)
!
router ospf6
ospf6 router-id 0.5.5.1
redistribute connected
auto-cost reference-bandwidth 100000
Cuối cùng, bạn có thể khởi động lại dịch vụ FRR để nó sẽ khởi động lại với cấu hình mới bằng lệnh:
systemctl restart frr
Trong vài giây sau khi khởi động lại FRR, bản routing table bắt đầu xuất hiện. Hãy thử xem chúng bằng lệnh ip -6 route
. Bạn nên thấy một cái gì đó tương tự như fd69 something via fe80 dev ens19 proto ospf
.
Hãy tham khảo file config đầy đủ dưới đây.
# default to using syslog. /etc/rsyslog.d/45-frr.conf places the log in
# /var/log/frr/frr.log
#
# Note:
# FRR's configuration shell, vtysh, dynamically edits the live, in-memory
# configuration while FRR is running. When instructed, vtysh will persist the
# live configuration to this file, overwriting its contents. If you want to
# avoid this, you can edit this file manually before starting FRR, or instruct
# vtysh to write configuration to a different file.
log syslog informational
#Enable IPv6 forwarding since we are using IPv6
ipv6 forwarding
#Add our router's private address on lo (loopback)
#This address is a single address (/128) out of the subnet (/64)
#of our 'cluster' network, of which routes to individial /128s are
#distributed using OSPF
!
interface lo
ipv6 address fd69:beef:cafe::551/128
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 passive
#Backup links via primary gigabit link (vmbr0)
#Cost for 1G assumptions (100 gig reference / 1 gig = 100 cost)
!
interface vmbr0
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network broadcast
ipv6 ospf6 cost 100
#Two p2p links ens19 and ens20
#Since we are using IPv6 we do not need to assign
#addresses on these links, relying on link-local addresses
#Cost for 10G assumptions (100 gig reference / 10 gig = 10 cost)
#Feel free to edit your cost as appropriate
#You can tweak these cost values to change the traffic flow
!
interface ens19
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network point-to-point
ipv6 ospf6 cost 10
!
interface ens20
ipv6 ospf6 area 0.0.0.0
ipv6 ospf6 network point-to-point
ipv6 ospf6 cost 10
#OSPF router settings (unique router ID required for each router)
!
router ospf6
ospf6 router-id 0.5.5.1
redistribute connected
auto-cost reference-bandwidth 100000
4. Kết Luận.
Bài viết này hướng dẫn cách cài đặt và cấu hình OSPFv3 trên Proxmox Cluster sử dụng FRR để tạo subnet riêng biệt giữa các máy chủ. Qua các bước cụ thể, bạn có thể thiết lập một network hiệu quả cho hệ thống của mình, giúp quản lý và điều hướng traffic network một cách thông minh.
5. Tài liệu tham khảo.
- Trang chủ của Free Range Routing (FRR).
- Proxmox/Ceph – Full Mesh HCI Cluster w/ Dynamic Routing
- Fully Routed Networks in Proxmox! Point-to-Point and Weird Cluster Configs Made Easy.