Management Server
Installation de Serveur de Management Apache Cloudstack sous Ubuntu
Cluster CloudStack HA avec MariaDB Galera, HAProxy & Keepalived

1. Architecture et plan d'adressage en 192.168.X.X
Réseau DB Galera
2.30
2.31
2.32
2.56
2.57
2.60
Réseau CloudStack
1.30
1.31
1.32
1.56
1.57
1.60
Les managers sont à la fois nœuds CloudStack et MariaDB.
LB1/LB2 sont les load balancers (HAProxy+Keepalived) sur chaque réseau.
VIP DB : 192.168.2.60 (pour la base MariaDB Galera)
VIP Web : 192.168.1.60 (pour l’accès CloudStack Web)
Les VIP sont gérées par Keepalived (failover automatique).
2. Préparation des serveurs
2.1. Prérequis système sur chaque manager et LB
sudo apt update && sudo apt upgrade -y
sudo apt install -y chrony curl wget gnupg2 lsb-release software-properties-common
sudo systemctl enable --now chrony
2.2. Vérification réseau et NTP
hostname -I
timedatectl status
3. Installation du cluster MariaDB Galera
3.1. Installation des paquets MariaDB
Sur chaque manager :
sudo apt install -y mariadb-server mariadb-client galera-4 rsync socat
sudo systemctl enable --now mariadb
3.2. Sécurisation initiale
sudo mysql_secure_installation
3.3. Configuration Galera (/etc/mysql/mariadb.conf.d/60-galera.cnf
)
/etc/mysql/mariadb.conf.d/60-galera.cnf
)Sur chaque manager :
[mysqld]
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.2.30,192.168.2.31,192.168.2.32"
wsrep_cluster_name="galera_cluster"
wsrep_node_address="192.168.2.30" # Adapter pour chaque manager
wsrep_node_name="manager-1" # Adapter pour chaque manager
wsrep_sst_method=rsync
3.4. Démarrage du cluster
Sur manager-1 (premier nœud) :
sudo galera_new_cluster
Sur manager-2 et manager-3 :
sudo systemctl start mariadb
4. Installation et configuration HAProxy + Keepalived
4.1. Installation sur LB1 et LB2
sudo apt install -y haproxy keepalived
sudo systemctl enable haproxy keepalived
4.2. Configuration HAProxy pour la DB (/etc/haproxy/haproxy.cfg
)
/etc/haproxy/haproxy.cfg
)frontend galera_front
bind *:3306
default_backend galera_backend
backend galera_backend
mode tcp
option mysql-check user haproxy_check
stick-table type ip size 1m expire 30m
stick on src
balance roundrobin
server db1 192.168.2.30:3306 check
server db2 192.168.2.31:3306 check
server db3 192.168.2.32:3306 check
Il serait idéale de faire une VIP pour pointer sur une serveur sql en priorité afin d'éviter des deadlocks
4.3. Configuration HAProxy pour CloudStack Web (/etc/haproxy/haproxy.cfg
)
/etc/haproxy/haproxy.cfg
)frontend cloudstack_web_front
bind *:8080
default_backend cloudstack_web_backend
backend cloudstack_web_backend
mode tcp
stick-table type ip size 1m expire 30m
stick on src
balance roundrobin
server manager-1 192.168.1.30:8080 check inter 5000 # check chaque 5 secondes
server manager-2 192.168.1.31:8080 check inter 5000 # check chaque 5 secondes
server manager-3 192.168.1.32:8080 check inter 5000 # check chaque 5 secondes
frontend cloudstack_mgmt_port
bind *:8250
default_backend cloudstack_mgmt_port_backend
backend cloudstack_mgmt_port_backend
mode tcp
stick-table type ip size 1m expire 30m
stick on src
balance roundrobin
server manager-1 192.168.1.30:8250 check inter 5000 # check chaque 5 secondes
server manager-2 192.168.1.31:8250 check inter 5000 # check chaque 5 secondes
server manager-3 192.168.1.32:8250 check inter 5000 # check chaque 5 secondes
Conf lb1 et lb2 finale


4.4. Création de l’utilisateur de check MySQL
Sur MariaDB :
CREATE USER 'haproxy_check'@'%' IDENTIFIED BY '';
FLUSH PRIVILEGES;
4.5. Configuration Keepalived (VIP DB et Web)
/etc/keepalived/keepalived.conf
sur LB1 :
vrrp_instance VI_DB {
state MASTER
interface ethX # Adapter à l'interface réseau DB
virtual_router_id 51
priority 101
authentication {
auth_type PASS
auth_pass secretpass
}
virtual_ipaddress {
192.168.2.60
}
track_script {
chk_haproxy
}
}
vrrp_instance VI_WEB {
state MASTER
interface ethY # Adapter à l'interface réseau CloudStack
virtual_router_id 52
priority 101
authentication {
auth_type PASS
auth_pass secretpass
}
virtual_ipaddress {
192.168.1.60
}
track_script {
chk_haproxy
}
}
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight 2
}
Sur LB2, mettre
state BACKUP
etpriority 100
.
Redémarrer HAProxy et Keepalived :
sudo systemctl restart haproxy keepalived
5. Création des bases et droits CloudStack
Sur MariaDB (sur n’importe quel nœud) :
# CREATE DATABASE cloud DEFAULT CHARACTER SET utf8; cette ligne crée
# la base de données cloud qui normalement se créer via le script d'installation
# il peut etre bien de la créer si le script d'install pete
CREATE DATABASE cloud_usage DEFAULT CHARACTER SET utf8;
CREATE USER 'cloud'@'%' IDENTIFIED BY 'motdepasse';
GRANT ALL ON cloud.* TO 'cloud'@'%';
GRANT ALL ON cloud_usage.* TO 'cloud'@'%';
GRANT PROCESS ON *.* TO 'cloud'@'%';
FLUSH PRIVILEGES;
6. Installation de CloudStack Management Server
Docs Officielle Install Management Server Install
6.1. Ajout du dépôt et installation
Sur chaque manager :
wget -O - https://downloads.apache.org/cloudstack/KEYS | sudo apt-key add -
echo "deb http://downloads.apache.org/cloudstack/debian/4.20/ubuntu focal 4.20" | sudo tee /etc/apt/sources.list.d/cloudstack.list
wget -O - https://download.cloudstack.org/release.asc |sudo tee /etc/apt/trusted.gpg.d/cloudstack.asc
sudo apt update
sudo apt install -y openjdk-17-jre-headless cloudstack-management
6.2. Setup de la base de données CloudStack (manager-1 uniquement)
cloudstack-setup-databases cloud:[email protected] --deploy-as=root:motdepasse
192.168.2.60 représente l'ip de la VIP dans le réseau de la BDD
Cette commande définira un mot de passe pour le user cloud le deploy-as nécessite le mdp root
Cela crée
/etc/cloudstack/management/db.properties
et/etc/cloudstack/management/key
.
6.3. Copie de la configuration sur les autres managers
Sur manager-2 et manager-3 :
Copie
/etc/cloudstack/management/db.properties
et/etc/cloudstack/management/key
depuis manager-1.Modifie uniquement la ligne :
manager-2 :
cluster.node.IP=192.168.1.31
manager-3 :
cluster.node.IP=192.168.1.32
6.4. Configuration HA dans db.properties
db.properties
Vérifie/ajoute :
db.ha.enabled=true
db.cloud.host=192.168.2.60
db.cloud.replicas=192.168.2.30,192.168.2.31,192.168.2.32
db.usage.host=192.168.2.60
db.usage.replicas=192.168.2.30,192.168.2.31,192.168.2.32

Les autres paramètres (
db.cloud.username
,db.cloud.password
, etc.) restent identiques.
6.5. Démarrage du service
Une fois la base de données configurée, vous pouvez finaliser la configuration du système d'exploitation du serveur de gestion. Cette commande configurera iptables, sudoers et démarrera le serveur de gestion.
cloudstack-setup-management
Sur chaque manager :
sudo systemctl enable --now cloudstack-management
sudo systemctl status cloudstack-management
7. Vérifications
MySQL :
mysql -h 192.168.2.60 -u cloud -p cloud
CloudStack Web : Accède à :
http://192.168.1.60:8080/client/ (VIP Web) ou DNS
http://192.168.1.30:8080/client/ (direct manager-1)
http://192.168.1.31:8080/client/ (direct manager-2)
http://192.168.1.32:8080/client/ (direct manager-3)


Logs CloudStack :
tail -f /var/log/cloudstack/management/management-server.log
8. Résolution des problèmes
Erreur 503 :
Vérifie la clé
/etc/cloudstack/management/key
sur tous les managers.Vérifie les logs CloudStack.
Passer le Cluster.Node.IP dans /etc/cloudstack/management/db.properties à 127.0.0.1 devrait résoudre le problème mais avec un message dans les logs type l'ip du noeud en lui même ne remonte pas
Connexion DB KO :
Vérifie les droits SQL et la connectivité réseau.
Pas d’accès web :
Si vous laisser le firewall activé, activé le pour 8080 et 8250 (
sudo ufw allow 8080/tcp
etsudo ufw allow 8250/tcp
). Sinon désactivé totalement le pare-feu niveau noeud ufw disable ou si firewalldVérifie la config HAProxy et Keepalived.
9. Sécurisation et bonnes pratiques
Firewall : Ouvre uniquement les ports nécessaires (3306 pour Galera, 8080 pour CloudStack Web).
Sauvegarde : Sauvegarde
/etc/cloudstack/management/key
et/etc/cloudstack/management/db.properties
.NTP : Synchronisation NTP active sur tous les nœuds.
Redondance : Teste la bascule des VIPs en arrêtant un LB.
10. Commandes utiles de supervision
# Vérifier la VIP DB
ip a | grep 192.168.2.60
# Vérifier la VIP Web
ip a | grep 192.168.1.60
# Vérifier HAProxy
sudo systemctl status haproxy
# Vérifier Keepalived
sudo systemctl status keepalived
# Vérifier CloudStack
sudo systemctl status cloudstack-management
tail -f /var/log/cloudstack/management/management-server.log
11. Schéma de fonctionnement
[Clients CloudStack Web]
|
[VIP 192.168.1.60]
|
[LB1/LB2: HAProxy+Keepalived]
|
[Managers CloudStack: 1.30/1.31/1.32]
|
[VIP DB 192.168.2.60]
|
[LB1/LB2: HAProxy+Keepalived]
|
[Cluster MariaDB Galera: 2.30/2.31/2.32]
12. Prochaines étapes
13. Références
Last updated
Was this helpful?