All Projects → luizbafilho → Fusis

luizbafilho / Fusis

Licence: mit
Fusis Balancer is a dynamic and distributed TCP/UDP Load Balancer

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Fusis

Lazy Balancer
nginx for balancer web ui
Stars: ✭ 499 (+319.33%)
Mutual labels:  balancer
Peerfinder
Tool to find common points between ASNs on PeeringDB
Stars: ✭ 42 (-64.71%)
Mutual labels:  bgp
Tabi
BGP Hijack Detection
Stars: ✭ 90 (-24.37%)
Mutual labels:  bgp
Ansible Role Nginx
Ansible Role - Nginx
Stars: ✭ 632 (+431.09%)
Mutual labels:  balancer
Bgpmon
CSU's BGP Observatory code (bgpmon/pheme)
Stars: ✭ 25 (-78.99%)
Mutual labels:  bgp
Python Lambdarest
Flask like web framework for AWS Lambda
Stars: ✭ 84 (-29.41%)
Mutual labels:  balancer
Defi Sdk
DeFi SDK Makes Money Lego Work
Stars: ✭ 440 (+269.75%)
Mutual labels:  balancer
Rpm Haproxy
HAproxy RPM spec and builds for CentOS 6/7
Stars: ✭ 103 (-13.45%)
Mutual labels:  balancer
Network Examples
Linux networking examples and tutorials
Stars: ✭ 837 (+603.36%)
Mutual labels:  bgp
Mrtparse
MRT format data parser
Stars: ✭ 87 (-26.89%)
Mutual labels:  bgp
Libnet
A portable framework for low-level network packet construction
Stars: ✭ 640 (+437.82%)
Mutual labels:  bgp
Vrnetlab
Run virtual routers with docker
Stars: ✭ 731 (+514.29%)
Mutual labels:  bgp
China Operator Ip
中国运营商IPv4/IPv6地址库-每日更新
Stars: ✭ 1,255 (+954.62%)
Mutual labels:  bgp
Pyexfil
A Python Package for Data Exfiltration
Stars: ✭ 554 (+365.55%)
Mutual labels:  bgp
Vycontrol
vyos frontend
Stars: ✭ 92 (-22.69%)
Mutual labels:  bgp
Cnp3
Computer Networking : Principles, Protocols and Practice (first and second edition, third edition is being written on https://github.com/cnp3/ebook)
Stars: ✭ 471 (+295.8%)
Mutual labels:  bgp
Firehol
A firewall for humans...
Stars: ✭ 1,215 (+921.01%)
Mutual labels:  balancer
K8gb
A cloud native Kubernetes Global Balancer
Stars: ✭ 113 (-5.04%)
Mutual labels:  balancer
Beluganos
The new network OS designed for white-box switches based on open API.
Stars: ✭ 95 (-20.17%)
Mutual labels:  bgp
Kubernetes Bgp
Kubernetes on Equinix Metal using Calico and MetalLB
Stars: ✭ 87 (-26.89%)
Mutual labels:  bgp

Fusis Balancer Build Status Go Report Card codecov

Fusis Balancer is a software Layer 4 Load Balancer powered by Linux's IPVS. It is a control plane for IPVS and adds distribution, fault tolerance, self-configuration and a nice JSON API to it.

Why?

IPVS is hard. Fusis is an abstraction to make it easier to deal with IPVS and make its way to production without problems.

The goal of this project is to provide a friendly way to use IPVS.

Fault Tolerance

To make sure Fusis does not become a Single Point of Failure in your infrastructure, the Fusis can operate in two modes: Failover or Distributed modes.

Failover

In this mode, there is always one single instance balancing the traffic, and N others working as secondary instances. Once the Primary is down, a secondary instance becomes the primary and starts balancing the load.

Distribute

In this mode, all instances balance the traffic. To distribute the traffic to every instance, we need to make use of ECMP, so, the router can distribute the traffic equally. Fusis integrates out of the box with BGP without any external dependencies. With a basic configuration, you can peer with your BGP infrastructure and have a distributed load balancer.

[bgp]
as = 100
router-id = "192.168.151.182"

  [[bgp.neighbors]]
  address = "192.168.151.178"
  peer-as = 100

State

This project it is under heavy development, it is not usable yet, but you can Star ⭐️ the project and follow the updates.

Dependencies

  • Linux kernel >= 2.6.10 or with IPVS module installed
  • libnl 3.X

Quick Start

WIP

Documentation

View documentation →

Developing

VM setup with Vagrant

  1. Install Vagrant

  2. Build the VM

vagrant up

Watch the message at the end of vagrant provision process. It will provide you with the user, password and where the project code is.

  1. Login
vagrant ssh

Linux setup

  1. Install Go 1.6 or later

  2. Install libnl-3 (Debian based: apt-get install libnl-3-dev libnl-genl-3-dev)

  3. Get this project into $GOPATH:

go get -v github.com/luizbafilho/fusis

Running the project

Now that you have IPVS and fusis installed, run the project:

# Remember, fusis binary is at $GOPATH/bin/fusis, add it to your $PATH
sudo fusis balancer --bootstrap

You should see something like: [GIN-debug] Listening and serving HTTP on :8000

From another host, send a HTTP request to the API querying for available services available:

curl -i {IP OF FUSIS HOST}:8000/services

So you should get:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 07 Apr 2016 21:23:18 GMT
Content-Length: 3

[]

Just for testing purposes, lets add a route to a fake IPv4 by running this on the fusis host:

sudo ipvsadm -A -t 10.0.0.1:80 -s rr

Then, make another request:

curl -i {FUSIS_HOST_IPV4}:8000/services

You will get that same route you just created as a response:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Thu, 07 Apr 2016 22:08:42 GMT
Content-Length: 94

[{"Name":"","Host":"10.0.0.1","Port":80,"Protocol":"tcp","Scheduler":"rr","Destinations":[]}]
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].