Mumble server à la fâcheuse particularité d’être instable lors des montés en charges si l’on ne fait pas de modification sur son serveur.
Le problème principal est la consommation de file descriptors qui est très très importante.
Calcul du nombre de file descriptor nécessaires
De base, mumble serveur ne peut utiliser que 1024 file descriptors (ce qui est peu pour une infra assez grosse).
Configuration d’exemple :
Serveurs virtuels : 80
Nombre de client total : 500
Il faut 20 file desciptors par serveur virtuel + 1 file descriptor par client.
Ce qui donne :
(Nombre de serveur virtuel x 20 + Nombre de client total)
(80 x 20 + 500) = 2100
Il vous faudra 2100 file descriptor pour que votre installation soit stable.
Paramétrage des file descriptors sur serveur linux
Vous pouvez modifier le nombre de file descriptors à chaud, mais attention, cette modification n’est pas permanente.
[pastacode lang= »bash » message= »Modification file descriptor » highlight= » » provider= »manual »]
# Modifier la limite de file descriptor à chaud
ulimit -n 8192 # chiffre à modifier selon votre config
[/pastacode]
Pour modifier le nombre de file descriptors utilisable par Mumble serveur et les applications de votre serveur vous devez modifier un fichier de configuration (/etc/security/limits.conf).
[pastacode lang= »bash » message= »Ajout file descriptor » highlight= » » provider= »manual »]
nano /etc/security/limits.conf
# Ajouter ces lignes à la fin du fichier
* hard nofile 8192 # chiffre à modifier selon votre config
* soft nofile 8192
[/pastacode]
Puis vérifiez que votre système à bien prit en compte cette modification.
[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]
$ ulimit -Hn
8192
[/pastacode]
Mumble et les files descriptors !
Entrons dans le vif du sujet. A présent, votre système est près à accueillir des applications consommant le nombre de file descriptor que vous avez paramétrer.
Cependant, mumble server ne sera pas ce cette avis si vous avez téléchargé la version compilé.
Vérification du nombre de file descriptor utilisable par mumble seveur
[pastacode lang= »bash » message= »Vérification des file descriptors Murmur » highlight= » » provider= »manual »]
murmur-static_x86-1.2.8$ ./murmur.x86 -limits
murmur.x86: fd_meta_index_set: fd=1024 is not less then limit max_ifd=1024 or negative. Execution aborted.
[/pastacode]
Et la, c’est le drame, Mumble server vous indique que sa version ne peut pas supporter plus de 1024 file descriptors… (Vous avez le droit de pleurer !).
La solution reste assez simple, vous devez impérativement compiler mumble serveur à partir des sources.
Compilation de mumble server
1) Installation des dépendances
[pastacode lang= »bash » message= » » highlight= » » provider= »manual »]
apt-get build-dep mumble
====> Ou/Or <====
apt-get install build-essential pkg-config qt4-dev-tools libqt4-dev libspeex1 \
libspeex-dev libboost-dev libasound2-dev libssl-dev g++ \
libspeechd-dev libzeroc-ice-dev ice-slice libpulse-dev slice2cpp \
libcap-dev libspeexdsp-dev libprotobuf-dev protobuf-compiler \
libogg-dev libavahi-compat-libdnssd-dev libsndfile1-dev \
libg15daemon-client-dev libxi-dev
[/pastacode]
2) Téléchargement des sources mumble
Téléchargez Mumble depuis son repository git pour avoir la dernière version en date.
[pastacode lang="bash" message="Installation de GIT" highlight="" provider="manual"]
# Installez si vous ne l'avez pas git
apt-get install git
[/pastacode]
[pastacode lang="bash" message="Récupération des sources Mumble" highlight="" provider="manual"]
# Puis, récupérez les sources du projet Mumble
git clone git://github.com/mumble-voip/mumble.git mumble
cd mumble
git submodule init
git submodule update
[/pastacode]
3) Et on compile !
Si vous souhaitez compiler le projet entier (client + serveur) :
[pastacode lang="bash" message="Compilation Mumble (Client + Serveur)" highlight="" provider="manual"]
qmake -recursive main.pro
make
[/pastacode]
Si vous ne souhaitez que compiler la partie serveur de Mumble à savoir Murmur :
[pastacode lang="bash" message="Compilation de Murmur" highlight="" provider="manual"]
qmake -recursive main.pro CONFIG+=no-client
make
[/pastacode]
4) Et la, la magie de la compilation !
Vous trouverez vos fichier binaires :
[pastacode lang="bash" message="Fichier binaires Mumble" highlight="" provider="manual"]
quadeare@quadeare-ubuntu:~/Bureau/mumble/mumble/release$ ls
libcelt0.so libcelt0.so.0.7 libmumble.so.1.3 murmurd
libcelt0.so.0 libcelt0.so.0.7.0 libmumble.so.1.3.0 plugins
libcelt0.so.0.11 libmumble.so libopus.a
libcelt0.so.0.11.0 libmumble.so.1 mumble
[/pastacode]
[pastacode lang="bash" message="Chmod des fichiers binaires" highlight="" provider="manual"]
# Si vous voulez rendre executables vos fichiers binaires
chmod +x murmurd
chmod +x mumble
[/pastacode]
Le fichier "mumble" est le client.
Le fichier "murmurd" est le serveur.
5) Le problème des file descriptors est maintenant résolu !
Maintenant vous pouvez tester l'utilisation des file descriptors par le serveur Mumble.
[pastacode lang="bash" message="Chmod des fichiers binaires" highlight="" provider="manual"]
quadeare@quadeare-ubuntu:~/Bureau/mumble/mumble/release$ ./murmurd -limits
2014-12-08 21:36:02.919 Initializing settings from /home/quadeare/.murmurd/murmur.ini (basepath /home/quadeare/.murmurd)
2014-12-08 21:36:02.930 OpenSSL: OpenSSL 1.0.1f 6 Jan 2014
2014-12-08 21:36:02.930 Running descriptor test.
2014-12-08 21:36:02.930 0 descriptors...
2014-12-08 21:36:02.932 1024 descriptors...
2014-12-08 21:36:02.934 2048 descriptors...
2014-12-08 21:36:02.935 3072 descriptors...
2014-12-08 21:36:02.937 4096 descriptors...
2014-12-08 21:36:02.939 5120 descriptors...
2014-12-08 21:36:02.941 6144 descriptors...
2014-12-08 21:36:02.942 7168 descriptors...
2014-12-08 21:36:02.949 Managed to open 8182 descriptors
2014-12-08 21:36:02.950 0 threads...
2014-12-08 21:36:02.964 512 threads...
2014-12-08 21:36:02.994 Managed to spawn 1022 threads
[/pastacode]
Et la, vous sautez de joie et trouverez votre vieille voisine de palier belle et désirable 😉
C’est un problème avec la version statique du serveur qui nous l’espérons être bientôt corrigé.
(Blame my bad French on Google Translate ☺)
That’s not a problem, google trad is almost perfect 😉
I think the problem is not really technical, but there is a lack of documentation about this problem. I looked for a solution during several days before found a solution !