Outils pour utilisateurs

Outils du site


systeme:ceph

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
systeme:ceph [2017/05/01 16:43] rootsysteme:ceph [2017/05/06 11:10] (Version actuelle) – [Piste de réflexion personnelle] root
Ligne 638: Ligne 638:
 -4 0.00490     host osd3                                    -4 0.00490     host osd3                                   
  2 0.00490         osd.2      up  1.00000          1.00000   2 0.00490         osd.2      up  1.00000          1.00000 
 +</xtermrtf>
 +
 +== ceph osd scrub ==
 +Dit scrub légé (programmé tous les jours). Permet de vérifier l'intégrité des fichiers via la taille des objets et leurs attributs :
 +</xtermrtf>
 +$ ceph osd scrub 1
 +osd.1 instructed to scrub
 </xtermrtf> </xtermrtf>
  
 == ceph osd deep-scrub == == ceph osd deep-scrub ==
-Vérifie les sum des fichiers sur un OSD donné :+Scrub programmé une fois par semaine. Permet de vérifier l'intégralité des fichiers en calculant les checksums :
 </xtermrtf> </xtermrtf>
 $ ceph osd deep-scrub 1 $ ceph osd deep-scrub 1
Ligne 679: Ligne 686:
 $ ceph osd pool create gigix-data 128 $ ceph osd pool create gigix-data 128
 </xtermrtf> </xtermrtf>
 +
 +**Attention :** Par défaut c'est un pool répliqué. Si l'on souhaite faire un pool de type **erasure** (c'est à dire de type raid pour consommer moins d'espace disque), il faut alors le préciser (il est possible de voir le type de pool avec la commande **$ ceph osd pool ls detail**. **Attention à priori seulement compatible avec rgw !**)
 +<note>
 +
 +**Attention :** lors de la création d'un nouveau pool si on ne précise pas le profile à ceph il prendra le profile par défaut avec **k=2** (nombre de morceaux) et **m=1** (nombre de copies). **Il est impossible de changer ces valeurs une fois le pool créé !**
 +<xtermrtf>
 +$ ceph osd erasure-code-profile ls
 +default
 +
 +$ ceph osd erasure-code-profile get default
 +k=2
 +m=1
 +plugin=jerasure
 +technique=reed_sol_van
 +</xtermrtf>
 +</note>
 +
 +Pour créer un nouveau profile, par exemple avec **k=10** et **m=2** (cela signifie que l'on va écrire 12 objets => 10+2) :
 +<xtermrtf>
 +$ ceph osd erasure-code-profile set gigix-erasure k=10 m=2 ruleset-failure-domain=room
 +$ ceph osd erasure-code-profile get gigix-erasure 
 +jerasure-per-chunk-alignment=false
 +k=10
 +m=2
 +plugin=jerasure
 +ruleset-failure-domain=room
 +ruleset-root=default
 +technique=reed_sol_van
 +w=8
 +</xtermrtf>
 +
 +Créons maintenant notre pool erasure :
 +<xtermrtf>
 +$ ceph osd pool create gigix-erasure 128 128 erasure gigix-erasure
 +</xtermrtf>
 +
 +<note>
 +La taille consommé par le pool est : **nOSD * k / (k+m) * OSD Size**.
 +</note>
  
   * Afficher la valeur d'une clé d'un pool :   * Afficher la valeur d'une clé d'un pool :
Ligne 700: Ligne 746:
  
 <xtermrtf> <xtermrtf>
-$ ceph osd pool set-quota data max_objects 10000+$ ceph osd pool set-quota cephfs_data max_bytes 10000000 
 +set-quota max_bytes = 10000000 for pool cephfs_data 
 + 
 +$ ceph osd pool get-quota cephfs_data 
 +quotas for pool 'cephfs_data': 
 +  max objects: N/A 
 +  max bytes  : 9765kB 
 +   
 +$ dd if=/dev/zero of=gigix-object-file bs=200M count=1 
 +1+0 enregistrements lus 
 +1+0 enregistrements écrits 
 +209715200 bytes (210 MB, 200 MiB) copied, 0,353353 s, 594 MB/s 
 + 
 +$ rados -p cephfs_data put gigix-object gigix-object-file 
 +2017-05-01 19:33:57.073792 7fd005812a40  0 client.435355.objecter  FULL, paused modify 0x55cdbb0fdcb0 tid 0
 </xtermrtf> </xtermrtf>
  
Ligne 731: Ligne 791:
   * Statistiques des pools :   * Statistiques des pools :
 <xtermrtf> <xtermrtf>
-ceph osd pool stats+ceph osd pool stats
 pool rbd id 0 pool rbd id 0
   nothing is going on   nothing is going on
Ligne 1204: Ligne 1264:
  
 ==== Procédures ==== ==== Procédures ====
 +=== Installer ISCSI GW ===
 +Exemple avec 2 gateway ISCSI.
 +
 +  * On crée une image de 3G sur le pool **cephfs_data** :
 +<xtermrtf>
 +$ rbd create cephfs_data/gigix-iscsi -s 3G
 +</xtermrtf>
 +
 +<note>
 +Toutes les commandes ci-dessous sont à faire sur les 2 serveurs.
 +</note>
 +
 +  * On installe les paquets :
 +<xtermrtf>
 +$ zypper in -t pattern ceph_iscsi
 +</xtermrtf>
 +
 +  * On active le service au boot pour générer la config :
 +<xtermrtf>
 +$ systemctl enable lrbd.service
 +</xtermrtf>
 +
 +  * On édite la config avec la config **lrbd -e** :
 +<xtermrtf>
 +{
 +  "auth": [
 +    {
 +      "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi",
 +      "authentication": "none"
 +    }
 +  ],
 +  "targets": [
 +    {
 +      "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi",
 +      "hosts": [
 +        {
 +          "host": "osd1",
 +          "portal": "portal-56"
 +        },
 +        {
 +          "host": "osd3",
 +          "portal": "portal-66"
 +        }
 +      ]
 +    }
 +  ],
 +  "portals": [
 +    {
 +      "name": "portal-56",
 +      "addresses": [
 +        "192.168.122.11"
 +      ]
 +    },
 +    {
 +      "name": "portal-66",
 +      "addresses": [
 +        "192.168.122.13"
 +      ]
 +    }
 +  ],
 +  "pools": [
 +    {
 +      "pool": "cephfs_data",
 +      "gateways": [
 +        {
 +          "target": "iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi",
 +          "tpg": [
 +            {
 +              "image": "gigix-iscsi"
 +            }
 +          ]
 +        }
 +      ]
 +    }
 +  ]
 +}
 +</xtermrtf>
 +
 +  * On applique la config :
 +<xtermrtf>
 +$ lrbd
 +rbd -p cephfs_data --name client.admin map gigix-iscsi
 +/dev/rbd0
 +targetcli /backstores/rbd create name=cephfs_data-gigix-iscsi dev=/dev/rbd/cephfs_data/gigix-iscsi
 +Created RBD storage object cephfs_data-gigix-iscsi using /dev/rbd/cephfs_data/gigix-iscsi.
 +targetcli /iscsi create iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi
 +Created target iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi.
 +Selected TPG Tag 1.
 +Created TPG 1.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi create 2
 +Created TPG 2.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg2 disable
 +The TPG has been disabled.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg1 disable
 +The TPG has been disabled.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg1/luns create /backstores/rbd/cephfs_data-gigix-iscsi
 +Selected LUN 0.
 +Created LUN 0.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg2/luns create /backstores/rbd/cephfs_data-gigix-iscsi
 +Selected LUN 0.
 +Created LUN 0.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg1/portals create 192.168.122.11
 +Using default IP port 3260
 +IP address 192.168.122.11 does not exist on this host.
 +Created network portal 192.168.122.11:3260.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg2/portals create 192.168.122.13
 +Using default IP port 3260
 +Created network portal 192.168.122.13:3260.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg2 set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1
 +Parameter authentication is now '0'.
 +Parameter demo_mode_write_protect is now '0'.
 +Parameter generate_node_acls is now '1'.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg1 set attribute authentication=0 demo_mode_write_protect=0 generate_node_acls=1
 +Parameter authentication is now '0'.
 +Parameter demo_mode_write_protect is now '0'.
 +Parameter generate_node_acls is now '1'.
 +targetcli /iscsi/iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi/tpg2 enable
 +The TPG has been enabled.
 +</xtermrtf>
 +
 +ou 
 +
 +<xtermrtf>
 +$ systemctl start lrbd
 +</xtermrtf>
 +
 +  * On vérifie :
 +<xtermrtf>
 +$ targetcli ls
 +o- / ......................................................................................................................... [...]
 +  o- backstores .............................................................................................................. [...]
 +  | o- fileio ................................................................................................... [0 Storage Object]
 +  | o- iblock ................................................................................................... [0 Storage Object]
 +  | o- pscsi .................................................................................................... [0 Storage Object]
 +  | o- rbd ...................................................................................................... [1 Storage Object]
 +  | | o- cephfs_data-gigix-iscsi ...................................................... [/dev/rbd/cephfs_data/gigix-iscsi activated]
 +  | o- rd_mcp ................................................................................................... [0 Storage Object]
 +  o- ib_srpt ........................................................................................................... [0 Targets]
 +  o- iscsi .............................................................................................................. [1 Target]
 +  | o- iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi .................................................................. [2 TPGs]
 +  |   o- tpg1 ........................................................................................................... [disabled]
 +  |   | o- acls ........................................................................................................... [0 ACLs]
 +  |   | o- luns ............................................................................................................ [1 LUN]
 +  |   | | o- lun0 ................................................. [rbd/cephfs_data-gigix-iscsi (/dev/rbd/cephfs_data/gigix-iscsi)]
 +  |   | o- portals ...................................................................................................... [1 Portal]
 +  |     o- 192.168.122.11:3260 ............................................................................... [OK, iser disabled]
 +  |   o- tpg2 ............................................................................................................ [enabled]
 +  |     o- acls ........................................................................................................... [0 ACLs]
 +  |     o- luns ............................................................................................................ [1 LUN]
 +  |     | o- lun0 ................................................. [rbd/cephfs_data-gigix-iscsi (/dev/rbd/cephfs_data/gigix-iscsi)]
 +  |     o- portals ...................................................................................................... [1 Portal]
 +  |       o- 192.168.122.13:3260 ............................................................................... [OK, iser disabled]
 +  o- loopback .......................................................................................................... [0 Targets]
 +  o- qla2xxx ........................................................................................................... [0 Targets]
 +  o- tcm_fc ............................................................................................................ [0 Targets]
 +  o- vhost ............................................................................................................. [0 Targets]
 +</xtermrtf>
 +
 +<note>
 +Maintenant on passe à la partie cliente.
 +</note>
 +
 +  * On vérifie que l'on voit bien les luns :
 +<xtermrtf>
 +$ iscsiadm -m discovery -t sendtargets -p 192.168.122.11
 +192.168.122.11:3260,1 iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi
 +192.168.122.13:3260,2 iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi
 +</xtermrtf>
 +
 +<xtermrtf>
 +$ iscsiadm -m node -p 192.168.122.11 --login
 +Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi, portal: 192.168.122.11,3260] (multiple)
 +Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi, portal: 192.168.122.11,3260] successful.
 +
 +$ iscsiadm -m node -p 192.168.122.13 --login
 +Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi, portal: 192.168.122.13,3260] (multiple)
 +Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi.x86:gigix-iscsi, portal: 192.168.122.13,3260] successful.
 +</xtermrtf>
 +
 +  * On liste les devices :
 +<xtermrtf>
 +$ lsscsi -s
 +[0:0:0:0]    cd/dvd  QEMU     QEMU DVD-ROM     2.5+  /dev/sr0        -
 +[2:0:0:0]    disk    SUSE     RBD              4.0   /dev/sda   3.22GB
 +[3:0:0:0]    disk    SUSE     RBD              4.0   /dev/sdb   3.22GB
 +</xtermrtf>
 +
 +  * Editer le fichier ''/etc/multipath.conf'' :
 +<code data multipath.conf>
 +defaults {
 +  user_friendly_names yes
 +}
 +
 +devices {
 +  device {
 +    vendor "(LIO-ORG|SUSE)"
 +    product "RBD"
 +    path_grouping_policy "multibus"
 +    path_checker "tur"
 +    features "0"
 +    hardware_handler "1 alua"
 +    prio "alua"
 +    failback "immediate"
 +    rr_weight "uniform"
 +    no_path_retry 12
 +    rr_min_io 100
 +  }
 +}
 +</code>
 +
 +  * On liste les paths :
 +<xtermrtf>
 +$ multipath -ll
 +mpatha (3600140571dc15dc9fa13437ae8840470) dm-2 SUSE    ,RBD             
 +size=3.0G features='1 queue_if_no_path' hwhandler='1 alua' wp=rw
 +`-+- policy='service-time 0' prio=50 status=active
 +  |- 2:0:0:0 sda 8:0  active ready running
 +  `- 3:0:0:0 sdb 8:16 active ready running
 +</xtermrtf>
 +
 +  * On créer la table des partitions :
 +<xtermrtf>
 +$ parted /dev/mapper/mpatha mklabel gpt mkpart primary xfs 0% 100%
 +
 +$ parted /dev/mapper/mpatha print              
 +Modèle: Mappeur de périphériques Linux (multipath) (dm)
 +Disque /dev/mapper/mpatha : 3221MB
 +Taille des secteurs (logiques/physiques): 512B/512B
 +Table de partitions : gpt
 +Disk Flags: 
 +
 +Numéro  Début   Fin     Taille  Système de fichiers  Nom      Fanions
 +      4194kB  3217MB  3213MB                       primary
 +</xtermrtf>
 +
 +  * On crée le FS xfs :
 +<xtermrtf>
 +$ mkfs.xfs /dev/mapper/mpatha1
 +meta-data=/dev/mapper/mpatha1    isize=512    agcount=9, agsize=97280 blks
 +                               sectsz=512   attr=2, projid32bit=1
 +                               crc=1        finobt=1, sparse=0, rmapbt=0, reflink=0
 +data                           bsize=4096   blocks=784384, imaxpct=25
 +                               sunit=1024   swidth=1024 blks
 +naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
 +log      =internal log           bsize=4096   blocks=2560, version=2
 +                               sectsz=512   sunit=8 blks, lazy-count=1
 +realtime =none                   extsz=4096   blocks=0, rtextents=0
 +</xtermrtf>
 +
 === Modifier la crush map === === Modifier la crush map ===
 Sauvegarde la crush map decompilée : Sauvegarde la crush map decompilée :
Ligne 1323: Ligne 1632:
 </xtermrtf> </xtermrtf>
 6. Vérifier que le cluster est dans l'état **HEALTH_OK** 6. Vérifier que le cluster est dans l'état **HEALTH_OK**
 +
 +=== Migration de pool ===
 +Voir : https://ceph.com/geen-categorie/ceph-pool-migration/
 +<xtermrtf>
 +pool=testpool
 +$ ceph osd pool create $pool.new 4096 4096 erasure default
 +$ rados cppool $pool $pool.new
 +$ ceph osd pool rename $pool $pool.old
 +$ ceph osd pool rename $pool.new $pool
 +</xtermrtf>
 +
 +=== Afficher les PG dégradés ===
 +Affiche par pool le status des PGs qui ne sont pas dans un état '**active+clean** :
 +<xtermrtf>
 +$ for pool in $(ceph osd pool ls); do echo -e "\n\n\n========== $pool  ==========" && ceph pg ls-by-pool $pool | egrep -v 'active\+clean'; done
 +</xtermrtf>
 +
 +Affiche par osd le status des PGs qui ne sont pas dans un état **'active+clean** (attention cela affiche les osd ayant un PG secodnaire impacté) :
 +<xtermrtf>
 +$ for osd in $(ceph osd ls); do echo -e "\n\n\n========== osd.$osd  ==========" && ceph pg ls-by-osd $osd | egrep -v 'active\+clean'; done
 +</xtermrtf>
 +
 +ou 
 +
 +<xtermrtf>
 +$ ceph helth detail
 +</xtermrtf>
 +
 +=== Quota CephFS ===
 +== Mettre un quota CephFS ==
 +<xtermrtf>
 +$ setfattr -n ceph.quota.max_bytes -v 100000000 /some/dir     # 100 MB
 +$ setfattr -n ceph.quota.max_files -v 10000 /some/dir         # 10,000 files
 +</xtermrtf>
 +
 +== Voir les quotas Cepfs ==
 +<xtermrtf>
 +$ getfattr -n ceph.quota.max_bytes /some/dir
 +$ getfattr -n ceph.quota.max_files /some/dir
 +</xtermrtf>
 +
 +== Supprimer un quota CephFS ==
 +<xtermrtf>
 +$ setfattr -n ceph.quota.max_bytes -v 0 /some/dir
 +$ setfattr -n ceph.quota.max_files -v 0 /some/dir
 +</xtermrtf>
 +
 +
 +==== Piste de réflexion personnelle ====
 +Piste de réflexion avec serveur disposant de 24 emplacements disques :
 +
 +<note>
 +Plus de journal sur SSD avec BlueStore (tech preview) ? On gagne en disque ?
 +</note>
 +
 +  * Piste HDD :
 +<code>
 +2 OS
 +4 SSD journal
 +16 HDD data (2To) => 32T / Serveur
 +=======
 +22/24 hdd
 +
 +64G RAM ?
 +</code>
 +
 +  * Piste SSD (prix ?):
 +<code>
 +2 OS
 +4 SSD journal
 +18 SSD DATA (1To) ou si pas de journal séparé sur 22 SSD data => entre 18 et 22T / serveur
 +==================
 +24/24 ssd
 +
 +Entre 18 et 22G RAM ?
 +</code>
 +
 +**Pour solution HDD :**
 +  * 16 * 100M ~= 1600M/s (à 2000M/s)
 +  * Solution RDMA infinidand ?
 +  * Il faudrait donc 1 carte dual port 56 Gbps (par exemple Mellanox ConnectX4) ou 2 cartes dual port 10Gbps si moins cher (2 lacp) :
 +    * 1 port pour cluster ceph pour la réplication et rebuid des osd
 +    * 1 port pour le réseau public => les clients (Ethernet ou Infinidand pour clients ?)
 +
 +**Protocol RDMA pour :**
 +  * gagner en latence
 +  * gagner en débit
 +  * gagner en CPU
 +
 +**Tunning :**
 +  * numactl ? 1 osd par cpu (+bind mémoire) => ExecStart=numactl --physcpubind=%i --membind=0 <service ceph> (plus compliqué avec 2 proc. Si 2 proc : pair sur socket pair => Ex : osd.3 sur socket 1 car impair). 2 cpu réservés à l'OS (les 2 derniers => isolcpu) ?
 +  * jumbo frame
 +  * tunning sysctl + udev
 +  * xio (non supporté en production) ? (voir [[https://youtu.be/FzD87qSJee0|Youtube]])
 +  * rdma (https://community.mellanox.com/docs/DOC-2693):
 +<code>
 +  [global]
 +...
 +ms_type=async+rdma
 +ms_async_rdma_device_name=mlx5_0
 +</code>
systeme/ceph.1493657020.txt.gz · Dernière modification : 2017/05/01 16:43 (modification externe)