diff --git a/dicos/30_one-master-ha.xml b/dicos/30_one-master-ha.xml index 0f74dfc..176dad8 100644 --- a/dicos/30_one-master-ha.xml +++ b/dicos/30_one-master-ha.xml @@ -10,9 +10,10 @@ - + + - + Rôle du nœud de virtualisation @@ -29,14 +30,41 @@ non Haute disponibilité + + follower + one_followers_domain + one_vip + one_vip_mask + + + leader + one_server_index + + + leader + one_ha_role + 0 + None + + + adresse_netmask_eth0 + + + adresse_ip_eth0 + + + adresse_ip_gw + + + one_vip + Active la possibilité d'intégrer Hâpy dans une grappe de haute disponibilité OpenNebula Configuration du comportement du noeud dans la grappe Rôle initial du noeud dans la grappe, permet de déterminer comment le serveur commence sa vie dans la grappe - Identifiant unique du serveur dans la grappe, cet identifiant est un entier (0,1,2,3...) Adresse IP virtuelle (VIP) utilisée pour joindre le "Leader" de la grappe, les clients utiliseront cette IP pour contacter la grappe Masque de sous réseau du réseau de la VIP au format CIDR (ex: 24 pour 255.255.255.0) diff --git a/postservice/30-one-mng b/postservice/30-one-mng index 361667e..05386c3 100755 --- a/postservice/30-one-mng +++ b/postservice/30-one-mng @@ -185,9 +185,9 @@ function attach_host() { HOST=${1} CLST=${2} - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #CLST_ID=$(get_cluster_id_by_name ${CLST}) - CLST_ID=0 + CLST_ID=0 HST_ID=$(get_host_id_by_name ${HOST}) AUTH=$(get_one_auth) CMD="onecluster" @@ -249,7 +249,7 @@ function create_datastore() { ds_type="${1}" ds_name="${2}" - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #ds_cluster="${3}" if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]] @@ -300,7 +300,7 @@ __EOF__ RUN=$(${cmd} ${opt}) if [[ ${?} -eq 0 ]] then - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #attach_ds_to_cluster ${ds_name} ${ds_cluster} rm ${TMPL_FILE} return 0 @@ -384,11 +384,11 @@ __EOF__ function manage_datastores() { - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #cluster=${1} AUTH=$(get_one_auth) - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')${cluster}" SYSTEM_DS="$(CreoleGet 'one_ds_system_prefix')default" ISO_DS=$(CreoleGet 'one_ds_iso_name') @@ -398,7 +398,7 @@ function manage_datastores() sid=$(get_ds_id_by_name ${SYSTEM_DS}) if [[ ${sid} = "ERR" ]] then - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #create_datastore "SYSTEM" "${SYSTEM_DS}" "${cluster}" create_datastore "SYSTEM" "${SYSTEM_DS}" else @@ -408,7 +408,7 @@ function manage_datastores() imgid=$(get_ds_id_by_name ${IMAGE_DS}) if [[ ${imgid} = "ERR" ]] then - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #create_datastore "IMAGE" "${IMAGE_DS}" "${cluster}" create_datastore "IMAGE" "${IMAGE_DS}" else @@ -418,7 +418,7 @@ function manage_datastores() isoid=$(get_ds_id_by_name ${ISO_DS}) if [[ ${isoid} = "ERR" ]] then - # ref https://dev-eole.ac-dijon.fr/issues/16797 + # ref https://dev-eole.ac-dijon.fr/issues/16797 #create_datastore "ISO" "${ISO_DS}" "${cluster}" create_datastore "ISO" "${ISO_DS}" else @@ -427,25 +427,56 @@ function manage_datastores() return 0 } +function init_ha() { + onezone show 0 | grep -A 2 ^"HA & FEDERATION SYNC STATUS" | tail -n 1 | grep -q ^" 0 " + if [ ! $? = 0 ]; then + # server 0 not displayed with onezone + SERVER=$(CreoleGet one_master) + DOMAIN=$(CreoleGet nom_domaine_machine) + FOLLOWER=$(CreoleGet one_follower_servername) + onezone server-add 0 --name $SERVER --rpc http://$DOMAIN:2633/RPC2 + for $follower in $FOLLOWER; do + onezone server-add 0 --name $follower --rpc http://$follower:2633/RPC2 + done + fi +} + +function to_mysql() { + if [ $(CreoleGet one_database_type) = "mysql" && $(CreoleGet one_ha_role leader) = "leader" ]; then + # do not recover db on follower + HOST=$(CreoleGet one_database_host) + DB=$(CreoleGet one_database_name) + USER=$(CreoleGet one_database_user) + PASS=$(CreoleGet one_database_pass) + onedb sqlite2mysql -s /var/lib/one/one.db -u $USER -p $PASS -d $DB -S $HOST + systemctl stop opennebula.service + systemctl start opennebula.service + fi +} + function main() { wait_true_retcode "Wait for oned to be started" "onecluster show 0 > /dev/null" + if [ $(CreoleGet one_ha_role) = "leader" ]; then + init_ha + fi + to_mysql # # Rename default cluster clst_name=$(CreoleGet one_cluster_name) rename_default_cluster "${clst_name}" - # Wait 4 seconds for service (ref #16848) - sleep 4 + # Wait 4 seconds for service (ref #16848) + sleep 4 # # Creating Host # - if [[ $(CreoleGet eole_module non) != 'hapy-master' ]] - then - host=$(CreoleGet nom_machine) - manage_host ${host} - fi + if [[ $(CreoleGet eole_module non) != 'hapy-master' ]] + then + host=$(CreoleGet nom_machine) + manage_host ${host} + fi # # Attaching Host to the Cluster diff --git a/scripts/one_ha_init b/scripts/one_ha_init deleted file mode 100755 index b498139..0000000 --- a/scripts/one_ha_init +++ /dev/null @@ -1,12 +0,0 @@ -SERVER=$(CreoleGet one_master) -IP=$(CreoleGet adresse_ip_eth0) -if [ $(CreoleGet one_database_type) = "mysql" && $(CreoleGet one_ha_role) = "leader" ]; then - HOST=$(CreoleGet one_database_host) - DB=$(CreoleGet one_database_name) - USER=$(CreoleGet one_database_user) - PASS=$(CreoleGet one_database_pass) - onedb sqlite2mysql -s /var/lib/one/one.db -u $USER -p $PASS -d $DB -S $HOST - systemctl stop opennebula - systemctl start opennebula -fi -onezone server-add 0 --name $SERVER --rpc http://$IP:2633/RPC2 diff --git a/tmpl/oned.conf b/tmpl/oned.conf index 72f8ab3..15356a3 100644 --- a/tmpl/oned.conf +++ b/tmpl/oned.conf @@ -153,7 +153,11 @@ VNC_PORTS = [ FEDERATION = [ MODE = "STANDALONE", ZONE_ID = 0, +%if %%enable_one_ha == 'oui' + SERVER_ID = %%one_server_index, +%else SERVER_ID = -1, +%end if MASTER_ONED = "" ] @@ -166,17 +170,19 @@ RAFT = [ XMLRPC_TIMEOUT_MS = 450 ] +%if %%enable_one_ha == 'oui' and one_ha_role == 'leader' # Executed when a server transits from follower->leader -# RAFT_LEADER_HOOK = [ -# COMMAND = "raft/vip.sh", -# ARGUMENTS = "leader " -# ] +RAFT_LEADER_HOOK = [ + COMMAND = "raft/vip.sh", + ARGUMENTS = "leader %%nom_zone_eth0 %%one_vip/%%calc_classe(%%one_vip_mask)" +] # Executed when a server transits from leader->follower -# RAFT_FOLLOWER_HOOK = [ -# COMMAND = "raft/vip.sh", -# ARGUMENTS = "follower " -# ] +RAFT_FOLLOWER_HOOK = [ + COMMAND = "raft/vip.sh", + ARGUMENTS = "follower %%nom_zone_eth0 %%one_vip/%%calc_classe(%%one_vip_mask)" +] +%end if #******************************************************************************* # Default showback cost