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
No hay comentarios:
Publicar un comentario