diff --git a/diagnose/04-virtualisation b/diagnose/04-virtualisation index 58fbb0d..dfc15a5 100755 --- a/diagnose/04-virtualisation +++ b/diagnose/04-virtualisation @@ -80,7 +80,7 @@ then echo "" else for VM in $VMs ; do - NAME=$( one "onevm show $VM" | grep 'NAME' | cut -d: -f2 ) + NAME=$( one "onevm show $VM" | grep '^NAME' | cut -d: -f2 ) STAT=$(one "onevm show $VM" | grep '^STATE' | cut -d: -f2 | tr -d ' ' ) printf ". %${len_pf}s => " "$NAME" eOneStatus "$STAT" diff --git a/dicos/29_one-master.xml b/dicos/29_one-master.xml index 0e6bdd0..7657de7 100644 --- a/dicos/29_one-master.xml +++ b/dicos/29_one-master.xml @@ -4,10 +4,13 @@ + + opennebula + opennebula-scheduler sshd @@ -16,6 +19,19 @@ adresse_ip_eth0 + + + port_sunstone + vnc_proxy_port_sunstone + + + + 2633 + + + + one_nodes + @@ -30,6 +46,25 @@ default + + + + sqlite + + + + 3306 + + + onedb + + + one + + + 50 + + @@ -106,9 +146,10 @@ + Configuration de la base de données Configuration des réseaux de l'orchestrateur Configuration de l'orchestrateur - Configuration des nœuds de virtualisation + Configuration des nœuds de virtualisation @@ -121,6 +162,10 @@ vnet_pilote + + ['sqlite','mysql'] + + ['qxl','vga','std','cirrus'] False @@ -151,11 +196,60 @@ arp_cache_poisoning + + sqlite + one_database_host + one_database_port + one_database_name + one_database_user + one_database_pass + one_database_connections + + + + ['0','1','2','3','4'] + + + eth + one_node_int + + non one_nodes - node_ip + one_node_int + one_node_int_name + + activer_one_ha + + + oui + activer_multinode + + + + non + one_ha_server_index + one_vip + one_vip_mask + sunstone_xmlrpc + one_ha + + + + adresse_netmask_eth0 + + + + one_vip + + + one_vip + + + one_vip + vnet_range_start @@ -175,10 +269,6 @@ l2_vnet_vlan_trunk - - node_ip - - ['internet','admin','pedago','dmzpub','dmzpriv','wifi'] False @@ -286,5 +376,8 @@ Version de l'ISO EOLE à télécharger lors de l'initialisation Réseau de type IPv4 (niveau 3 du modèle OSI) Réseau de type ethernet (niveau 2 du modèle OSI) + Le leader à l'index 0, les followers commencent à 1 + Active la possibilité d'intégrer Hâpy dans une grappe de haute disponibilité OpenNebula + Adresse IP virtuelle (VIP) utilisée pour joindre le "Leader" de la grappe, les usagés utiliseront cette IP pour contacter la grappe diff --git a/postservice/30-one-mng b/postservice/30-one-mng index 361667e..93526f0 100755 --- a/postservice/30-one-mng +++ b/postservice/30-one-mng @@ -69,6 +69,21 @@ function check_host() return ${res} } +# Fix host creation error from 5.6.1 with sync methode rsync +function sync_host() +{ + CMD="onehost" + OPT="sync -f --rsync" + AUTH=$(get_one_auth) + res=$(su - oneadmin -c "${CMD} ${OPT} --user ${AUTH%:*} --password ${AUTH#*:}") + if [[ ${?} -ne 0 ]] + then + error "Hosts sync failed" + else + echo "Hosts sync OK" + fi +} + function manage_host() { NAME=${1} @@ -185,9 +200,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,10 +264,11 @@ function create_datastore() { ds_type="${1}" ds_name="${2}" - # ref https://dev-eole.ac-dijon.fr/issues/16797 + local ha=$(CreoleGet activer_one_ha) + # ref https://dev-eole.ac-dijon.fr/issues/16797 #ds_cluster="${3}" - if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]] + if [[ $(CreoleGet activer_multinode 2>&1) == 'oui' ]] && [[ ${ha} == "non" ]] then SYS_TM_MAD='ssh' ISO_TM_MAD='ssh' @@ -300,7 +316,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 @@ -316,13 +332,14 @@ function update_datastore() local cmd="onedatastore" local opt="show" local multinode=$(CreoleGet activer_multinode 2>&1) + local ha=$(CreoleGet activer_one_ha) ds_type="" ds_mad="" ds_name="" TMPL_FILE=$(mktemp) - if [[ ${multinode} == 'oui' ]] + if [[ ${multinode} == 'oui' ]] && [[ ${ha} == "non" ]] then SYS_TM_MAD='ssh' ISO_TM_MAD='ssh' @@ -384,11 +401,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 +415,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 +425,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 +435,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 @@ -430,32 +447,48 @@ function manage_datastores() function main() { wait_true_retcode "Wait for oned to be started" "onecluster show 0 > /dev/null" + if [ "$(CreoleGet activer_one_ha)" = "oui" ]; then + if [ "$(CreoleGet one_ha_server_index)" != "0" ]; then + # ne pas faire sur les followers + return + fi + fi # # 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 activer_one_ha)" = "oui" ]; then + if [[ $(CreoleGet eole_module non) != 'hapy-master' ]] + then + host=$(CreoleGet nom_machine) + manage_host ${host} + fi + fi # # Attaching Host to the Cluster # attach_host ${host} "${clst_name}" + # + # Force host synchronisation + # + sync_host + # # Création des Datastores # manage_datastores "${clst_name}" + } -main +main $@ + +exit 0 diff --git a/postservice/31-one-netmng b/postservice/31-one-netmng index 4fd5ec6..abb2a40 100755 --- a/postservice/31-one-netmng +++ b/postservice/31-one-netmng @@ -303,6 +303,14 @@ def main(): logger.debug(u"Configure OpenNebula networks") client = CreoleClient() + + mode_ha = client.get_creole('activer_one_ha') + if mode_ha == "oui": + indx = client.get_creole('one_ha_server_index') + if indx != 0: + # Mode HA is on and we are not in the Leader + exit(0) + one_client = OneClient('oneadmin') networks = [] cluster = client.get_creole('one_cluster_name') diff --git a/postservice/99-z-ha b/postservice/99-z-ha new file mode 100644 index 0000000..88b70d4 --- /dev/null +++ b/postservice/99-z-ha @@ -0,0 +1,15 @@ +#!/bin/bash + +ha=$(CreoleGet activer_one_ha non) +if [[ ${ha} == "oui" ]] +then + indx=$(CreoleGet one_ha_server_index) +else + indx="0" +fi + +if [[ ${1} == "instance" ]] && [[ ${indx} == "0" ]] +then + /usr/share/eole/sbin/onehost_create_all +fi +exit 0 diff --git a/posttemplate/90-one-db b/posttemplate/90-one-db index dd2963a..213d001 100644 --- a/posttemplate/90-one-db +++ b/posttemplate/90-one-db @@ -6,44 +6,79 @@ # . /usr/lib/eole/ihm.sh +script="$1" function clean_backups() { - file=${1} - bcks=($(ls ${file}_*)) - nbbck=$(expr ${#bcks[@]} - 2) + file=${1} + ls ${file}_* > /dev/null 2>&1 + if [ $? = 0 ]; then + bcks=($(ls ${file}_*)) + nbbck=$(expr ${#bcks[@]} - 2) - if [[ ${nbbck} -gt 1 ]] - then - EchoGras "Cleaning up old backups !" - for idx in `seq 0 ${nbbck}` - do - rm -f ${bcks[${idx}]} - done - fi + if [[ ${nbbck} -gt 1 ]] + then + EchoGras "Cleaning up old backups !" + for idx in `seq 0 ${nbbck}` + do + rm -f ${bcks[${idx}]} + done + fi + fi } function updateDB() { - local dbfile='/var/lib/one/one.db' - local cmd="onedb" - local res=0 + local dbfile='/var/lib/one/one.db' + local cmd="onedb" + local res=0 - if [[ -f ${dbfile} ]] - then - $cmd upgrade -f -s ${dbfile} - res=${?} - clean_backups ${dbfile} - return ${res} - else - return 0 - fi + if [[ -f ${dbfile} ]] + then + if [ $(CreoleGet one_database_type) = "mysql" ]; then + if [ $(CreoleGet one_ha_server_index 0) = "0" ]; then + HOST=$(CreoleGet one_database_host) + DB=$(CreoleGet one_database_name) + USER=$(CreoleGet one_database_user) + PASS=$(CreoleGet one_database_pass) + $cmd upgrade -f -u $USER -p $PASS -d $DB -S $HOST + fi + else + $cmd upgrade -f -s ${dbfile} + fi + res=${?} + clean_backups ${dbfile} + return ${res} + else + return 0 + fi } +function to_mysql() { + if [ "$script" = 'instance' ] && [ $(CreoleGet one_database_type) = "mysql" ] && [ $(CreoleGet one_ha_server_index 0) = "0" ]; then + Question_ouinon "Voulez-vous migrer de SQLite à Mysql ?" "True" "oui" "warn" + rep=$(echo "$?") + if [ "$rep" == "0" ]; 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) + cp -a /etc/one/oned.conf /etc/one/oned.conf.ori + # HA ne doit pas être activer pour la migration + CreoleCat -s /usr/share/eole/creole/distrib/oned-ha-mysql.conf -o /etc/one/oned.conf + oned -i + onedb sqlite2mysql -s /var/lib/one/one.db -u $USER -p $PASS -d $DB -S $HOST + cp -a /etc/one/oned.conf.ori /etc/one/oned.conf + fi + fi +} + +echo +to_mysql echo EchoGras "Mise à jour de la base de données ONE" echo updateDB -echo exit ${?} diff --git a/preservice/30-one-auth b/preservice/30-one-auth index dc5ddb0..9722a18 100644 --- a/preservice/30-one-auth +++ b/preservice/30-one-auth @@ -8,3 +8,10 @@ if [ -z "${auth_mode}" ]; then else ln -s /var/lib/one/remotes/auth/{${auth_mode},default} fi + +# creation de la base /var/lib/one/one.db +if [ ! -e /var/lib/one/one.db ]; then + systemctl daemon-reload + systemctl start opennebula.service +fi +exit 0 diff --git a/preservice/31-one-ha b/preservice/31-one-ha new file mode 100755 index 0000000..d19a938 --- /dev/null +++ b/preservice/31-one-ha @@ -0,0 +1,26 @@ +#!/bin/bash + +HA=$(CreoleGet activer_one_ha non) +DBMODE=$(CreoleGet one_database_type "none") +LEADER_DB_FILE="/var/lib/one/one.db.leader" +DBFILE="/var/lib/one/one.db" + +# If HA is enabled and a leader database file is present +# we restore the leader database. + +if [[ ${HA} == "oui" ]] && [[ ${DBMODE} == "sqlite" ]] +then + if [[ -f ${LEADER_DB_FILE} ]] + then + if [[ $(CreoleGet one_ha_server_index) != "0" ]] + then + onedb restore --sqlite ${DBFILE} ${LEADER_DB_FILE} -f + if [[ $? -eq 0 ]] + then + rm ${LEADER_DB_FILE} + exit ${?} + fi + fi + fi +fi +exit 0 diff --git a/scripts/onehost_create_all b/scripts/onehost_create_all index 44961d6..a3ac59e 100755 --- a/scripts/onehost_create_all +++ b/scripts/onehost_create_all @@ -7,24 +7,73 @@ . /usr/lib/eole/ihm.sh # -# NAME: copy_ssh_id +# NAME: copy_ssh_id # AIM: Copy the ssh key on the host -# PARAM: the hostname of the node +# PARAM: the hostname of the node # function copy_ssh_id() { - local ip=${1} + local host=${1} - ssh ${ip} bash -s < /tmp/one-master.key.pub -if ! grep -qs /tmp/one-master.key.pub ~oneadmin/.ssh/authorized_keys -then - cat /tmp/one-master.key.pub >> ~oneadmin/.ssh/authorized_keys - chown oneadmin:oneadmin ~oneadmin/.ssh/authorized_keys + CLEF=$(cat ~oneadmin/.ssh/id_rsa.pub) + ssh ${host} bash <> ~oneadmin/.ssh/authorized_keys + chown oneadmin:oneadmin ~oneadmin/.ssh/authorized_keys + su - oneadmin -c "ssh-keyscan $host" + cat ~oneadmin/.ssh/id_rsa.pub >> ~oneadmin/.ssh/authorized_keys fi -rm -f /tmp/one-master.key.pub EOF - return ${?} + [[ ${?} -ne 0 ]] && EchoRouge "Erreur lors de l'échange de clés SSH avec le noeud ${host}" + REMOTEKEY=$(su - oneadmin -c "ssh ${host} 'cat ~oneadmin/.ssh/id_rsa.pub'") + if ! grep -qs "$REMOTEKEY" ~oneadmin/.ssh/authorized_keys; then + su - oneadmin -c "echo ${REMOTEKEY} >> ~oneadmin/.ssh/authorized_keys" + su - oneadmin -c "ssh-keyscan $host" + fi +} + +function copy_files() +{ + local host=${1} + su - oneadmin -c "scp .one/* ${host}:.one/" +} + + +# +# NAME: sync_db +# AIM: Sync onedb in HA and sqlite mode +# PARAM: the hostname of the node +# +function sync_db() +{ + local ip=${1} + local user="oneadmin" + local DBFILE="/var/lib/one/one.db" + local DBBCK="/tmp/one.db.bck" + local ret=0 + + if [[ ! -f ${DBBCK} ]] + then + cmd="onedb backup --sqlite ${DBFILE} ${DBBCK}" + ret=$(su - ${user} -c -- "${cmd}") + fi + + cmd2="scp ${DBBCK} ${ip}:${DBFILE}.leader" + ret=$(su - ${user} -c -- "${cmd2}") + return ${?} +} + +# +# NAME: sync_nodes +# AIM: force nodes sync with rsync (ONE 5.6.1 bug) +# PARAM: none +# +function sync_nodes() +{ + # Need to sync hosts with rsync after creation, ONE 5.6.1 bug + cmd2="onehost sync -f --rsync" + ret2=$(su - ${ONEUSER} -c -- "${cmd2}") + return ${?} } # @@ -35,21 +84,28 @@ EOF function register_node() { cmd="onehost create -i kvm -v kvm -c 0 ${1}" + ret=$(su - ${ONEUSER} -c -- "${cmd}") - return $? + if [[ ${?} -ne 0 ]] + then + EchoRouge "Hosts register failed $res" + else + EchoVert "Hosts register OK" + fi } + # # NAME: wait_node_ok # AIM: Wait until the node is OK or ERROR -# PARAM: The node name +# PARAM: The node name # function wait_node_ok() { - local RET=0 local cmd="onehost show ${1} | awk '/^STATE/ {print \$3}'" local spinstr='|/-\' local delay=0.75 + local cnt=0 while [ 1 ] do @@ -58,8 +114,10 @@ function wait_node_ok() [[ ${st} == '' ]] && break if [[ ${st} == "ERROR" ]] then - RET=2 - break + if [ $cnt -gt 160 ]; then + EchoRouge "Erreur lors de l'enregistrement du noeud ${host} !" + break + fi fi local temp=${spinstr#?} @@ -67,10 +125,20 @@ function wait_node_ok() local spinstr=$temp${spinstr%"$temp"} sleep $delay printf "\b\b\b\b\b\b" - + cnt=$((cnt+1)) done printf " \b\b\b\b" - return ${RET} +} + +function init_ha_leader() { + # server with index 1 exists if already instanciate + onezone show 0 | grep -A 3 ^"HA & FEDERATION SYNC STATUS" | tail -n 1 | grep -q ^" 1 " + if [ ! $? = 0 ]; then + FOLLOWER=$(CreoleGet one_nodes) + for follower in $FOLLOWER; do + onezone server-add 0 --name $follower --rpc http://$follower:2633/RPC2 + done + fi } # @@ -79,21 +147,35 @@ function wait_node_ok() HAPY_ACTIF=$(echo $(CreoleGet activer_onesinglenode)) if [[ $HAPY_ACTIF == "non" ]] then - EchoRouge "Le serveur de virtualisation n'est pas activé dans l'interface de configuration du module" - exit 1 + EchoRouge "Le serveur de virtualisation n'est pas activé dans l'interface de configuration du module" + exit 1 fi HAPY_NODE_SUPPORT=$(echo $(CreoleGet activer_multinode)) if [[ $HAPY_NODE_SUPPORT == "non" ]] then - EchoRouge "Le mode multi-noeuds n'est pas activé dans l'interface de configuration du module" - exit 1 + EchoRouge "Le mode multi-noeuds n'est pas activé dans l'interface de configuration du module" + exit 1 fi + +HAPY_HA=$(CreoleGet activer_one_ha "non") + +master=1 +if [[ ${HAPY_HA} == "oui" ]]; then + idx=$(CreoleGet one_ha_server_index) + if [[ ${idx} != "0" ]]; then + EchoBleu "Mode HA: (on) Index : [${idx}]" + echo -e "\t$(basename ${0}) doit être lancé uniquement sur le leader (index 0)" + exit 0 + else + master=0 + fi +fi + declare -a HAPY_SLV=('') -declare -a HAPY_SLV_IP=('') ONEUSER=$(CreoleGet virt_user) HAPY_SLV=$(echo $(CreoleGet one_nodes) | sed -e "s/\n/ /g") -HAPY_SLV_IP=$(echo $(CreoleGet node_ip) | sed -e "s/\n/ /g") +DBMODE=$(CreoleGet one_database_type "none") echo -e "\n" EchoBleu "Vous allez inscrire un noeud dans une grappe Hâpy" @@ -101,28 +183,46 @@ EchoBleu "Pour ce faire vous devez vous munir du mot de passe de l'utilisateur ' Question_ouinon "Voulez-vous commencer ?" 'True' "oui" if [[ $? -ne 0 ]] then - EchoOrange "Abandon de l'enregistrement" - exit 1 + EchoOrange "Abandon de l'enregistrement" + exit 1 fi -for ((i = 0; i < ${#HAPY_SLV[*]}; i +=1)) -do + +for host in ${HAPY_SLV}; do echo -e "\n" - EchoOrange "Traitement du noeud ${HAPY_SLV[${i}]}" + EchoOrange "Traitement du noeud ${host}" echo EchoVert " * Gestion des clés SSH" echo - copy_ssh_id ${HAPY_SLV_IP[${i}]} - [[ ${?} -ne 0 ]] && EchoRouge "Erreur lors de l'échange de clés SSH avec le noeud ${HAPY_SLV[${i}]}}" + copy_ssh_id ${host} + if [ $master = 0 ]; then + copy_files ${host} + fi EchoVert " * Enregistrement du noeud" - register_node ${HAPY_SLV[${i}]} - wait_node_ok ${HAPY_SLV[${i}]} - if [[ ${?} -ne 0 ]] + register_node ${host} + if [[ ${HAPY_HA} == "oui" ]] then - EchoRouge "Erreur lors de l'enregistrement du noeud ${HAPY_SLV[${i}]} !" + if [[ $DBMODE == "sqlite" ]] + then + if [[ $(CreoleGet one_ha_server_index) == "0" ]] + then + sync_db ${host} + fi + fi + fi + sync_nodes + if [[ ${HAPY_HA} != "oui" ]] + wait_node_ok ${HAPY_SLV[${i}]} + if [[ ${?} -ne 0 ]] + then + EchoRouge "Erreur lors de l'enregistrement du noeud ${HAPY_SLV[${i}]} !" + fi fi done +if [ $master = 0 ]; then + init_ha_leader +fi echo -e "\n" EchoVert "Enregistrement des noeuds terminé" diff --git a/tmpl/60-one b/tmpl/60-one new file mode 100644 index 0000000..24d4dfc --- /dev/null +++ b/tmpl/60-one @@ -0,0 +1,5 @@ +#!/bin/bash + +%for %%host in %%one_nodes +/sbin/iptables -A eth%%{one_node_int}-root -s %%host -p tcp --syn -j ACCEPT +%end for diff --git a/tmpl/oned-ha-mysql.conf b/tmpl/oned-ha-mysql.conf new file mode 100644 index 0000000..17b618c --- /dev/null +++ b/tmpl/oned-ha-mysql.conf @@ -0,0 +1,2 @@ +%set global %%activer_one_ha='non' +%include '/var/lib/creole/oned.conf' diff --git a/tmpl/oned.conf b/tmpl/oned.conf index 4ae093f..ed0b407 100644 --- a/tmpl/oned.conf +++ b/tmpl/oned.conf @@ -78,18 +78,22 @@ SCRIPTS_REMOTE_DIR=/var/tmp/one PORT = 2633 +%if %%activer_one_ha == 'non' LISTEN_ADDRESS = "127.0.0.1" +%end if +%if %%one_database_type == "sqlite" DB = [ BACKEND = "sqlite" ] - +%else # Sample configuration for MySQL -# DB = [ BACKEND = "mysql", -# SERVER = "localhost", -# PORT = 0, -# USER = "oneadmin", -# PASSWD = "oneadmin", -# DB_NAME = "opennebula", -# CONNECTIONS = 50 ] +DB = [ BACKEND = "mysql", + SERVER = "%%one_database_host", + PORT = %%one_database_port, + USER = "%%one_database_user", + PASSWD = "%%one_database_pass", + DB_NAME = "%%one_database_name", + CONNECTIONS = %%one_database_connections ] +%end if VNC_PORTS = [ START = 5900 @@ -151,7 +155,11 @@ VNC_PORTS = [ FEDERATION = [ MODE = "STANDALONE", ZONE_ID = 0, +%if %%activer_one_ha == 'oui' + SERVER_ID = %%one_ha_server_index, +%else SERVER_ID = -1, +%end if MASTER_ONED = "" ] @@ -164,17 +172,19 @@ RAFT = [ XMLRPC_TIMEOUT_MS = 450 ] +%if %%activer_one_ha == 'oui' # 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 diff --git a/tmpl/sched.conf b/tmpl/sched.conf new file mode 100644 index 0000000..938e044 --- /dev/null +++ b/tmpl/sched.conf @@ -0,0 +1,110 @@ +#******************************************************************************* +# OpenNebula Configuration file +#******************************************************************************* + +#******************************************************************************* +# Daemon configuration attributes +#------------------------------------------------------------------------------- +# MESSAGE_SIZE: Buffer size in bytes for XML-RPC responses. +# +# XMLRPC_TIMEOUT: Seconds to timeout XML-RPC calls to oned +# +# ONE_XMLRPC: URL to connect to the OpenNebula daemon (oned) +# +# SCHED_INTERVAL: Seconds between two scheduling actions +# +# MAX_VM: Maximum number of Virtual Machines scheduled in each scheduling +# action. Use 0 to schedule all pending VMs each time. +# +# MAX_DISPATCH: Maximum number of Virtual Machines actually dispatched to a +# host in each scheduling action +# +# MAX_HOST: Maximum number of Virtual Machines dispatched to a given host in +# each scheduling action +# +# LIVE_RESCHEDS: Perform live (1) or cold migrations (0) when rescheduling a VM +# +# DEFAULT_SCHED: Definition of the default scheduling algorithm +# - policy: +# 0 = Packing. Heuristic that minimizes the number of hosts in use by +# packing the VMs in the hosts to reduce VM fragmentation +# 1 = Striping. Heuristic that tries to maximize resources available for +# the VMs by spreading the VMs in the hosts +# 2 = Load-aware. Heuristic that tries to maximize resources available for +# the VMs by using those nodes with less load +# 3 = Custom. +# - rank: Custom arithmetic expression to rank suitable hosts based in their +# attributes +# 4 = Fixed. Hosts will be ranked according to the PRIORITY attribute found +# in the Host or Cluster template. +# +# DEFAULT_DS_SCHED: Definition of the default storage scheduling algorithm +# - policy: +# 0 = Packing. Tries to optimize storage usage by selecting the DS with +# less free space +# 1 = Striping. Tries to optimize I/O by distributing the VMs across +# datastores. +# 2 = Custom. +# - rank: Custom arithmetic exprission to rank suitable datastores based on +# their attributes +# 3 = Fixed. Datastores will be ranked according to the PRIORITY attribute +# found in the Datastore template. +# +# +# LOG: Configuration for the logging system +# - system: defines the logging system: +# file to log in the sched.log file +# syslog to use the syslog facilities +# - debug_level: +# 0 = ERROR +# 1 = WARNING +# 2 = INFO +# 3 = DEBUG Includes general scheduling information (default) +# 4 = DDEBUG Includes time taken for each step +# 5 = DDDEBUG Includes detailed information about the scheduling +# decision, such as VM requirements, Host ranking for +# each VM, etc. This will impact the performance +# +# MEMORY_SYSTEM_DS_SCALE: This factor scales the VM usage of the system DS with +# the memory size. This factor can be use to make the scheduler consider the +# overhead of checkpoint files: +# system_ds_usage = system_ds_usage + memory_system_ds_scale * memory +# +#******************************************************************************* + +MESSAGE_SIZE = 1073741824 +TIMEOUT = 60 + +%if %%activer_one_ha == 'oui' +ONE_XMLRPC = "http://%%adresse_ip_eth0:2633/RPC2" +%else +ONE_XMLRPC = "http://localhost:2633/RPC2" +%end if + +SCHED_INTERVAL = 30 + +MAX_VM = 5000 +MAX_DISPATCH = 30 +MAX_HOST = 1 + +LIVE_RESCHEDS = 0 + +MEMORY_SYSTEM_DS_SCALE = 0 + +DEFAULT_SCHED = [ + policy = 1 +] + +DEFAULT_DS_SCHED = [ + policy = 1 +] + +#DEFAULT_SCHED = [ +# policy = 3, +# rank = "- (RUNNING_VMS * 50 + FREE_CPU)" +#] + +LOG = [ + system = "file", + debug_level = 3 +]