Skip to content
Snippets Groups Projects
Commit 2c7006b7 authored by Pierre Michiels's avatar Pierre Michiels
Browse files

12.11.20 21:12

parent a2d5ebef
Branches
No related tags found
No related merge requests found
...@@ -123,5 +123,43 @@ Load balancing ...@@ -123,5 +123,43 @@ Load balancing
- Lequel est le plus adapté à notre situation? - Lequel est le plus adapté à notre situation?
J'ai 4 machines de même puissance de calcul sur openstack, il m'est donc inutile d'utiliser un loadbalencer de complexité supérieure que le Round-robin. J'ai 4 machines de même puissance de calcul sur openstack, il m'est donc inutile d'utiliser un loadbalencer de complexité supérieure que le Round-robin.
paquets pour faire du loadbalening: nginx et caddy paquets pour faire du loadbalencing: nginx et caddy
J'utilise nginx:
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/
L'architecture sera la suivante:
j'ai 4 workers (serveurs noeuds) sur openstack. Ceux-ci seront dirigés par un reverse-proxy qui est mon PC Ubuntu 20 Virtuel.
Pour installer le reverse proxy et donc le paquet nginx, j'ai suivi ce tuto:
https://www.digitalocean.com/community/tutorials/comment-installer-nginx-sur-ubuntu-18-04-fr
Pour mettre en place un reverse-proxy avec nginx, il suffit d'aller modifier le fichier nginx.conf et de redémarrer le service après changements.
Le contenu ajouté dans /etc/nginx/nginx.conf (balise http) est le suivant:
http{
...
upstream group1{
server 172.28.100.90:8000;
server 172.28.100.51:8000;
server 172.28.100.111:8000;
server 172.28.100.72:8000;
}
server {
listen 9091;
location / {
proxy_pass http://group1;
}
}
}
"group1" est le groupe qui contient tous les workers avec lequel nginx va rediriger la requète cliente qu'il a reçu.
Sans avoir ajouter de "nginx method", celui-ci va choisir le worker via la méthode du Round-robin.
La section "server" permet d'indiquer entre autre le port d'écoute du serveur nginx; celui-ci va faire du port-forwarding de 80 vers 9091.
Cette section permet aussi d'indiquer vers quel groupe rediriger la requète cliente via la directive proxy_pass.
Un nouveau fichier serveur_go_different_hostname_for_ip.yml est utilisé pour prendre en compte un hostname différent pour chaque worker.
Commande pour exécuter le playbook ansible en prennant en compte des hostname différents pour chaque worker:
#ansible-playbook -i hosts.yml serveur_go_different_hostname_for_ip.yml --extra-vars "@workers_hostname.json" --private-key ssh-private-key.txt
---
- name: Install go_server
hosts: all
become: true
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- name: copy go_server files
copy:
src: "/home/pierre/Bureau/DAC/dac-tp/TP5_06.11.20/ansible/Gofiles"
dest: "/root/"
ignore_errors: yes
# supprimer le container et l'image si ils existent déjà
- name: stop and remove contgo_server
docker_container:
name: contgo_server
state: absent
- name: stop and remove go_serverimg
docker_image:
name: go_serverimg
state: absent
force_absent: yes
- name: build go_serverimg image
docker_image:
build:
path: /root/Gofiles
name: go_serverimg
- name: build contgo_server container for worker1 (172.28.100.90)
docker_container:
name: contgo_server
image: go_serverimg
ports:
- "8000:80"
state: started
env:
HOSTNAME: "{{ worker1Hostname }}"
when:
- ansible_default_ipv4.address == "172.28.100.90"
- name: build contgo_server container for worker2 (172.28.100.51)
docker_container:
name: contgo_server
image: go_serverimg
ports:
- "8000:80"
state: started
env:
HOSTNAME: "{{ worker2Hostname }}"
when:
- ansible_default_ipv4.address == "172.28.100.51"
- name: build contgo_server container for worker3 (172.28.100.111)
docker_container:
name: contgo_server
image: go_serverimg
ports:
- "8000:80"
state: started
env:
HOSTNAME: "{{ worker3Hostname }}"
when:
- ansible_default_ipv4.address == "172.28.100.111"
- name: build contgo_server container for worker4 (172.28.100.72)
docker_container:
name: contgo_server
image: go_serverimg
ports:
- "8000:80"
state: started
env:
HOSTNAME: "{{ worker4Hostname }}"
when:
- ansible_default_ipv4.address == "172.28.100.72"
\ No newline at end of file
{
"worker1Hostname":"Worker 1 hostname",
"worker2Hostname":"Worker 2 hostname",
"worker3Hostname":"Worker 3 hostname",
"worker4Hostname":"Worker 4 hostname"
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment