Prototipe Load-Balancer UDP menggunakan BCC (XDP/BPF)
usage: sbulb [-h] -vs VIRTUAL_SERVER
(-rs REAL_SERVER [REAL_SERVER ...] | -cfg CONFIG_FILE) -p PORT
[PORT ...] [-d {0,1,2,3,4}]
[-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,TRACE}] [-mp MAX_PORTS]
[-mrs MAX_REALSERVERS] [-ma MAX_ASSOCIATIONS]
ifnet
positional arguments:
ifnet network interface to load balance (e.g. eth0)
optional arguments:
-h, --help show this help message and exit
-vs VIRTUAL_SERVER, --virtual_server VIRTUAL_SERVER
<Required> Virtual server address (e.g. 10.40.0.1)
-rs REAL_SERVER [REAL_SERVER ...], --real_server REAL_SERVER [REAL_SERVER ...]
<Required> Real server address(es) (e.g. 10.40.0.2 10.40.0.3)
-cfg CONFIG_FILE, --config_file CONFIG_FILE
<Required> a path to a file containing real server address(es).
File will be polled each second for modification and configuration
updated dynamically. A file content example :
[Real Servers]
10.0.0.4
10.0.0.2
10.0.0.6
-p PORT [PORT ...], --port PORT [PORT ...]
<Required> UDP port(s) to load balance
-d {0,1,2,3,4}, --debug {0,1,2,3,4}
Use to set bpf verbosity, 0 is minimal. (default: 0)
-l {CRITICAL,ERROR,WARNING,INFO,DEBUG,TRACE}, --loglevel {CRITICAL,ERROR,WARNING,INFO,DEBUG,TRACE}
Use to set logging verbosity. (default: ERROR)
-mp MAX_PORTS, --max_ports MAX_PORTS
Set the maximum number of port to load balance. (default: 16)
-mrs MAX_REALSERVERS, --max_realservers MAX_REALSERVERS
Set the maximum number of real servers. (default: 32)
-ma MAX_ASSOCIATIONS, --max_associations MAX_ASSOCIATIONS
Set the maximum number of associations. (default: 1048576)
This defined the maximum number of foreign peers supported at the same time.
EG: sudo python3 -m sbulb eth0 -vs 10.188.7.99 -rs 10.188.100.163 10.188.100.230 -p 5683 5684
Penyeimbang beban ini dapat dianggap sebagai Layer-4 NAT Load-Balancer karena hanya memodifikasi alamat IP.
Untuk lalu lintas masuk:
clientip:port/realserverip .Untuk lalu lintas keluar:
clientip:port/realserverip .Kami menjaga asosiasi ini adalah peta LRU besar selama mungkin, yang berarti asosiasi tertua hanya dihapus jika peta LRU penuh dan asosiasi baru harus dibuat.
Algoritma yang digunakan adalah round-robin sederhana.
Dalam sebuah cluster, umumnya praktik yang baik adalah berbagi status antara setiap contoh server, tetapi kadang -kadang beberapa negara tidak dapat dibagikan ...
Misalnya sekelompok server yang tidak dapat berbagi koneksi DTLS, dalam hal ini Anda ingin selalu mengirim paket dari klien tertentu ke server yang sama untuk membatasi jumlah jabat tangan.
Untuk melakukan itu, Anda perlu membuat hubungan yang berumur panjang antara klien dan server, tetapi sebagian besar UDP Loadbalancer adalah yang memiliki asosiasi ephemere. Sebagian besar waktu seumur hidup asosiasi ini dapat dikonfigurasi dan Anda dapat menetapkan nilai besar, tetapi di sini berkat peta LRU kami dapat menjaga asosiasi selama kami bisa.
Poin lainnya adalah komunikasi yang diprakarsai server . Kami ingin dapat memulai komunikasi dari server persis seolah -olah komunikasi diprakarsai oleh klien. Artinya tabel asosiasi yang sama digunakan.
Ini adalah balancer beban sederhana dan karenanya memiliki beberapa keterbatasan:
Anda membutuhkan:
SBULB mendukung mekanisme SD_Notify (3), tetapi tidak memerlukan SystemD atau pustaka SystemD apa pun untuk dijalankan. Ini memungkinkan SBULB untuk memberi tahu SystemD saat siap untuk menerima koneksi. Untuk menggunakan fitur ini, Anda dapat menulis layanan seperti ini:
[Unit]
Description=UDP Load Balancer
Wants=network-online.target
[Service]
Type=notify
NotifyAccess=all
Environment=PYTHONUNBUFFERED=1
ExecStart=/usr/bin/python3 -m slulb args...
[Install]
WantedBy=multi-user.target
Lihat halaman wiki kami tentang itu.
Untuk meluncurkan tes unit:
sudo python3 -m unittest # all tests
sudo python3 -m unittest sbulb.tests.IPv4TestCase # only 1 test case
sudo python3 -m unittest sbulb.tests.IPv4TestCase.test_lru # only 1 test
Tes membutuhkan BCC V0.14 (Python3-BPFCC) dan SCAPY (Python3-Scapy).
Mengapa XDP/BPF? Mengapa komunitas kernel menggantikan ptables dengan BPF?.
Baca tentang XDP/BPF: Selami BPF: Daftar Bahan Bacaan.
Inspirasi:
Dokumentasi:
Tesis: