Giter Site home page Giter Site logo

laputarobot / sdn-cp-loadbalancer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from zipper555/sdn-cp-loadbalancer

0.0 0.0 0.0 26 KB

ElastiCon, an elastic distributed controller architecture is proposed in which the controller pool is dynamically grown or shrunk according to traffic conditions to address the load imbalance situations in the network.

Python 100.00%

sdn-cp-loadbalancer's Introduction

Elasticon:

Ref - ElastiCon: An Elastic Distributed SDN Controller, Advait Dixit, Fang Hao, Sarit Mukherjee, T. V. Lakshman, Ramana Rao Kompella.

Present day networking has revolutionised itself by providing a centralized view of the entire network, making it easier to manage and control. Software Defined Networking is an emerging paradigm for implementing centralized control in modern networking technologies like data centers where the data is handled by a large amount of switches. Handling this large data dynamically is a challenge in modern day networking since performance is a vital criteria for every client. The key limitation of present day network architecture is the static configuration between the switch and controller which results in an uneven distribution of the load in case of sudden dynamic shift in the load . To address this problem, ElastiCon, an elastic distributed controller architecture is proposed in which the controller pool is dynamically grown or shrunk according to traffic conditions to address the load imbalance situations in the network. Depending upon the load, Elasticon automatically balances the load among the controllers thus ensuring normal performance even during peak traffic. We implement a database to determine the load on the controllers and also a switch migration protocol to transfer the switch to another controller for load balancing.

Code:

controller_1.py and controller_2.py: RYU Controller app with Elasticon Protocol. load_balancer.py: Load Balancer App for DB access and migration decision making. multi_ctlr_topo.py: Topology file for Mininet.

Steps to run:

  1. Start mongodb using: sudo mongod
  2. Launch Controller 1 using: ryu-manager --verbose --ofp-listen-host <IP address of controller 1> controller_1.py
  3. Launch Controller 2 using: ryu-manager --verbose --ofp-listen-host <IP address of controller 2> controller_2.py
  4. Update IP addresses of the two remote controllers at net.addController() in mininet topology file.
  5. Launch mininet for remote controllers with the topology file: sudo mn --custom multi_ctlr_topo.py --controller=remote --topo mytopo

Steps to verify:

  1. Open a python shell and connect to the db using

    client = MongoClient('localhost', 27017)
    db = client.elastiCon
    controllers = db.controllers
    flags = db.flags
    gen_id = db.gen_id
    cmf = db.cmf

  2. Monitor the Packet counts at both controllers using controllers.find_one({'id':'1'})
    controllers.find_one({'id':'2'})

  3. Initiate a ping in the mininet

    mininet> h1 ping h2 -i 3

    Here we use -i 3 so that packet counts can be clearly monitored.

  4. Observe that, when the count reaches 150, the switch is migrated and the controller ceases to receive further packetINs. Instead, the other controller's packetIN resets and starts to increment.

  5. Between multiple runs ensure to drop the documents of the db using:

    controllers.drop()
    flags.drop()
    gen_id.drop()
    cmf.drop()

sdn-cp-loadbalancer's People

Contributors

zipper555 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.