Zimbra : déplacer les boites des utilisateurs – Babash
Après lancement de votre messagerie Zimbra, vous souhaitez répartir les boites les plus conséquentes sur vos stores pour répartir la charge ? Voici comment faire :
État des lieux
Petit résumé de nos choix :
A l’époque, nous avons choisi le critère du nombre afin de répartir les utilisateurs : 12 000 étudiants sur 2 stores et 6 000 personnels sur un seul store.
Ce n’est pas un mauvais choix, mais les étudiants ne consomment pas énormément de stockage. Nous avons donc 2 stores peu chargés et 1 beaucoup plus.
De plus, si ce dernier tombe, le personnel entier n’a plus de boite mail.
De ces deux constats, nous avons souhaité répartir les boites du personnel sur l’ensemble des stores.
Trouver les boites les plus volumineuses
Voici donc 2 lignes de commandes à lancer sur le “store personnel” :
#recuperation de tous les comptes personnels sauf comptes de services zimbra zmprov gqu votre_serveur.domain.com | egrep -v ‘^spam|^ham|^virus|^admin|galsync’ | awk {‘print » « $3 » « $1’} | grep -v « @domaineETUDIANT.fr » > /tmp/quota_account #on trie par ordre de grosseur et on migre les 2000 premiers comptes cat /tmp/quota_account | sort -n -r | head -n 2000 > /tmp/all_account_sorted
#recuperation de tous les comptes personnels sauf comptes de services zimbra zmprov gqu votre_serveur.domain.com | egrep -v ‘^spam|^ham|^virus|^admin|galsync’ | awk {‘print » « $3 » « $1’} | grep -v « @domaineETUDIANT.fr » > /tmp/quota_account #on trie par ordre de grosseur et on migre les 2000 premiers comptes cat /tmp/quota_account | sort -n -r | head -n 2000 > /tmp/all_account_sorted |
Je pense que les commentaires sont assez parlants 🙂 J’ajouterai par contre que nous avons sélectionné que les 2000 premiers comptes, soit 2/3 des comptes du “store personnel” car ces 2/3 seront mis sur deux autres stores.
Vous obtenez en sortie un fichier de ce type:
Taille de la boite UID
12354684714354684 uid@domain.com
Répartir les comptes sur 2 stores
#on split en 2 fichiers cat /tmp/all_account_sorted | sed ‘n;d’ > /tmp/all_account_store1 cat /tmp/all_account_sorted | sed -n ‘n;p’ > /tmp/all_account_store3
cat /tmp/all_account_sorted | sed ‘n;d’ > /tmp/all_account_store1 cat /tmp/all_account_sorted | sed -n ‘n;p’ > /tmp/all_account_store3 |
Simple ici, on répartir en fonction des lignes paires et impaires.
Générer les commandes Zimbra
Il y a deux commandes à générer :
- copie de la boite sur le nouveau serveur et activation de cette dernière,
- suppression de la boite restée sur l’ancien serveur.
En effet, vous avez beau utiliser la commande “zmmboxmove”, la boite est certes déplacée, mais celle d’origine reste en cas de besoin. A vous de la supprimer quand la bascule est correcte.
Alléger les fichiers
Avant de générer les commandes, il vous faut alléger le fichier car ce dernier contient la taille de la boite mail. Pour cela :
cat /tmp/all_account_store1 | awk -F’ ‘ ‘{print $2}’ > /root/zmmboxmove/all_account_store1
cat /tmp/all_account_store1 | awk -F’ ‘ ‘{print $2}’ > /root/zmmboxmove/all_account_store1 |
Copie du fichier pour générer la purge des box
On duplique ce fichier pour générer les commandes de purge des vieilles boites
cp /root/zmmboxmove/all_account_store1 /root/zmmboxmove/all_account_store1_purge
cp /root/zmmboxmove/all_account_store1 /root/zmmboxmove/all_account_store1_purge |
Générer le zmmboxmove
sed -i ‘/^/ s//zmmboxmove -a /g;/$/ s// –from storeorigine.domain.com –to storecible.domain.com –sync/g’ /root/zmmboxmove/all_account_store1
sed -i ‘/^/ s//zmmboxmove -a /g;/$/ s// –from storeorigine.domain.com –to storecible.domain.com –sync/g’ /root/zmmboxmove/all_account_store1 |
Générer le purge
sed -i ‘/^/ s//zmpurgeoldmbox -a /g’ /root/zmmboxmove/all_account_store1_purge
sed -i ‘/^/ s//zmpurgeoldmbox -a /g’ /root/zmmboxmove/all_account_store1_purge |
Faire de même pour le fichier “all_account_store3”
Conseils
Les 4 fichiers sont donc générés ( 2 pour déplacer et 2 pour supprimer les anciennes boites ).
Faire des petits lots
Ne lancez pas cela à la bourrin ! Coupez le fichier de déplacement de boite en petit lot : genre 50 comptes. Et chaque jour, vous ferez 50 comptes à chaque fois.
Cela laissera Zimbra faire les modifications tranquillement, que les sauvegardes de ces boites mails se fassent sur le nouveau store, que votre sauvegarde de VM soit faite aussi niveau infrastructure.
Utilisez donc la commande bash nommée split :
split -l 50 /root/zmmboxmove/all_account_store1
split -l 50 /root/zmmboxmove/all_account_store1 |
Attention aux coupures SSH !
Si votre serveur est inaccessible en SSH pour diverses raisons, le script sera interrompu. Lancez le dans un Screen ! Il continue de faire son chemin jusque la fin.
Souci de clé SSH ?
Si une erreur SSH s’affiche lors de la migration, mettre a jour les clefs :
Suivre l’avancée de la migration
Ayé lancé ??
Suivez l’avancement en direct via la commande :
Déplacement terminé ?
C’est l’heure de purger les anciennes boites ! Toujours dans un screen par précaution 😉