lunes, 23 de noviembre de 2015

Ceph Quick Tutorial

Instalación Ceph


  • Añadir repositorio

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb http://download.ceph.com/debian-hammer/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

  • Instalar ceph

apt-get update && sudo apt-get install ceph

  • Configurar ntp

Cluster deploy


  • Para generar UUID para el cluster:

uuidgen

Deployar el primer monitor


  • Instalar Ceph
  • Crear archivo /etc/ceph/ceph.conf usando el UUID generado en paso anterior para fsid (asumiendo que el primer nodo que contendrá el monitor es node1 con ip 192.168.0.1):

fsid = {UUID}
mon initial members = node1
mon host = 192.168.0.1

  • Crear cluster keyring

ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

  • Crear admin keyring

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'

  • Añadir el keyring admin al cluster

ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

  • Crear el monitor map

monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
Ejemplo:
monmaptool --create --add node1 192.168.0.1 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /tmp/monmap

  • Crear el directorio para el monitor

mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
Por ejemplo:
mkdir /var/lib/ceph/mon/ceph-node1

  • Poblar el monitor

ceph-mon [--cluster {cluster-name}] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
Por ejemplo:
ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

  • Completar archivo de configuración (/etc/ceph/ceph.conf)

[global]
fsid = {cluster-id}
mon initial members = {hostname}[, {hostname}]
mon host = {ip-address}[, {ip-address}]
public network = {network}[, {network}]
cluster network = {network}[, {network}]
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = {n}
filestore xattr use omap = true
osd pool default size = {n}  # Write an object n times.
osd pool default min size = {n} # Allow writing n copy in a degraded state.
osd pool default pg num = {n}
osd pool default pgp num = {n}
osd crush chooseleaf type = {n}

Por ejemplo:
[global]
fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
mon initial members = node1
mon host = 192.168.0.1
public network = 192.168.0.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
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


  • Marcar configuración finalizada

touch /var/lib/ceph/mon/ceph-node1/done

  • Iniciar el monitor

start ceph-mon id=node1 [cluster={cluster-name}]
Por ejemplo:
start ceph-mon id=ceph01

  • Marcar para inicio automatico

touch /var/lib/ceph/mon/{cluster-name}-{hostname}/upstart
Por ejemplo:
touch /var/lib/ceph/mon/ceph-ceph01/upstart

Deployar monitores adicionales


  • Instalar Ceph
  • Copiar archivos de configuración y admin keyring desde el primer nodo a el/los nuevos monitores:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.conf

  • Crear el directorio para el monitor

mkdir /var/lib/ceph/mon/{cluster-name}-{hostname}
Por ejemplo:
mkdir /var/lib/ceph/mon/ceph-node2

  • Obtener keyring del monitor y monitor map

ceph auth get mon. -o /tmp/keyring
ceph mon getmap -o /tmp/monmap

  • Preparar el directorio del monitor

ceph-mon -i {mon-id} --mkfs --monmap /tmp/monmap --keyring /tmp/keyring
Por ejemplo:
ceph-mon -i ceph02 --mkfs --monmap /tmp/monmap --keyring /tmp/keyring

  • Iniciar el monitor

ceph-mon -i {mon-id} --public-addr {ip:port}
Por ejemplo:
ceph-mon -i ceph02 --public-addr 192.168.0.42:6789

  • Marcar para inicio automatico

touch /var/lib/ceph/mon/{cluster-name}-{hostname}/sysvinit
Por ejemplo:
touch /var/lib/ceph/mon/ceph-ceph02/sysvinit

Deployar OSD’s


  • Instalar Ceph
  • Copiar archivos de configuración, admin keyring y osd keyring desde el primer nodo a el/los nuevos osd:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.conf
/var/lib/ceph/bootstrap-osd/ceph.keyring

  • Preparar el dispositivo (por ejemplo: sdb)

ceph-disk prepare --cluster {cluster-name} --cluster-uuid {uuid} --fs-type {ext4|xfs|btrfs} {data-path} [{journal-path}]
Por ejemplo:
ceph-disk prepare --cluster ceph --cluster-uuid dac4c30b-3f86-46da-a12d-e4a33b49a60b --fs-type xfs /dev/sdb

  • Activar el OSD

ceph-disk activate {data-path} [--activate-key {path}]
Por ejemplo:
ceph-disk activate /dev/sdb1

CephFS


  • Instalar Ceph
  • Copiar archivos de configuración, admin keyring desde el primer nodo al nodo mds:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.conf


  • Crear el directorio para el nodo mds

mkdir -p /var/lib/ceph/mds/ceph-{nodo}
Por ejemplo:
mkdir -p /var/lib/ceph/mds/ceph-ceph01

  • Crear la llave para el MDS

ceph auth get-or-create mds.$MDS_NAME mds 'allow' osd 'allow *' mon 'allow profile mds' > /var/lib/ceph/mds/ceph-${MDS_NAME}/keyring
Por ejemplo:
ceph auth get-or-create mds.ceph01 mds 'allow' osd 'allow *' mon 'allow profile mds' > /var/lib/ceph/mds/ceph-ceph01/keyring

  • Crear los pools para data y metadata

ceph osd pool create ${CEPHFS_DATA_POOL} ${CEPHFS_DATA_POOL_PG}
ceph osd pool create ${CEPHFS_METADATA_POOL} ${CEPHFS_METADATA_POOL_PG}
Por ejemplo:
ceph osd pool create cephfs_data 8
ceph osd pool create cephfs_metadata 8

  • Crear el filesystem

ceph fs new ${CEPHFS_NAME} ${CEPHFS_METADATA_POOL} ${CEPHFS_DATA_POOL}
Por ejemplo:
ceph fs new cephfs cephfs_metadata cephfs_data

  • Iniciar demonio

ceph-mds -i ceph01

  • Marcar para inicio automatico

touch /var/lib/ceph/mds/{cluster-name}-{hostname}/sysvinit
Por ejemplo:
touch /var/lib/ceph/mds/ceph-ceph02/sysvinit

Configuración Cliente

Block storage


  • Instalar Ceph
  • Copiar archivos de configuración, admin keyring desde el primer nodo al nodo mds:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.conf

  • Crear el disco

rbd create {name} --size 4096 [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
Por ejemplo:
rbd create foo --size 4096

  • Mapear el disco a un dispositivo

rbd map {name} [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
Por ejemplo:
rbd map foo

  • Formatear y montar. Por ejemplo

mkfs.ext4 -m0 /dev/rbd/rbd/foo
mkdir /mnt/ceph-block-device
mount /dev/rbd/rbd/foo /mnt/ceph-block-device

CephFS


  • Instalar Ceph
  • Copiar archivos de configuración, admin keyring desde el primer nodo al nodo mds:

/etc/ceph/ceph.client.admin.keyring
/etc/ceph/ceph.conf

  • Crear archivo con key

# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
        key = AQDVuzxWf/qiAhAAt9jKW6N6zGtgVVY0tzcK3A==
        auid = 0
        caps mds = "allow"
        caps mon = "allow *"
        caps osd = "allow *"
# echo AQDVuzxWf/qiAhAAt9jKW6N6zGtgVVY0tzcK3A== > /etc/ceph/admin.secret

  • Montar el filesystem

mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret

Ceph y Openstack

Usar Ceph como backend para Volumes en Openstack


  • Instalar Ceph en nodos compute (nova) y block storage (cinder)
  • Copiar archivos de configuración desde el primer nodo a los nodos nova y cinder:

/etc/ceph/ceph.conf

  • Crear pool

ceph osd pool create volumes 64

  • Crear usuario en ceph

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes'

  • Añadir el keyring generado en los nodos nova y cinder
    • En un nodo admin

ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring

    • Luego copiar el keyring a los nodos nova y cinder
  • Configurar libvirt en nodos nova
    • Generar un uuid

uuidgen

    • Tomar nota del key del usuario cinder

ceph auth get-key client.cinder

    • Crear archivo xml

cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF

    • Ejecutar

virsh secret-define --file secret.xml

    • Ejecutar

virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 AQCek0BW9DzSMxAAdN7i5ieDw0pVJepIZTLFiQ==

  • En nodo cinder, editar archivo /etc/cinder/cinder.conf. En parámetro “enabled_backends” usar rbd y añadir sección:

[rbd]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

  • En nodos nova, en archivo /etc/nova/nova-compute.conf, en sección [libvirt], añadir:

rbd_user = cinder
rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337

  • Reiniciar servicio en cinder

service cinder-volume restart

  • Reiniciar servicio en nova

service nova-compute restart

Usar Ceph como backend para VM’s en Openstack

TODO

No hay comentarios:

Publicar un comentario