Ceph

Présentation

  • Block : utilisation de RBD
  • Objet
  • File system : considéré stable mais pas production ready, système de fichier POSIX

Système de fichier de Ceph : XFS, BTRFS ou ext4.

Composants de RADOS

  • OSD : écrivent sur les disques. Un OSD = un disque
  • MON : surveille l’état du cluster (pas besoin d’en avoir beaucoup)

Optionnel :

  • MDS : serveur de métadata, nécessaire pour CephFS. On ne peut en déployer qu’un dans le cluster.

Attention : la perte d’un disque implique la répartition des PG (groupe de blocks) sur tous les OSD restant dans le cluster.

Pools et placement groups

Pool : groupe logique d’objets

Placement group (PG) : groupe d’objets, c’est ça qui est répliqué et associé à un ensemble d’OSD.

Calcul du nombre de PG : pgcalc

Matériel

  • OSD : 500 Mo + 2 Go de RAM par To de stockage
  • MON et MDS : 1 Go de RAM par processus
  • Faire 2 réseaux : un public pour consommer Ceph et un autre utilisé pour le stockage

Journal

Les données sont d’abord écrites sur le journal puis sur l’OSD. Deux modes sont disponibles :

  • Collocation : le journal est écrit sur une partition et les données sont sur les OSD
  • L’autre mode : utiliser un disque dédié au journal (SSD), 5 journaux (= 5 partitions) par SSD.

Cache tiering

Le cache tiering permet d’avoir des pools de disque SSD dédiés au cache.

Deux modes :

  • Writeback : on écrit d’abord sur un SSD d’abord puis on écrit sur les OSD qui ont un stockage disque plus lent. Dans le cas d’une lecture de données, la données est copié sur le pool de cache. Les données sont supprimées par un agent si elles ne sont plus utilisé.
  • Read-Only : le pool de cache est utilisé uniquement lors de la lecture des données.

Maintenance

Remplacement d’un disque

ceph-deploy disk zap ceph1:sda        # Prépare le disque pour Ceph
ceph osd auth list                    # Liste les clés d'authentification
ceph auth del osd.0                   # Supprime l'authentification
ceph osd rm osd.0                     # Supprime l'OSD
ceph osd tree                         # Liste les OSD
ceph osd cruch rm osd.0               # Supprime l'OSD de la crush map
ceph-deploy osd prepare ceph1:sda     # Redéploie l'OSD sur le disque

Mise en maintenance du cluster

Le mode maintenance permet d’empêcher Ceph de redistribuer les PG en cas de problème sur le cluster. Cette commande agit sur tout le cluster.

ceph osd set noout     # Mise en maintenance du noeud
ceph osd unset noout   # On sort du mode maintenance

Gestion de l’accès à Ceph

Pour créer un fichier de keyring :

ceph-authtool -C -n client.my_user --gen-key /etc/ceph/ceph.client.my_user.keyring

Importer la clé dans Ceph : ceph auth import -i /etc/ceph/ceph.client.my_user.keyring

Lister les pools : rados lspools

Créer un pool : rados mkpool my_pool ou ceph osd pool create my_pool 4

Ajouter les droits sur un utilisateur (attention ça supprime la configuration des ACL existantes) :

ceph auth caps client.my_user mon 'allow r' osd 'allow rw pool=my_pool'

Afficher les volumes d’un pool : rbd -p my_pool list

RADOS gateway

Ce composant permet de mettre à disposition des API Amazon S3 ou Swift.

Création d’un utilisateur :

$ radosgw-admin user create --uid=gnocchi --display-name="Gnocchi"
{
    "user_id": "gnocchi",
    "display_name": "Gnocchi",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [],
    "keys": [
        {
            "user": "gnocchi",
            "access_key": "REBGC723WML2HUCNGZSZ",
            "secret_key": "3Bg8Nk9HAjogNK5qW1hqDSnIIo5LSddySBPvaLIC"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "temp_url_keys": []
}

La partie keys contient les informations de connexion à Amazon S3. Pour ajouter un accès à Swift, il faut enter cette commande :

# radosgw-admin subuser create --uid=gnocchi --subuser=gnocchi:swift --access=full
{
    "user_id": "gnocchi",
    "display_name": "Gnocchi",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [
        {
            "id": "gnocchi:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "gnocchi",
            "access_key": "REBGC723WML2HUCNGZSZ",
            "secret_key": "3Bg8Nk9HAjogNK5qW1hqDSnIIo5LSddySBPvaLIC"
        }
    ],
    "swift_keys": [
        {
            "user": "gnocchi:swift",
            "secret_key": "pxw6Y7Hc3Y6AvaM8g4O1VnEOKAcf9taMudpAMDFJ"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "placement_tags": [],
    "bucket_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "user_quota": {
        "enabled": false,
        "max_size_kb": -1,
        "max_objects": -1
    },
    "temp_url_keys": []
}
  • URL d’authentification Swift : http://10.8.100.12:7480/auth
  • URL de l’API Swift : http://10.8.100.12:7480/swift/v1

Documentation