URL: https://linuxfr.org/news/installation-de-ceph-jewel-sous-debian-jessie Title: Installation de Ceph Jewel sous Debian Jessie Authors: wysman Davy Defaud, palm123, Pierre Jarillon, titinux, Florent Zara, RyDroid et Rafael Date: 2016年05月20日T22:06:26+02:00 License: CC By-SA Tags: debian Score: 33 Ceph est un logiciel libre de stockage distribué, comme GlusterFS par exemple. Il permet de créer un espace de stockage unifié entre plusieurs serveurs qui utilisera les ressources de stockage de chacun de ceux‐ci. L’objectif du projet est de rendre l’espace de stockage sans aucun point de défaillance unique. Typiquement, l’espace de stockage doit survivre à la perte d’un serveur. Ceph est distribué sous [licence LGPL v2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html). Cette dépêche est un retour d’expérience sur son installation sous Debian. ---- [Site officiel de Ceph](http://ceph.com/) [Liste des versions de Ceph](http://docs.ceph.com/docs/master/releases/) [Guide de déploiement manuel](http://docs.ceph.com/docs/master/install/manual-deployment/) [Un glossaire sur Ceph](http://docs.ceph.com/docs/master/glossary/) [Architecture de Ceph](http://docs.ceph.com/docs/master/architecture/) [Code source ](https://github.com/ceph/ceph) ---- Introduction ============ Actuellement, j’utilise [GlusterFS](https://fr.wikipedia.org/wiki/GlusterFS) et je souhaite évaluer Ceph pour mes prochains déploiements. J’ai testé l’outil officiel de déploiement automatique de Ceph, nommé `ceph-deploy`. L’outil a pour objectif de simplifier au maximum l’installation et la maintenance d’une grappe de serveurs Ceph (_cluster_), toutefois il n’a pas fonctionné sur mes serveurs alors que j’avais bien suivi tous les prérequis. De mon point de vue, l’utilisation de cet outil ne permet pas de comprendre comment Ceph fonctionne, et laisse donc l’utilisateur bien seul en cas de problème. Des problèmes de sécurité sont aussi à prévoir, car son fonctionnement nécessite un accès SSH vers tous les serveurs de la grappe, avec un compte possédant un droit d’exécution de toutes les commandes avec `sudo` sans mot de passe. Bref, vos clefs SSH ont intérêt à être très bien protégées. La documentation est rédigée avec des notes pour CentOS et RHEL, mais très peu pour Debian. Les différences sont principalement dans la gestion des services par le système d’initialisation (upstart, systemd, SysV...). Afin de faciliter la découverte de Ceph à d’autres personnes sous Debian, j’ai décidé de partager mes notes techniques en seconde partie. Ces notes permettent de mettre en place RADOS. RADOS est composé de deux parties : les moniteurs (_monitor_) qui synchronisent les serveurs, et les unités de stockage (OSD). C’est le déploiement minimum pour faire fonctionner Ceph. ![stack](http://docs.ceph.com/docs/master/_images/stack.png) Prérequis ========== - 3 serveurs sous Debian _Jessie_, avec accès administrateur ; - `ssh-server` et une authentification par clef publiques pour ne pas perdre son temps ; - NTP, la communication des moniteurs entre eux nécessite une faible dérive du temps entre les serveurs ; - _hostname_ et `/etc/hosts` ; Ceph utilise les noms d’hôtes courts `hostname -s`, il est donc important que ces noms soient résolvables par un serveur DNS et/ou présents dans votre fichier `/etc/hosts`. Installation ============ La version de Ceph utilisée est _Jewel_ (10.2 LTS). Cette version de Ceph est sortie en avril 2016 et n’est donc pas dans les dépôts de Debian. Toutefois, Ceph propose des dépôts afin de faciliter l’installation. ```bash $ wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add - $ echo deb http://download.ceph.com/debian-jewel/ $(lsb_release -sc) main> /etc/apt/sources.list.d/ceph.list $ apt-get update ``` L’installation du paquet _ceph_ permet de récupérer tous les outils. En revanche, aucune configuration ne sera créée et aucun service ne sera démarré. Sur chaque serveur : ```bash $ apt-get install ceph ``` Les moniteurs (monitor) ======================= C’est la première étape obligatoire lors du déploiement d’une grappe de serveurs Ceph. Ils permettent de garder les serveurs synchronisés entre eux. Les moniteurs forment un _quorum_ pour être sûr de ne pas être isolés, il est donc obligatoire d’en avoir un nombre impair. Configuration initiale ---------------------- Pour initialiser nos serveurs, nous avons besoin de trois fichiers présents sur chacun des serveur : - `/etc/ceph/ceph.conf` ; - `/etc/ceph/ceph.client.admin.keyring` ; - `/tmp/ceph.mon.keyring`. ### /etc/ceph/ceph.conf ```ini [global] fsid = 70036746-1cee-11e6-922f-0cc47ab35ede public network = 10.10.0.0/24 cluster network = 10.10.0.0/24 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx mon_initial_members = srva, srvb, srvc osd journal size = 1024 filestore xattr use omap = true osd pool default size = 2 osd pool default min size = 1 osd pool default pg num = 333 osd pool default pgp num = 333 osd crush chooseleaf type = 1 [mon.srva] host = srva mon_addr = 10.10.0.1:6789 [mon.srvb] host = srvb mon_addr = 10.10.0.2:6789 [mon.srvc] host = srvc mon_addr = 10.10.0.3:6789 ``` ### /etc/ceph/ceph.client.admin.keyring On va créer une clef administrateur qui permettra de communiquer avec les moniteurs pour exécuter des commandes avec l’outil en ligne de commande `ceph` : ```bash $ ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' $ cat /etc/ceph/ceph.client.admin.keyring ``` ```ini [client.admin] key = ZWA/D6dqLS0ev2LbhEpQ5MDXih3DiUv0/k5WgQ== auid = 0 caps mds = "allow" caps mon = "allow *" caps osd = "allow *" ``` ### /tmp/ceph.mon.keyring On va créer une clef commune à tous les moniteurs de notre grappe de serveurs pour qu’ils puissent communiquer entre eux. Puis on ajoute notre clef administrateur dans le trousseau de clefs, afin de pouvoir communiquer avec un moniteur. ```bash $ ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' $ ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring $ cat /tmp/ceph.mon.keyring ``` ```ini [mon.] key = P0qAdtmkdvpCmwONXxRQNmXQrT2+wDymZMh8gQ== caps mon = "allow *" [client.admin] key = ZWA/D6dqLS0ev2LbhEpQ5MDXih3DiUv0/k5WgQ== auid = 0 caps mds = "allow" caps mon = "allow *" caps osd = "allow *" ``` Préparation des moniteurs ------------------------- Cette étape consiste à créer un environnement neuf pour les moniteurs de notre grappe de serveurs Ceph. Cette opération doit être faite sur chacun des serveurs. ```bash $ ceph-mon --mkfs -i $(hostname -s) --keyring /tmp/ceph.mon.keyring $ touch /var/lib/ceph/mon/ceph-$(hostname -s)/done $ chown -R ceph:ceph /var/lib/ceph $ rm /tmp/ceph.mon.keyring ``` Démarrage des moniteurs ----------------------- Le paquet Ceph fournit une cible systemd (_target_) qui permet de démarrer tous les services d’un coup. Cela permettra de redémarrer tous les services au prochain démarrage. ```bash $ systemctl enable ceph.target $ systemctl start ceph.target ``` On démarre le moniteur, l’opération doit être répétée sur chaque serveur. ```bash $ systemctl enable ceph-mon@$(hostname -s) $ systemctl start ceph-mon@$(hostname -s) $ systemctl status ceph-mon@$(hostname -s).service くろまる ceph-mon@srva.service - Ceph cluster monitor daemon Loaded: loaded (/lib/systemd/system/ceph-mon@.service; enabled) Active: active (running) since Fri 2016年05月20日 23:08:05 CEST; 7min ago Main PID: 2836 (ceph-mon) CGroup: /system.slice/system-ceph\x2dmon.slice/ceph-mon@srva.service └─2836 /usr/bin/ceph-mon -f --cluster ceph --id srva --setuser ceph --setgroup ceph ``` Obtenir le statut de la grappe de serveurs Ceph --------------------------------- Il est possible d‘obtenir le statut de la grappe de serveurs Ceph, depuis n’importe quel des trois serveurs, et en tant que simple utilisateur. ```bash $ ceph -s cluster 70036746-1cee-11e6-922f-0cc47ab35ede health HEALTH_ERR no osds monmap e1: 3 mons at {srva=10.10.0.1:6789/0,srvb=10.10.0.2:6789/0,srvc=10.10.0.3:6789/0} election epoch 6, quorum 0,1,2 srv03a,srv03b,srv03c osdmap e1: 0 osds: 0 up, 0 in flags sortbitwise pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects 0 kB used, 0 kB / 0 kB avail 64 creating ``` On peut voir que notre grappe de serveurs est en mode « HEALTH_ERR ». C’est normal, car il ne possède encore aucune unité de stockage (OSD). Les unités de stockage peuvent être rajoutées seulement une fois que les moniteurs fonctionnent correctement. La commande suivante permet d’obtenir le statut des moniteurs dans un format [JSON](https://fr.wikipedia.org/wiki/JavaScript_Object_Notation "JavaScript Object Notation") : ```bash $ ceph mon_status ``` ```json { "name": "srvc", "rank": 2, "state": "peon", "election_epoch": 6, "quorum": [ 0, 1, 2 ], "outside_quorum": [], "extra_probe_peers": [], "sync_provider": [], "monmap": { "epoch": 1, "fsid": "70036746-1cee-11e6-922f-0cc47ab35ede", "modified": "2016-05-20 23:08:04.854999", "created": "2016-05-20 23:08:04.854999", "mons": [ { "rank": 0, "name": "srva", "addr": "10.10.0.1:6789/0" }, { "rank": 1, "name": "srvb", "addr": "10.10.0.2:6789/0" }, { "rank": 2, "name": "srvc", "addr": "10.10.0.3:6789/0" } ] } } ``` La prochaine étape est de rajouter de l’espace de stockage à notre grappe de serveurs. Le stockage (OSD) ================= La partie suivante explique comment ajouter une unité de stockage Ceph (OSD) à la grappe de serveurs. Elle doit donc être répétée autant de fois qu’il y a de serveurs à ajouter. Il est possible de faire fonctionner plusieurs `osd` sur le même serveur afin d’ajouter plusieurs disques durs. Préparation du stockage ----------------------- On génère un `uuid` pour identifier notre nouvelle instance d’un OSD. Puis, on demande à Ceph de nous attribuer un index pour cet OSD. Dans notre cas, l’index est `0`, car c’est le premier OSD que l’on crée. ```bash $ uuid e367d468-1e80-11e6-9681-0cc47ab35ede $ ceph osd create e367d468-1e80-11e6-9681-0cc47ab35ede 0 ``` On crée le dossier qui servira de point de montage à notre partition, qui contient le numéro d’index de l’OSD : ```bash $ mkdir /var/lib/ceph/osd/ceph-0 ``` On monte notre partition, pensez à ajouter une ligne dans votre ficher `fstab` afin de le remonter automatiquement au prochain démarrage du serveur : ```bash $ mount /dev/sda2 /var/lib/ceph/osd/ceph-0 ``` On génère une clef dédiée à cet OSD. ```bash $ ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring added key for osd.0 ``` On ajoute notre serveur, puis notre OSD dans la `crush map`. Cela permet de décrire l’emplacement des données (datacenter, salle, couloir, baie, serveur), afin d’optimiser la réplication des données : ```bash $ ceph --cluster ceph osd crush add-bucket srva host added bucket srva type host to crush map $ ceph osd crush move srva root=default moved item id -1 name 'srva' to location {root=default} in crush map $ ceph --cluster ceph osd crush add osd.0 1.0 host=srva add item id 0 name 'osd.0' weight 1 at location {host=srva} to crush map ``` On s’assure que tous les fichiers que l’on vient de créer appartiennent bien à Ceph : ```bash $ chown -R ceph:ceph /var/lib/ceph ``` Démarrage du stockage --------------------- ```bash $ systemctl enable ceph-osd@0.service $ systemctl start ceph-osd@0.service $ systemctl status ceph-osd@0.service ``` On peut à nouveau utiliser la commande ceph pour nous afficher le statut de notre grappe de serveurs. La ligne contenant `osdmap` contient le nombre d’`osd` et leur statut : ```bash $ ceph -s cluster 70036746-1cee-11e6-922f-0cc47ab35ede health HEALTH_OK monmap e1: 3 mons at {srv03a=10.10.0.1:6789/0,srv03b=10.10.0.2:6789/0,srv03c=10.10.0.3:6789/0} election epoch 6, quorum 0,1,2 srva,srvb,srvc osdmap e22: 3 osds: 3 up, 3 in flags sortbitwise pgmap v51: 64 pgs, 1 pools, 0 bytes data, 0 objects 3172 MB used, 568 GB / 571 GB avail 64 active+clean ``` Comment utiliser ma grappe de serveurs ? ======================================== Il y a quatre possibilités et elle sont expliquées dans la documentation d’architecture de Ceph. Le schéma d’introduction en est un extrait. Chaque solution possède des avantages et des inconvénients, le choix dépendra de vos besoins. Pour ma part, je vais sûrement mettre en place `CEPH FS`. Je vous ferai un autre retour d’expérience à cette occasion. Merci, aux relecteurs.

AltStyle によって変換されたページ (->オリジナル) /