Ajout du support OpenNebula HA dans Hâpy

Ajouter la possibilité de créer une grappe haute disponibilité entre
plusieurs Hâpy (https://docs.opennebula.org/5.6/advanced_components/ha/index.html)

Pré-requis : Les datastores doivent être partagés entre tous les Hâpy
via NFS ou tout autre système de fichiers accécibles de manière
concurrente entre les serveurs (Glusterfs, Ceph, DRBD).

Pour faire ce développement nous nous sommes basés sur eole-glusterfs
qui permet de créer une grappe glusterfs (https://dev-eole.ac-dijon.fr/projects/eole-glusterfs)
This commit is contained in:
2019-02-06 14:14:03 +01:00
parent 850585af21
commit 78a27b4fdd
13 changed files with 548 additions and 104 deletions

View File

@ -4,10 +4,13 @@
<!--file filelist='onesinglenode' name='/etc/one/sunstone-server.conf' rm='True' mkdir='True'/-->
<file filelist='onesinglenode' name='/etc/one/vmm_exec/vmm_exec_kvm.conf' rm='True' mkdir='True'/>
<file filelist='onesinglenode' name='/etc/one/oned.conf' rm='True'/>
<file filelist='onesinglenode' name='/etc/one/sched.conf' rm='True'/>
<file filelist='onesinglenode' name='/var/lib/one/remotes/etc/vnm/OpenNebulaNetwork.conf' rm='True' mkdir='True'/>
<file filelist='onesinglenode' name='/etc/one/auth/ldap_auth.conf'/>
<file filelist='one_ha' name='/usr/share/eole/bastion/data/60-one' mode='755'/>
<service>opennebula</service>
<service>opennebula-scheduler</service>
<service_access service='one-ssh'>
<tcpwrapper>sshd</tcpwrapper>
@ -16,6 +19,19 @@
<service_restriction service='one-ssh'>
<ip interface='eth0' ip_type='SymLinkOption'>adresse_ip_eth0</ip>
</service_restriction>
<service_access service='sunstone'>
<port port_type="SymLinkOption">port_sunstone</port>
<port port_type="SymLinkOption">vnc_proxy_port_sunstone</port>
</service_access>
<service_access service='sunstone_xmlrpc'>
<port service_accesslist="sunstone_xmlrpc">2633</port>
</service_access>
<service_restriction service='sunstone_xmlrpc'>
<ip interface='one_node_int_name' interface_type='SymLinkOption' ip_type='SymLinkOption'>one_nodes</ip>
</service_restriction>
</files>
<variables>
<family name='general'>
@ -30,6 +46,25 @@
<variable name='one_cluster_name' type='string' description="Nom de la grappe OpenNebula par défaut" mode='expert'>
<value>default</value>
</variable>
<!-- Base de donnée -->
<variable name="one_database_type" description="Moteur de base de données a utiliser" type="string" mode="expert">
<value>sqlite</value>
</variable>
<variable name="one_database_host" description="Adresse du serveur de base de données (mySQL uniquement)" mandatory="True" mode="expert"/>
<variable name="one_database_port" description="Port d'écoute du serveur de base de données" mode="expert" type="number" mandatory="True">
<value>3306</value>
</variable>
<variable name="one_database_name" description="Nom de la base de données" type="string" mandatory="True">
<value>onedb</value>
</variable>
<variable name="one_database_user" description="Utilisateur pour se connecter à la base de données" type="string" mandatory="True">
<value>one</value>
</variable>
<variable name="one_database_pass" description="Mot de passe pour se connecter à la base de données" type="password" mandatory="True"/>
<variable name="one_database_connections" description="Nombre de connection à la base de données" type="number" mandatory="True" mode="expert"><value>50</value></variable>
<!-- VNETS -->
<variable name='vnet_pilote' type='string' description='Pilote utilisé pour le réseau virtuel' hidden='True' />
<variable name='vnets' type='string' description="Nom du réseau virtuel à plage d'adresse IP" multi='True'/>
<variable name='vnet_range_start' type='ip' description='Première IP de la plage' mandatory="True"/>
@ -68,11 +103,16 @@
<variable name='activer_hooks' type='oui/non' description="Utiliser des hooks personnalisés" mode='expert'>
<value>non</value>
</variable>
<variable name='activer_multinode' description="Activer l'intégration de plusieurs nœuds de virtualisation" mode='expert' type='oui/non'>
<variable name='activer_one_ha' type='oui/non' description="Activer le support pour la haute disponibilité OpenNebula" mode='expert'>
<value>non</value>
</variable>
<variable name='one_nodes' type='string' description="Nom du nœud de virtualisation" multi='True' mandatory='True'/>
<variable name='node_ip' type='ip' description="Adresse IP du nœud de virtualisation" mandatory='True'/>
<variable name='activer_multinode' description="Activer l'intégration de plusieurs nœuds de virtualisation" mode='expert' type='oui/non'/>
<variable name='one_nodes' type='domain' description="Nom du nœud de virtualisation" multi='True' mandatory='True'/>
<variable name="one_ha_server_index" description="Index du serveur dans la liste des nœuds de virtualisation" type="number" mandatory="True"/>
<variable name='one_node_int' type='domain' description="Interface de communication des nœuds" mandatory='True'/>
<variable name='one_node_int_name' type='domain' description="Nom de l'interface de communication des nœuds"/>
<variable name="one_vip" description="Adresse IP de la VIP OpenNebula" type="ip" mandatory="True"/>
<variable name="one_vip_mask" description="Masque de sous-réseau de la VIP OpenNebula" type="netmask" mandatory="True"/>
</family>
<family name='Modèle' icon='cloud'>
<variable name='hapy_init_master' type='oui/non' description="Activer l'auto-création du modèle de machine virtuelle pour installer un module EOLE">
@ -106,9 +146,10 @@
<variable name='hapy_user_hook_arguments' type='string' description="Arguments à passer au script (arguments)" mode='expert'/>
</family>
<separators>
<separator name="one_database_type">Configuration de la base de données</separator>
<separator name='vnet_pilote'>Configuration des réseaux de l'orchestrateur</separator>
<separator name='one_ds_system_prefix'>Configuration de l'orchestrateur</separator>
<separator name='activer_multinode'>Configuration des nœuds de virtualisation</separator>
<separator name='activer_one_ha'>Configuration des nœuds de virtualisation</separator>
</separators>
</variables>
@ -121,6 +162,10 @@
<param type="eole" name="condition_1">vnet_pilote</param>
</auto>
<check name="valid_enum" target="one_database_type">
<param>['sqlite','mysql']</param>
</check>
<check name='valid_enum' target='one_video_driver'>
<param>['qxl','vga','std','cirrus']</param>
<param name='checkval'>False</param>
@ -151,11 +196,60 @@
<target type='variable'>arp_cache_poisoning</target>
</condition>
<condition name="disabled_if_in" source="one_database_type">
<param>sqlite</param>
<target type="variable">one_database_host</target>
<target type="variable">one_database_port</target>
<target type="variable">one_database_name</target>
<target type="variable">one_database_user</target>
<target type="variable">one_database_pass</target>
<target type="variable">one_database_connections</target>
</condition>
<check name="valid_enum" target="one_node_int">
<param>['0','1','2','3','4']</param>
</check>
<auto name='concat' target='one_node_int_name'>
<param>eth</param>
<param type='eole'>one_node_int</param>
</auto>
<condition name='disabled_if_in' source='activer_multinode'>
<param>non</param>
<target type='variable'>one_nodes</target>
<target type='variable'>node_ip</target>
<target type='variable'>one_node_int</target>
<target type='variable'>one_node_int_name</target>
</condition>
<fill name='calc_val' target='activer_multinode'>
<param type='eole' name='valeur'>activer_one_ha</param>
</fill>
<condition name='frozen_if_in' source='activer_one_ha'>
<param>oui</param>
<target type='variable'>activer_multinode</target>
</condition>
<condition name='disabled_if_in' source='activer_one_ha'>
<param>non</param>
<target type='variable'>one_ha_server_index</target>
<target type='variable'>one_vip</target>
<target type='variable'>one_vip_mask</target>
<target type='service_accesslist'>sunstone_xmlrpc</target>
<target type='filelist'>one_ha</target>
</condition>
<fill name='calc_val' target='one_vip_mask'>
<param type='eole' name='valeur'>adresse_netmask_eth0</param>
</fill>
<check name="valid_differ" target="adresse_ip_eth0">
<param type='eole' hidden='False'>one_vip</param>
</check>
<check name="valid_differ" target="adresse_ip_gw">
<param type='eole' hidden='False'>one_vip</param>
</check>
<check name="valid_ipnetmask" target="one_vip_mask" level="warning">
<param type='eole'>one_vip</param>
</check>
<group master='vnets'>
<slave>vnet_range_start</slave>
@ -175,10 +269,6 @@
<slave>l2_vnet_vlan_trunk</slave>
</group>
<group master='one_nodes'>
<slave>node_ip</slave>
</group>
<check name='valid_enum' target='vnets'>
<param>['internet','admin','pedago','dmzpub','dmzpriv','wifi']</param>
<param name='checkval'>False</param>
@ -286,5 +376,8 @@
<variable name='hapy_init_master_iso_version'>Version de l'ISO EOLE à télécharger lors de l'initialisation</variable>
<variable name='vnets'>Réseau de type IPv4 (niveau 3 du modèle OSI)</variable>
<variable name='l2_vnets'>Réseau de type ethernet (niveau 2 du modèle OSI)</variable>
<variable name='one_ha_server_index'>Le leader à l'index 0, les followers commencent à 1</variable>
<variable name='activer_one_ha'>Active la possibilité d'intégrer Hâpy dans une grappe de haute disponibilité OpenNebula</variable>
<variable name="one_vip">Adresse IP virtuelle (VIP) utilisée pour joindre le "Leader" de la grappe, les usagés utiliseront cette IP pour contacter la grappe</variable>
</help>
</creole>