/SimpleLoadbalancer

It's my assignment

Primary LanguageGo

Contributors Forks Stargazers Issues MIT License LinkedIn

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

SimpleLoadbalancer

simple loadbalancer write with golang and deployed with docker-compose .

About The Assignment


Diagram Screen Shot

I created a load-balanced (public) REST API with golang, which serves some JSON from an Mysql database. with tow instances and also monitoring, log aggregation and Docker-compose deploymen.

Built With

List of major frameworks/libraries and services used to project.

Golang Application

  • gorm: database connection
  • gin: web framework
  • ginprom: prometheus metrics exporter

Project launch

  • Docker/Dockercompose: virtualization
  • Haproxy: loadbalancer
  • Mysql: database
  • Prometheus: metrics monitoring
  • Loki and Promtail: log monitoring
  • Grafana: monitoring dashboard

(back to top)

Getting Started

To setting up project locally, get a local copy up and running follow these example steps.

Prerequisites

You must have Docker, Docker-compose installed and git on your system.

Installation/diployment

To Installing and setting up app and all stacks follow these steps.

Instalation via Docker Image

 docker build -t slb:0.0 .
 docker run -d --name simpleloadbalancer -e LOG_FILE="/var/log/simpleloadbalancer.log" -e DB_CONNECTION_STRING="root:root@(mysql address)/books?charset=utf8mb4&" -v simpleloadbalancer.logs:/var/log/simpleloadbalancer.log  -p 8080 slb

Build From Source

go mod download
go mod o build -o ./app ./main.go

# Set application's variables befor run it.
export LOG_FILE="/var/log/simpleloadbalancer.log"
export DB_CONNECTION_STRING=r"oot:root@(mysql address)/books?charset=utf8mb4&parseTime=True&loc=Local"

Deployment

  1. Clone the repo
    git clone git@github.com:narcislinux/SimpleLoadbalancer.git
  2. go to production directory, This folder contains all the files you need to launch a project with Docker Compos.
     simpleLoadbalancer-old/production/
     ├── docker-compose.yml
     ├── grafana
     │   └── provisioning
     │       ├── dashboards
     │       │   ├── dashboard.yml
     │       │   ├── Haproxy.json
     │       │   ├── SimpleLoadbalancer Metric.json
     │       │   └── SimpleLoadbalncer Logs.json
     │       └── datasources
     │           └── datasource.yml
     ├── haproxy
     │   └── haproxy.cfg
     ├── prometheus
     │   └── prometheus.yml
     └── promtail
         └── docker-promtail.yml
  3. Run docker compose
     docker-compose build
     docker-compose up -d
  4. Check all contaners are up
     docker-compose ps

Installation Screen Gif

(back to top)

Usage

For More detail about project's endpoints , please refer to the Swagger.

  • ./swagger.yaml

(back to top)

Monitoring

Metric

You can see 3 dashboard on grafana (grafana user "admin", password "admin"):

  • SimpleLoadbalncer Metrics
  • SimpleLoadbalncer Logs
  • HAproxy

And the Haproxy dashboard is available on port 1936 (in local 127.0.0.1:1936, user and password: "admin").


Installation Screen Gif