Jupiter is a high-performance 4-layer network load balance service based on DPDK.
Branch: master
Clone or download
Latest commit 1fd7df0 Jan 24, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cmd Update makefile. Jun 29, 2018
core Fix coredump. Jan 24, 2019
doc Add configure command document. Jan 29, 2018
dpdk Update dpdk-stable/18.02 Jul 11, 2018
lib Update makefile. Jun 29, 2018
.clang-format Add clang format. Apr 25, 2018
.gitignore Update gitignore file. Apr 28, 2018
LICENSE Initialize code. Dec 11, 2017
Makefile Update makefile. Jun 29, 2018
README.md Update readme. May 14, 2018
README.zh_cn.md Update readme. May 14, 2018
jupiter.cfg Update bond mode. May 18, 2018
linux-toa-3.10.0-327.el7.patch Initialize code. Dec 11, 2017
rpm.spec Update rpm spec. May 23, 2018

README.md

Chinese

Jupiter

Introduction

Jupiter is a high-performance 4-layer network load balance service based on DPDK. It supports TCP and UDP packet forwarding in FULLNAT mode. The load balancing algorithms supported by jupiter include consistent hashing, rr, lc.

  • Support TCP, UDP protocol
  • Support session maintenance for application
  • Support load balance service scale out
  • Support million QPS for visitors

How to use

1. Compilation

Required OS release: Centos-7.2 or Centos-7.4

tar -xf jupiter.tar.gz
cd jupiter
make rpm-pkg
rpm -i rpmbuild/RPMS/x86_64/jupiter-0.1-1.x86_64.rpm

2. Startup

The default configuration path for jupiter-service is /etc/jupiter/jupiter.cfg. An example for jupiter.cfg as follows :

EAL configuration reference DPDK document.

[DPDK]
argv = -c 0xf -n 4

[DEVICE0]
name = jupiter0
ipv4 = 1.1.1.2
netmask = 255.255.0.0
gw = 1.1.1.254
rxqsize = 256
txqsize = 512
local-ipv4 = 10.0.2.1/32, 10.0.2.2/32
pci = 00:00.0

Reserve huge pages memory:

mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 4096 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

Load igb_uio module:

modprobe uio
insmod /usr/share/jupiter/kmod/igb_uio.ko
/usr/share/jupiter/tools/dpdk-devbind.py --bind=igb_uio eth1

Load rte_kni module:

insmod /usr/share/jupiter/kmod/rte_kni.ko

Start up jupier-service:

jupiter-service --daemon

Simple Test

1. Test network diagram

Test network diagram

2. ab-client configuration

ifconfig eth0 1.1.1.1/24 up
route add -net 10.0.1.0 netmask 255.255.255.0 gw 1.1.1.2

3. nginx-server configuration

ifconfig eth0 1.1.1.3/24 up
route add -net 10.0.2.0 netmask 255.255.255.0 gw 1.1.1.2

4. jupiter-service configuration

Add a TCP virtual service 10.0.1.1:8888 and two nginx service 1.1.1.3:80, 1.1.1.4:80. More information about command details.

ifconfig jupiter0 1.1.1.2/24 up
jupiter-ctl vs/add 10.0.1.1:8888 tcp rr
jupiter-ctl rs/add 10.0.1.1:8888 tcp 1.1.1.3:80
jupiter-ctl rs/add 10.0.1.1:8888 tcp 1.1.1.4:80

5. ab-client request VIP service

ab http://10.0.1.1:8888/

Scale out

Scale out

Performance

CPU model: Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz

NIC model: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection

Jmeter version: apache-jmeter-3.1

Nginx version: nginx-1.10.2

Bind version: bind-9.9.4

Jupiter-service configuration: 8 lcore and 4G memory

protocol schedule TPS ERROR jupiter rx-pps jupiter rx-bps
TCP ipport 2064789.7 0 4.78M 8.41G
TCP rr 2060283.5 0 4.78M 8.41G
TCP lc 777078.5 0 - -
UDP ipport 4212952 0 8.28M 7.75G
UDP rr 4272837.6 0 8.28M 7.75G
UDP lc 812356.2 0 - -