Cassandra Cluster Manager

de | 2016-10-23

Présentation

Travailler sur un système distribué complique tout : pas moyen de se construire une discrète instance sur un coin de disque, il faut configurer le réseau correctement, il y a des risques d’écraser des fichiers de même nom si on tente de faire démarrer plusieurs noeuds au même endroit.

Bref, c’est faisable mais c’est compliqué. Or il existe des gens qui ont pris le temps de nous simplifier la tâche.

Le thème d’aujourd’hui sera : comment se construire un cluster de 3 noeuds Cassandra, dans la version de son choix, grâce au Cassandra Cluster Manager.

EDIT : avec des mois de recul, quelques précisions :

Si vous êtes derrière un proxy, préparez-vous à lutter. « pip » accepte les variables d’environnement « http_proxy=… » et « https_proxy ». Par contre, pour « ant », c’est pas clair pour nous. Les variables d’environnement Java export ANT_OPTS= »-Dhttp.proxyHost=proxy.nom -Dhttp.proxyPort=xxxx » que l’on nous conseillait partout n’ont pas eu d’effet. Seule la configuration via « network-manager » et le paramètre « -autoproxy » ont permis de récupérer les dépendances et de compiler Cassandra. Il est douteux que ce soit la bonne la méthode.

Mais elle fonctionne…

Installation

Si votre ordinateur est directement connecté à Internet, que vous êtes sous Linux (What else ?) et que les pré-requis soient installés, l’installation se fait en quelques minutes.

Dans ce cas idéal, trois mots suffisent :

Ou encore (à peine plus compliqué) :

 pip install ccm 

git clone https://github.com/pcmanus/ccm.git

cd ccm.git

ccm create -v 3.7 -n 3 nom_voulu_pour_le_cluster --vnodes

ccm ira chercher la version directement sur le git de Cassandra, compilera et vous le livrera clé en main.

Vous vous en doutez, c’est le cas idéal couvert par la documentation et il ne nous intéresse pas. Nous, ce que nous aimons, ce sont les cas tordus, ceux qui se présentent lorsque vous êtes au travail, derrière un proxy. Mais nous resterons dans le cas où Linux est le système d’exploitation. Il y a une version pour Mac mais nous ne l’avons pas utilisé.

Ceci étant dit, au travail : le but est d’obtenir une installation de Cassandra 3, en passant au travers d’un proxy et en installant les pre-requis.

Clonage du Git :

Déplacez vous dans le répertoire (<sources_dir>) où vous allez récupérer les fichiers puis :


git config --global http.proxy http://proxy_name:proxy_port;
git clone https://github.com/pcmanus/ccm.git

Ensuite, l’installation en elle-même :


cd sources_dir
sudo ./setup.py install
pip install (--proxy=proxy_name:proxy_port) cql PyYAML

A partir de là, un « which ccm » doit vous retourner le chemin vers la commande.

Création du cluster :

Il est fréquent que CCM soit bloqué par le proxy et n’arrive pas à télécharger les sources. Ci-dessous, la manière de lui indiquer un répertoire les contenant :

  1. Téléchargez la source depuis les dépôts Apache : https://www.apache.org/dist/cassandra/3.7/ . Attention à bien prendre le « src » et pas le « bin ». Enfin, prenez les deux. Ils serviront.
  2. Extrayez la version « src » dans un endroit commode.
  3. cd l_endroit_commode puis « ant build -autoproxy » et patientez quelques minutes.
  4. ccm create –install-dir=/chemin/vers/sources/apache-cassandra-X.Y.Z-src  <nom_cluster>
    Exemple :

    ccm create --install-dir=/home/src/apache-cassandra-3.7-src --nodes=3 --vnodes cass37

« –vnodes » : pour les modernes virtual tokens. Nous vous déconseillons d’utiliser les Tokens fixes sauf besoin spécifique (où si vous êtes historien).

A partir de là, la commande « ccm list » doit vous montrer :


$ ccm list
*cass37

Prenez une pause : vous avez fait le plus long.

Démonstration

Dans cette partie, nous allons vous montrer un aperçu des possibilités de cet outils. Elles sont aussi riches que si vous aviez un cluster physique. Il faut juste que votre machine supporte la charge.

Démarrage : « ccm start ». Démarre le cluster par défaut.

Arrêt : « ccm stop ». Logique.

Liste des clusters : « ccm list ». « * » est le cluster par défaut.

Création : « ccm create ». Cf. exemple de l’installation. Vous pouvez en créer autant que vous voulez tant que vous avez de la place dans votre $HOME. En effet, les différents fichiers des noeuds y sont stockés. A part ce détail, l’arborescence Cassandra est identique à une installation physique.

Suppression : « ccm drop ». Supprime le cluster par défaut. Sinon, indiquez le nom du cluster visé.

Changer le cluster par défaut : « ccm switch <nom_cluster> ».

Information générale : « ccm status ». Affiche le statut des noeuds.

Connexion cliente : « ccm cqlsh <nom_noeud> ». Vous pouvez aussi vous connecter directement si la commande est dans votre $PATH. D’où l’utilité des binaires pré-compilés téléchargés à l’étape d’installation : une extraction, un « export PATH=… » et vous êtes paré.

 

Conclusion

À la manière d’un MySQL Sandbox (qui fera l’objet d’un futur article), Cassandra Cluster Manager est un outil simple et pratique. Avec un peu d’habitude, vous pouvez tester toutes les commandes dans des conditions distribuées, là où se cache les vrais dangers.

Avant de découvrir cet outil, nous avions une procédure d’installation de plusieurs noeuds sur une même machine. CCM a apporté une souplesse telle que nous n’avons jamais eu besoin de revenir à l’ancienne méthode.

Une remarque pour conclure : Cassandra peut être installée et lancée en mode « standalone » (sur un noeud unique). C’est simple comme extraire une archive, modifier le fichier de configuration (cassandra.yaml) pour changer quelques paramètres et taper « bin/cassandra ». Cependant, à part pour valider une syntaxe, cela présente un intérêt limité : le seul test valable est en distribué sur un ensemble de machines.

Profitez de CCM : c’est un cadeau de valeur offert par les développeurs.

Des problèmes ? des questions ? Exprimez-vous ! Les commentaires sont ouverts. Coquilles et fautes de grammaires sont notre lot quotidien : signalez-les nous à m.capello@dbsqware.com !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*