Différences entre les versions de « Lvs »

De BlaxWiki
Aller à la navigationAller à la recherche
 
(26 versions intermédiaires par 4 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
'''[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Lvs-ha-installation-agarik-fr.docx Documentation de mise en place de LVS] (Doc fournie par un client à Agarik)'''
'''[https://{{SERVERNAME}}/BENPERSO/doc-manuel/system/software/Lvs-ha-installation-agarik-fr.docx Documentation de mise en place de LVS] (Doc fournie par un client à Agarik)'''
Cette documentation est totalement indépendante de l'exemple ci dessous, elle explique en détail la mise en place de lvs et d'un loadbalancing mysql
Cette documentation est totalement indépendante de l'exemple ci dessous, elle explique en détail la mise en place de lvs et d'un loadbalancing mysql
Pour la supervision du lvs, voir ce [https://{{SERVERNAME}}/index.php/Lvs_verification script]




== Présentation cas N°1 HA ==
== Présentation cas N°1 HA ==
Nous allons étudier ici un cas pratique et concret avec un systeme en HA.
Nous allons étudier ici un cas pratique et concret avec un systeme en HA.
'''Attention, sur des vm qui sont loadbalancées derriere un lvs ou un proxy, si la vm est sur le même hyperviseur que le lvs ou le proxy il faut modifier le checksum de la vm pour passer le rx à off (ethtool -K ethX rx off"), cela fait aussi passer le tx à off. Si l option ne passe pas pour le rx (ce qui est le cas avec les driver virtio, mettre tx off)
Le problème vient du fait que le lb et la vm soient sur le même hyperviseur donc le calcul du checksum TCP ne se fait pas et est donc en erreur (ce qui n'est pas le cas avec une vm loadbalancé qui est sur un autre hyperviseur que le lb car il passe par la carte physique de l'hypervieur). Le problème est lié au driver virtio.
Cela est à faire uniquement sur la vm lvs et proxy'''


Résumé de la plateforme :
Résumé de la plateforme :
''' Le lvs et le firewall doivent avoir un réseau de back / admin différent de celui des vm qui sont derrieres, sinon il y a un problème de route'''
* Firewall
* Firewall
<pre>
<pre>
Ligne 59 : Ligne 64 :


===== ifcfg-eth =====
===== ifcfg-eth =====
Ici ce qui est très important c'est le ETHTOOL_OPTS="-K eth0 rx off" pour désactiver le checksum
Ici ce qui est très important c'est le ETHTOOL_OPTS="-K eth0 tx off" pour désactiver le checksum
<pre>
<pre>
DEVICE="eth0"
DEVICE="eth0"
Ligne 68 : Ligne 73 :
NETMASK="255.255.255.192"
NETMASK="255.255.255.192"
NM_CONTROLLED="no"
NM_CONTROLLED="no"
ETHTOOL_OPTS="-K eth0 rx off"
ETHTOOL_OPTS="-K eth0 tx off"




Ligne 78 : Ligne 83 :
NETMASK="255.255.255.192"
NETMASK="255.255.255.192"
NM_CONTROLLED="no"
NM_CONTROLLED="no"
ETHTOOL_OPTS="-K eth1 rx off"
ETHTOOL_OPTS="-K eth1 tx off"
</pre>
</pre>


==== Proxy ====
==== Proxy ====
===== /etc/network/interfaces =====
===== /etc/network/interfaces =====
Ce qui est important ici, c'est le "pre-up ethtool -K eth0 rx off"
Ce qui est important ici, c'est le "pre-up ethtool -K eth0 tx off"
<pre>
<pre>
auto lo
auto lo
Ligne 97 : Ligne 102 :
         post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.82.10.190
         post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.82.10.190
         post-up route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.82.10.190
         post-up route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.82.10.190
         pre-up ethtool -K eth0 rx off
         pre-up ethtool -K eth0 tx off


auto eth1
auto eth1
Ligne 104 : Ligne 109 :
         netmask 255.255.255.192
         netmask 255.255.255.192
         gateway 10.82.12.126
         gateway 10.82.12.126
         pre-up ethtool -K eth1 rx off
         pre-up ethtool -K eth1 tx off




Ligne 123 : Ligne 128 :


=== Configuration Logiciel ===
=== Configuration Logiciel ===
===== LVS =====
==== LVS ====
====== keepalived.conf lvs1.so ======
 
Le router id de chaque vrrp instance doit être le même entre les 2 lvs pour qu'ils puissent dialoguer entre eux et voir qui est le master & slave.
 
Penser à modifier le fichier sysconfig/keepalived pour bien faire pointer les options sur le bon fichier de conf (KEEPALIVED_OPTIONS=-D -f  /opt/applis/keepalived/etc/keepalived/keepalived.conf --log-facility 7)
 
 
===== keepalived.conf lvs1.so =====
C'est le master
C'est le master
<pre>
<pre>
Ligne 140 : Ligne 151 :
         VI_virgin
         VI_virgin
         VI_enabler
         VI_enabler
        VI_GW
   }
   }
}
}


# ici on définit la vip "gw" qui sert comme gateway par défaut aux serveurs proxy, il n y a pas de service associé à cette vip
# ici on définit la vip "gw" qui sert comme gateway par défaut aux serveurs proxy, il n y a pas de service associé à cette vip
#  si l'on veut que l'ip vrrp remonte dans un ifconfig et dans ip addr show, il faut rajouter une ligne label ethX:$nom (ex label eth0:vrrp1) dans la partie virtual_ipaddress
vrrp_instance VI_GW {
vrrp_instance VI_GW {
     state MASTER
     state MASTER
Ligne 156 : Ligne 169 :
     }
     }
     virtual_ipaddress {
     virtual_ipaddress {
         10.82.12.126/26
         10.82.12.126/26 label eth1:vip
     }
     }
}
}
Ligne 265 : Ligne 278 :
</pre>
</pre>


====== keepalived.conf lvs1.lc ======
===== keepalived.conf lvs1.lc =====
C'est le slave
 
<pre>
<pre>
! Configuration File for keepalived
! Configuration File for keepalived
Ligne 277 : Ligne 292 :
         VI_virgin
         VI_virgin
         VI_enabler
         VI_enabler
        VI_GW
   }
   }
}
}
Ligne 292 : Ligne 308 :
     }
     }
     virtual_ipaddress {
     virtual_ipaddress {
        10.82.12.126/26
        10.82.12.126/26 label eth1:vip
     }
     }
}
}
Ligne 402 : Ligne 418 :
</pre>
</pre>


====== Ipvsadm ======
===== Ipvsadm =====
Lorsque la configuration keepalived au niveau virtual server et real server et mise en place, au moment du start de keepalived, la configuration est transmise à LVS via le soft ipvsadm
Lorsque la configuration keepalived au niveau virtual server et real server et mise en place, au moment du start de keepalived, la configuration est transmise à LVS via le soft ipvsadm
et c'est lui qui va gérer le loadbalancing.
et c'est lui qui va gérer le loadbalancing.
Ligne 422 : Ligne 438 :
</pre>
</pre>


===== Proxy =====
==== Proxy ====
======  Configuration des sites web ======
=====  Configuration des sites web =====
* www.virginmobile.fr
* www.virginmobile.fr
<pre>
<pre>
Ligne 573 : Ligne 589 :
</pre>
</pre>


==== Serveurs Web ====
<pre>
Pas de configuration particulière, ils recoivent les requetes web.
Ils ont comme gateway par défaut le firewall
</pre>


== Présentation cas N°2 sans HA ==
== Présentation cas N°2 sans HA ==
Nous allons étudier ici un cas pratique et concret avec un systeme similaire à celui du dessus (lvs, proxy, serveur web) mis à part qu'il n y a qu'un seul serveur pour le lvs et le  
Nous allons étudier ici un cas pratique et concret avec un systeme similaire à celui du dessus (lvs, proxy, serveur web) mis à part qu'il n y a qu'un seul serveur pour le lvs et le  
proxy, seul les serveurs web sont encore 2.
proxy, seul les serveurs web sont encore 2.
Nous n'allons plus utiliser keepalived (car si on fait une vip avec keepalived et qu'il n y a pas de 2eme serveur, il fait des segfaults).
Nous allons utiliser keepalived mais sans configurer la partie vrrp, mais juste la vip et les real serveurs
La configuration du load balancing ca donc se faire via lvs (ipvsadm uniquement)
 
A part le fait qu'il n y ait qu'un lvs et un seul proxy tout le reste est pareil (remettre le sysctl.conf, le tx checksum à off ...)
 
Résumé de la plateforme :
* Firewall
<pre>
Ils portent :
- les gateway par défaut des LVS et des serveurs web, et les routes RFC1918 des proxy
- les ip publiques des sites web, ces ip étant redirigés vers les vip privées que portent les LVS
</pre>
 
* LVS
<pre>
- ipvsadm & keepalived tournent
- ont la gateway des proxy
- ont les ip privées 10.82.13.30 (correspond au domaine www.virginmobile.fr) et 10.82.13.31 (correpond au domaine enabler.virginmobile.fr)
- font la redirection des vips 10.82.13.30 & 10.82.13.31 vers les real ip des serveurs proxy (10.82.13.129, 10.82.13.130) via ipvsadm
- ont pour gateway par defaut le firewall
</pre>
 
* Proxy
<pre>
Apache installé avec proxy_module, proxy_balancer_module, proxy_http_module. Ils recoivent les requetes http et https loadbalancés depuis les LVS, et font proxy balancer et proxy pass
vers les serveurs web. Ils ont pour gateway par défaut les LVS, et pour gateway rfc1918 le firewall
 
- vhost : www.virginmobile.fr en http et https (10.82.13.129 & 10.82.13.130)
- proxy balancer vers
www1.ppr.omeatelecom.fr:80 (web1.ppr)
www2.ppr.omeatelecom.fr:80 (web2.ppr)
- vhost : enabler.virginmobile.fr en http (10.82.13.130)
- proxy balancer vers
enabler1.ppr.omeatelecom.fr:8080 (web1.ppr)
enabler2.ppr.omeatelecom.fr:8080 (web2.ppr)
</pre>
 
[[Image:Lvs_proxy2.jpg|frame|center|]]
 
== Présentation cas N°3 HA ==
Dans ce cas nous n'avons pas de firewall, mais juste 2 lb et deux serveurs front derriere. Le client veut que les 2 front soient accessibles en direct via des ip publiques mais il veut aussi un load
balancing sur une autre ip publiques. Plutot que d'avoir 2 subnet publiques avec du multihoming pour les routes, ou de faire du nat 1:1 pour joindre les frontaux via leur ip publiques, on va tout gérer
via keepalived pour la partie vip et utiliser haproxy pour la partie load balancé (haproxy à la demande du client car cela aurait pu être fait avec keepalived)
 
A CORRIGER POUR ADAPTER A LA PLATEFORME


Résumé de la plateforme :
Résumé de la plateforme :
''' Le lvs et le firewall doivent avoir un réseau de back / admin différent de celui des vm qui sont derrieres, sinon il y a un problème de route'''
* Firewall
* Firewall
<pre>
<pre>
Ligne 590 : Ligne 654 :
* LVS
* LVS
<pre>
<pre>
  - ipvsadm tourne
  - keepalived et ipvsadm tournent
  - ont la gateway des proxy via une vip "gw" keepalived
  - ont la gateway des proxy via une vip "gw" keepalived
  - ont les vip web privées 10.82.10.100 (correspond au domaine www.virginmobile.fr) et 10.82.10.101 (correpond au domaine enabler.virginmobile.fr) via une vip "web" keepalived
  - ont les vip web privées 10.82.10.100 (correspond au domaine www.virginmobile.fr) et 10.82.10.101 (correpond au domaine enabler.virginmobile.fr) via une vip "web" keepalived
Ligne 617 : Ligne 681 :
Ils ont comme gateway par défaut le firewall
Ils ont comme gateway par défaut le firewall
</pre>
</pre>
[[Image:Lvs_proxy.png|frame|center|]]


[[Catégorie:Software]]
[[Catégorie:Software]]

Version actuelle datée du 7 avril 2015 à 14:11

Documentation de mise en place de LVS (Doc fournie par un client à Agarik) Cette documentation est totalement indépendante de l'exemple ci dessous, elle explique en détail la mise en place de lvs et d'un loadbalancing mysql

Pour la supervision du lvs, voir ce script


Présentation cas N°1 HA[modifier]

Nous allons étudier ici un cas pratique et concret avec un systeme en HA. Attention, sur des vm qui sont loadbalancées derriere un lvs ou un proxy, si la vm est sur le même hyperviseur que le lvs ou le proxy il faut modifier le checksum de la vm pour passer le rx à off (ethtool -K ethX rx off"), cela fait aussi passer le tx à off. Si l option ne passe pas pour le rx (ce qui est le cas avec les driver virtio, mettre tx off) Le problème vient du fait que le lb et la vm soient sur le même hyperviseur donc le calcul du checksum TCP ne se fait pas et est donc en erreur (ce qui n'est pas le cas avec une vm loadbalancé qui est sur un autre hyperviseur que le lb car il passe par la carte physique de l'hypervieur). Le problème est lié au driver virtio. Cela est à faire uniquement sur la vm lvs et proxy


Résumé de la plateforme : Le lvs et le firewall doivent avoir un réseau de back / admin différent de celui des vm qui sont derrieres, sinon il y a un problème de route

  • Firewall
Ils portent :
 - les gateway par défaut des LVS et des serveurs web, et les routes RFC1918 des proxy
 - les ip publiques des sites web, ces ip étant redirigés vers les vip privées que portent les LVS
  • LVS
 - keepalived et ipvsadm tournent
 - ont la gateway des proxy via une vip "gw" keepalived
 - ont les vip web privées 10.82.10.100 (correspond au domaine www.virginmobile.fr) et 10.82.10.101 (correpond au domaine enabler.virginmobile.fr) via une vip "web" keepalived
 - font la redirection des vips 10.82.10.100 & 10.82.10.101 vers les real ip des serveurs proxy (10.82.12.65,66,67,68)
 - ont pour gateway par defaut le firewall
  • Proxy
Apache installé avec proxy_module, proxy_balancer_module, proxy_http_module. Ils recoivent les requetes http et https loadbalancés depuis les LVS, et font proxy balancer et proxy pass 
vers les serveurs web. Ils ont pour gateway par défaut la vip "gw" keepalived des LVS, et pour gateway rfc1918 le firewall

- vhost : www.virginmobile.fr en http et https  (10.82.12.65 & 10.82.12.67)
		- proxy balancer vers 
			www1.so.omeatelecom.fr:80 (web1.so)
			www1.lc.omeatelecom.fr:80 (web1.lc)
- vhost : enabler.virginmobile.fr en http (10.82.12.66 & 10.82.12.68)
		- proxy balancer vers 
			enabler1.so.omeatelecom.fr:8080 (web1.so)
			enabler1.lc.omeatelecom.fr:8080 (web1.lc)
  • Serveurs Web
Pas de configuration particulière, ils recoivent les requetes web.
Ils ont comme gateway par défaut le firewall
Lvs proxy.png

Configuration Système[modifier]

Lvs[modifier]

/etc/sysctl.conf[modifier]

Cela est nécessaire pour lvs (à faire bien sur sur les 2 serveurs lvs)

net/ipv4/ip_forward=1
net/ipv4/conf/all/send_redirects=0
net/ipv4/conf/default/send_redirects=0
net/ipv4/conf/eth0/send_redirects=0
ifcfg-eth[modifier]

Ici ce qui est très important c'est le ETHTOOL_OPTS="-K eth0 tx off" pour désactiver le checksum

DEVICE="eth0"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="10.82.10.65" # 10.82.10.66 pour lvs1.lc
NETMASK="255.255.255.192"
NM_CONTROLLED="no"
ETHTOOL_OPTS="-K eth0 tx off"


DEVICE="eth1"
BOOTPROTO="static"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="10.82.12.124" # 10.82.12.125 pour lvs1.lc
NETMASK="255.255.255.192"
NM_CONTROLLED="no"
ETHTOOL_OPTS="-K eth1 tx off"

Proxy[modifier]

/etc/network/interfaces[modifier]

Ce qui est important ici, c'est le "pre-up ethtool -K eth0 tx off"

auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
auto eth0
iface eth0 inet static
        address 10.82.10.129 # 10.82.10.130 sur proxy1.lc
        netmask 255.255.255.192
        post-up route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.82.10.190
        post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.82.10.190
        post-up route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.82.10.190
        pre-up ethtool -K eth0 tx off

auto eth1
iface eth1 inet static
        address 10.82.12.65 # 10.82.12.67 sur proxy1.lc
        netmask 255.255.255.192
        gateway 10.82.12.126
        pre-up ethtool -K eth1 tx off


auto eth1:1
iface eth1:1 inet static
        address 10.82.12.66 # 10.82.12.68 sur proxy1.lc
        netmask 255.255.255.192
/etc/hosts[modifier]

A rajouter dans les 2 serveurs proxy, cela va servir dans la conf apache

10.82.11.2      enabler1.so.omeatelecom.fr
10.82.11.1      enabler1.so.omeatelecom.fr
10.82.10.193    www1.so.omeatelecom.fr
10.82.10.194    www1.lc.omeatelecom.fr

Configuration Logiciel[modifier]

LVS[modifier]

Le router id de chaque vrrp instance doit être le même entre les 2 lvs pour qu'ils puissent dialoguer entre eux et voir qui est le master & slave.

Penser à modifier le fichier sysconfig/keepalived pour bien faire pointer les options sur le bon fichier de conf (KEEPALIVED_OPTIONS=-D -f /opt/applis/keepalived/etc/keepalived/keepalived.conf --log-facility 7)


keepalived.conf lvs1.so[modifier]

C'est le master

! Configuration File for keepalived

global_defs {
# parametre obligatoire pour faire fonctionner lvs
   router_id LVS_OMEA
}

# ici on définit un group pour regrouper nos 2 vrrp instance pour le web. Un Sync group va permettre de definir un ensemble d'adresse qui basculeront en meme temps. Ainsi, en cas de 
# perte d'une liaison, toute les vrrps peuvent basculer en meme temps. Le groupe contiendra les noms des vrrp_instance prealablement defini
vrrp_sync_group OMEA {
   group {
        VI_virgin
        VI_enabler
        VI_GW
   }
}

# ici on définit la vip "gw" qui sert comme gateway par défaut aux serveurs proxy, il n y a pas de service associé à cette vip
#  si l'on veut que l'ip vrrp remonte dans un ifconfig et dans ip addr show, il faut rajouter une ligne label ethX:$nom (ex label eth0:vrrp1) dans la partie virtual_ipaddress
vrrp_instance VI_GW {
    state MASTER
    interface eth1
    virtual_router_id 65
    priority 100
    advert_int 1
   lvs_sync_daemon_interface eth1
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
         10.82.12.126/26 label eth1:vip
    }
}

# ici on définit la première vip "web"
vrrp_instance VI_virgin {
    state MASTER
    interface eth0
    virtual_router_id 66
    priority 100
    advert_int 1
   lvs_sync_daemon_interface eth0
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
        10.82.10.100/26
    }
}

# ici on définit la deuxième vip "web"
vrrp_instance VI_enabler {
    state MASTER
    interface eth0
    virtual_router_id 67
    priority 100
    advert_int 1
   lvs_sync_daemon_interface eth0
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
        10.82.10.101/26
    }
}


# Configuration du virtual serveur et des real associés
virtual_server 10.82.10.100 80 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.65 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
        real_server 10.82.12.67 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }

}

virtual_server 10.82.10.100 443 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.65 443 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 443
                }
        }
        real_server 10.82.12.67 443 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 443
                }
        }

}

virtual_server 10.82.10.101 80 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.66 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
        real_server 10.82.12.68 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
}
keepalived.conf lvs1.lc[modifier]

C'est le slave

! Configuration File for keepalived

global_defs {
   router_id LVS_OMEA
}

vrrp_sync_group OMEA {
   group {
        VI_virgin
        VI_enabler
        VI_GW
   }
}

vrrp_instance VI_GW {
    state BACKUP
    interface eth1
    virtual_router_id 65
    priority 50
    advert_int 1
   lvs_sync_daemon_interface eth1
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
        10.82.12.126/26 label eth1:vip
    }
}


vrrp_instance VI_virgin {
    state BACKUP
    interface eth0
    virtual_router_id 66
    priority 50
    advert_int 1
   lvs_sync_daemon_interface eth0
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
        10.82.10.100/26
    }
}


vrrp_instance VI_enabler {
    state BACKUP
    interface eth0
    virtual_router_id 67
    priority 50
    advert_int 1
   lvs_sync_daemon_interface eth0
    authentication {
        auth_type PASS
        auth_pass k9LaC23
    }
    virtual_ipaddress {
        10.82.10.101/26
    }
}


virtual_server 10.82.10.100 80 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.65 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
        real_server 10.82.12.67 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }

}

virtual_server 10.82.10.100 443 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.65 443 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 443
                }
        }

        real_server 10.82.12.67 443 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 443
                }
        }

}


virtual_server 10.82.10.101 80 {
        delay_loop 5
        lb_algo wrr
        lb_kind NAT
        persistence_timeout 600
        protocol TCP
        real_server 10.82.12.66 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
        real_server 10.82.12.68 80 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 80
                }
        }
}
Ipvsadm[modifier]

Lorsque la configuration keepalived au niveau virtual server et real server et mise en place, au moment du start de keepalived, la configuration est transmise à LVS via le soft ipvsadm et c'est lui qui va gérer le loadbalancing. Pour voir la config de ipvsadm :

# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.82.10.100:http wrr persistent 600
  -> 10.82.12.65:http             Masq    1      0          0
  -> 10.82.12.67:http             Masq    1      0          0
TCP  10.82.10.100:https wrr persistent 600
  -> 10.82.12.65:https            Masq    1      0          0
  -> 10.82.12.67:https            Masq    1      0          0
TCP  10.82.10.101:http wrr persistent 600
  -> 10.82.12.66:http             Masq    1      0          0
  -> 10.82.12.68:http             Masq    1      0          0

Proxy[modifier]

Configuration des sites web[modifier]
  • www.virginmobile.fr
NameVirtualHost 10.82.12.65:80
NameVirtualHost 10.82.12.66:80


<VirtualHost 10.82.12.65:80>
        ServerAdmin webmaster@localhost
        ServerName www.virginmobile.fr
        DocumentRoot /var/www

        <IfModule mod_proxy_balancer.c>
                <Proxy balancer://www.virginmobile.fr>
                        BalancerMember http://www1.so.omeatelecom.fr:80
                        BalancerMember http://www1.lc.omeatelecom.fr:80
                </Proxy>
                ProxyPass /test balancer://www.virginmobile.fr
        </IfModule>

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        #ErrorLog ${APACHE_LOG_DIR}/error.log
        ErrorLog '|logger -p local2.warn -t httpd'
        LogLevel warn

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • www.virginmobile.fr-ssl
<VirtualHost 10.82.10.160:443>
        ServerAdmin webmaster@localhost
        ServerName www.virginmobile.fr
        DocumentRoot /var/www

#       <IfModule mod_ssl.c>
#               SSLEngine On
#               SSLCertificateFile "/etc/ssl/certs/.crt"
#               SSLCertificateKeyFile "/etc/ssl/private/.key"
#       </IfModule>

        <IfModule mod_proxy_balancer.c>
                <Proxy balancer://www.virginmobile.fr>
                        BalancerMember http://www1.so.omeatelecom.fr:80
                        BalancerMember http://www1.lc.omeatelecom.fr:80
                </Proxy>
                ProxyPass /test balancer://www.virginmobile.fr
        </IfModule>

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        #ErrorLog ${APACHE_LOG_DIR}/error.log
        ErrorLog '|logger -p local2.warn -t httpd'
        LogLevel warn

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

  • enabler.virginmobile.fr
<VirtualHost 10.82.12.66:80>
        ServerAdmin webmaster@localhost
        ServerName enabler.virginmobile.fr
        DocumentRoot /var/www

        <IfModule mod_proxy_balancer.c>
                <Proxy balancer://enabler.virginmobile.fr>
                        BalancerMember http://enabler1.so.omeatelecom.fr:8080
                        BalancerMember http://enabler1.lc.omeatelecom.fr:8080
                </Proxy>
                ProxyPass /test balancer://enabler.virginmobile.fr
        </IfModule>

        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
   Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        #ErrorLog ${APACHE_LOG_DIR}/error.log
        ErrorLog '|logger -p local2.warn -t httpd'
        LogLevel warn

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Serveurs Web[modifier]

Pas de configuration particulière, ils recoivent les requetes web.
Ils ont comme gateway par défaut le firewall

Présentation cas N°2 sans HA[modifier]

Nous allons étudier ici un cas pratique et concret avec un systeme similaire à celui du dessus (lvs, proxy, serveur web) mis à part qu'il n y a qu'un seul serveur pour le lvs et le proxy, seul les serveurs web sont encore 2. Nous allons utiliser keepalived mais sans configurer la partie vrrp, mais juste la vip et les real serveurs

A part le fait qu'il n y ait qu'un lvs et un seul proxy tout le reste est pareil (remettre le sysctl.conf, le tx checksum à off ...)

Résumé de la plateforme :

  • Firewall
Ils portent :
 - les gateway par défaut des LVS et des serveurs web, et les routes RFC1918 des proxy
 - les ip publiques des sites web, ces ip étant redirigés vers les vip privées que portent les LVS
  • LVS
 - ipvsadm & keepalived tournent
 - ont la gateway des proxy
 - ont les ip privées 10.82.13.30 (correspond au domaine www.virginmobile.fr) et 10.82.13.31 (correpond au domaine enabler.virginmobile.fr)
 - font la redirection des vips 10.82.13.30 & 10.82.13.31 vers les real ip des serveurs proxy (10.82.13.129, 10.82.13.130) via ipvsadm
 - ont pour gateway par defaut le firewall
  • Proxy
Apache installé avec proxy_module, proxy_balancer_module, proxy_http_module. Ils recoivent les requetes http et https loadbalancés depuis les LVS, et font proxy balancer et proxy pass 
vers les serveurs web. Ils ont pour gateway par défaut les LVS, et pour gateway rfc1918 le firewall

- vhost : www.virginmobile.fr en http et https (10.82.13.129 & 10.82.13.130)
		- proxy balancer vers 
			www1.ppr.omeatelecom.fr:80 (web1.ppr)
			www2.ppr.omeatelecom.fr:80 (web2.ppr)
- vhost : enabler.virginmobile.fr en http (10.82.13.130)
		- proxy balancer vers 
			enabler1.ppr.omeatelecom.fr:8080 (web1.ppr)
			enabler2.ppr.omeatelecom.fr:8080 (web2.ppr)
Lvs proxy2.jpg

Présentation cas N°3 HA[modifier]

Dans ce cas nous n'avons pas de firewall, mais juste 2 lb et deux serveurs front derriere. Le client veut que les 2 front soient accessibles en direct via des ip publiques mais il veut aussi un load balancing sur une autre ip publiques. Plutot que d'avoir 2 subnet publiques avec du multihoming pour les routes, ou de faire du nat 1:1 pour joindre les frontaux via leur ip publiques, on va tout gérer via keepalived pour la partie vip et utiliser haproxy pour la partie load balancé (haproxy à la demande du client car cela aurait pu être fait avec keepalived)

A CORRIGER POUR ADAPTER A LA PLATEFORME

Résumé de la plateforme : Le lvs et le firewall doivent avoir un réseau de back / admin différent de celui des vm qui sont derrieres, sinon il y a un problème de route

  • Firewall
Ils portent :
 - les gateway par défaut des LVS et des serveurs web, et les routes RFC1918 des proxy
 - les ip publiques des sites web, ces ip étant redirigés vers les vip privées que portent les LVS
  • LVS
 - keepalived et ipvsadm tournent
 - ont la gateway des proxy via une vip "gw" keepalived
 - ont les vip web privées 10.82.10.100 (correspond au domaine www.virginmobile.fr) et 10.82.10.101 (correpond au domaine enabler.virginmobile.fr) via une vip "web" keepalived
 - font la redirection des vips 10.82.10.100 & 10.82.10.101 vers les real ip des serveurs proxy (10.82.12.65,66,67,68)
 - ont pour gateway par defaut le firewall
  • Proxy
Apache installé avec proxy_module, proxy_balancer_module, proxy_http_module. Ils recoivent les requetes http et https loadbalancés depuis les LVS, et font proxy balancer et proxy pass 
vers les serveurs web. Ils ont pour gateway par défaut la vip "gw" keepalived des LVS, et pour gateway rfc1918 le firewall

- vhost : www.virginmobile.fr en http et https  (10.82.12.65 & 10.82.12.67)
		- proxy balancer vers 
			www1.so.omeatelecom.fr:80 (web1.so)
			www1.lc.omeatelecom.fr:80 (web1.lc)
- vhost : enabler.virginmobile.fr en http (10.82.12.66 & 10.82.12.68)
		- proxy balancer vers 
			enabler1.so.omeatelecom.fr:8080 (web1.so)
			enabler1.lc.omeatelecom.fr:8080 (web1.lc)
  • Serveurs Web
Pas de configuration particulière, ils recoivent les requetes web.
Ils ont comme gateway par défaut le firewall
Lvs proxy.png