Table of Contents
simple loadbalancer write with golang and deployed with docker-compose .
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.
List of major frameworks/libraries and services used to project.
- gorm: database connection
- gin: web framework
- ginprom: prometheus metrics exporter
- Docker/Dockercompose: virtualization
- Haproxy: loadbalancer
- Mysql: database
- Prometheus: metrics monitoring
- Loki and Promtail: log monitoring
- Grafana: monitoring dashboard
To setting up project locally, get a local copy up and running follow these example steps.
You must have Docker, Docker-compose installed and git on your system.
To Installing and setting up app and all stacks follow these steps.
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
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"
- Clone the repo
git clone git@github.com:narcislinux/SimpleLoadbalancer.git
- 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
- Run docker compose
docker-compose build docker-compose up -d
- Check all contaners are up
docker-compose ps
For More detail about project's endpoints , please refer to the Swagger.
- ./swagger.yaml
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").