Cette méthodologie décrie la mise en place d'un cluster composé de trois serveurs.
192.168.0.1 ceph1 192.168.0.2 ceph2 192.168.0.3 ceph3
echo "deb http://ceph.com/debian-dumpling/ wheezy main" > /etc/apt/sources.list.d/ceph.list gpg --keyserver pgpkeys.mit.edu --recv-key 7EBFDD5D17ED316D gpg -a --export 7EBFDD5D17ED316D|apt-key add - apt-get update
lvcreate -nceph -L30G vg_`hostname -s` mkfs.xfs -n size=64k /dev/vg_$( hostname -s )/ceph echo "/dev/mapper/vg_$( hostname -s )-ceph /var/lib/ceph xfs rw,noexec,nodev,noatime,nodiratime,inode64 0 0" >> /etc/fstab mount -a
apt-get install ceph
mkdir /var/lib/ceph/osd/ceph-0 -p mkdir /var/lib/ceph/osd/ceph-1 -p mkfs.xfs -f -n size=64k /dev/sdc mkfs.xfs -f -n size=64k /dev/sdd echo "/dev/sdc /var/lib/ceph/osd/ceph-0 xfs rw,noexec,nodev,noatime,nodiratime,inode64 0 0" >> /etc/fstab echo "/dev/sdd /var/lib/ceph/osd/ceph-1 xfs rw,noexec,nodev,noatime,nodiratime,inode64 0 0" >> /etc/fstab mount -a
[global] fsid = db22d697-03f5-4122-9f81-8c08ec680fe4 auth cluster required = cephx auth service required = cephx auth client required = cephx # We may loose one server mon osd full ratio = 0.66 # We may be able to loose two servers mon osd nearfull ratio = 0.33 [mon] mon initial members = a,b,c [mon.a] host = ceph1 mon addr = 192.168.0.1 [mon.b] host = ceph2 mon addr = 192.168.0.2 [mon.c] host = ceph3 mon addr = 192.168.0.3 [osd] osd journal size = 10000 osd journal = /var/lib/ceph/journal/$cluster-$id osd recovery max active = 1 [osd.0] host = ceph1 [osd.1] host = ceph1 [osd.2] host = ceph2 [osd.3] host = ceph2 [osd.4] host = ceph3 [osd.5] host = ceph3
Remarque : Le fsid peut-être généré avec la commande uuidgen (paquet Debian uuid-runtime).
mkdir -p /var/lib/ceph/mon/ceph-a ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin chmod 600 /etc/ceph/ceph.client.admin.keyring ceph-authtool --create-keyring /var/lib/ceph/mon/ceph-a/keyring --gen-key -n mon. cp -a /var/lib/ceph/mon/ceph-a/keyring /etc/ceph/ceph.mon.a.keyring cat /etc/ceph/ceph.client.admin.keyring >> /var/lib/ceph/mon/ceph-a/keyring ceph-authtool /var/lib/ceph/mon/ceph-a/keyring -n client.admin --cap mds 'allow' --cap osd 'allow *' --cap mon 'allow *' ceph-mon -i a -f -c /etc/ceph/ceph.conf --mkfs
mkdir -p /var/lib/ceph/mon/ceph-b scp 192.168.0.1:/var/lib/ceph/mon/ceph-a/keyring /var/lib/ceph/mon/ceph-b/keyring scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.b.keyring scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring chmod 600 /etc/ceph/ceph.client.admin.keyring ceph-mon -i b -f -c /etc/ceph/ceph.conf --mkfs
mkdir -p /var/lib/ceph/mon/ceph-c scp 192.168.0.1:/var/lib/ceph/mon/ceph-a/keyring /var/lib/ceph/mon/ceph-c/keyring scp 192.168.0.1:/etc/ceph/ceph.mon.a.keyring /etc/ceph/ceph.mon.c.keyring scp 192.168.0.1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring chmod 600 /etc/ceph/ceph.client.admin.keyring ceph-mon -i c -f -c /etc/ceph/ceph.conf --mkfs /etc/init.d/ceph -a start mon.c ssh 192.168.0.2 "/etc/init.d/ceph -a start mon.b" ssh 192.168.0.1 "/etc/init.d/ceph -a start mon.a"
mkdir /var/lib/ceph/journal/ ceph osd create ceph-osd -i 0 --mkfs --mkkey ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring service ceph -a start osd.0 ceph osd crush set 0 2.0 root=default host=ceph1 ceph osd create ceph-osd -i 1 --mkfs --mkkey ceph auth add osd.1 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-1/keyring service ceph -a start osd.1 ceph osd crush set 1 2.0 root=default host=ceph1
mkdir /var/lib/ceph/journal/ ceph osd create ceph-osd -i 2 --mkfs --mkkey ceph auth add osd.2 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-2/keyring service ceph -a start osd.2 ceph osd crush set 2 2.0 root=default host=ceph2 ceph osd create ceph-osd -i 3 --mkfs --mkkey ceph auth add osd.3 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-3/keyring service ceph -a start osd.3 ceph osd crush set 3 2.0 root=default host=ceph2
mkdir /var/lib/ceph/journal/ ceph osd create ceph-osd -i 4 --mkfs --mkkey ceph auth add osd.4 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-4/keyring service ceph -a start osd.4 ceph osd crush set 4 2.0 root=default host=ceph3 ceph osd create ceph-osd -i 5 --mkfs --mkkey ceph auth add osd.5 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-5/keyring service ceph -a start osd.5 ceph osd crush set 5 2.0 root=default host=ceph3
rbd list --pool=[pool]
Avec :
rbd info [pool]/[volume]
Avec :
rbd rm [pool]/[volume]
Avec :
Utiliser la commande virsh suivante :
virsh blockresize --domain [mavm] --path "[volume]" --size [newsize]
Avec :
La modification est normalement propagé jusqu'au système d'exploitation de la VM. Il faut ensuite faire en sorte que la VM utilise ce nouvelle espace. Par exemple, si le volume est utilisé directement comme un volume physique LVM, vous pouvez suivre la procédure décrite ici.
rbd resize --size=[taille en Mb] [pool]/[volume]
rbd resize --size=[taille en Mb] [pool]/[volume] --allow-shrink
rbd snap create [pool]/[volume]@[snap]
Avec :
rbd snap list [pool]/[nom-vm]
Avec :
Cette opération consite a écraser toutes les modifications faites depuis un snapshot. Cette modification est irréversible. Il est cependant possible de faire un nouveau snapshot avant la restauration afin de pouvoir revenir à l'état précédent si nécessaire.
rbd snap rollback [pool]/[volume]@[snap]
Avec :
rbd snap rm [pool]/[volume]@[snap]
Avec :
lvcreate -L 5G -n libvirt vg_$( hostname -s ) mkfs.ext4 /dev/vg_$( hostname -s )/libvirt tune2fs -i0 -c0 /dev/vg_$( hostname -s )/libvirt echo "/dev/mapper/vg_$( hostname -s )-libvirt /var/lib/libvirt ext4 defaults 0 0" >> /etc/fstab mount -a
echo "deb http://debian.easter-eggs.org/debian wheezy main libvirt kvm" > /etc/apt/sources.list.d/libvirt.list apt-get update
apt-get install libvirt-bin qemu-kvm netcat-openbsd qemu-utils
A faire sur ceph1 :
ceph auth get-or-create client.libvirt mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool'
echo "<secret ephemeral='no' private='no'><uuid>`uuidgen`</uuid><usage type='ceph'><name>client.libvirt secret</name></usage></secret>" > /tmp/secret.xml scp /tmp/secret.xml 192.168.0.2:/tmp/ scp /tmp/secret.xml 192.168.0.3:/tmp/ virsh secret-define /tmp/secret.xml ssh 192.168.0.2 "virsh secret-define /tmp/secret.xml" ssh 192.168.0.3 "virsh secret-define /tmp/secret.xml"
Secret 9b*******************************27e created
root@ceph1:~# ceph auth get client.libvirt [client.libvirt] key = AQ**********************************0A== caps mon = "allow r" caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=libvirt-pool"
virsh secret-set-value --secret 9b*******************************27e --base64 'AQ**********************************0A==' ssh 192.168.0.2 "virsh secret-set-value --secret 9b*******************************27e --base64 'AQ**********************************0A=='" ssh 192.168.0.3 "virsh secret-set-value --secret 9b*******************************27e --base64 'AQ**********************************0A=='"
ceph osd pool create libvirt 200
On peut désormais utiliser un volume ceph en tant que disque d'une machine virtuelle. Pour cela, voila un exemple de configuration d'un disque ceph d'une machine virtuelle :
<disk type='network' device='disk'> <driver name='qemu' cache='none'/> <auth username='libvirt'> <secret type='ceph' uuid='9b*******************************27e'/> </auth> <source protocol='rbd' name='libvirt/[nom volume]'> <host name='192.168.0.1' port='6789'/> <host name='192.168.0.2' port='6789'/> <host name='192.168.0.3' port='6789'/> </source> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk>
virsh attach-device [nom-vm] [/chemin/fichier.xml] --persistent
L'option –persitent permet que ce disque soit systématiquement attaché à la VM au moment de son démarrage.
On va mette ici en place trois checks différent :
Mise en place :
ceph auth get-or-create client.nagios mon 'allow r' > /etc/ceph/ceph.client.nagios.keyring scp /etc/ceph/ceph.client.nagios.keyring 192.168.0.2:/etc/ceph/ ssh root@192.168.0.2 'chown nagios: /etc/ceph/ceph.client.nagios.keyring' scp /etc/ceph/ceph.client.nagios.keyring 192.168.0.3:/etc/ceph/ ssh root@192.168.0.3 'chown nagios: /etc/ceph/ceph.client.nagios.keyring'
git clone https://github.com/valerytschopp/ceph-nagios-plugins.git /usr/local/src/ceph-nagios-plugins mkdir -p /usr/local/lib/nagios/plugins ln -s /usr/local/src/ceph-nagios-plugins/src/check_ceph_health /usr/local/lib/nagios/plugins/check_ceph_health git clone http://git.zionetrix.net/git/check_ceph_usage /usr/local/src/check_ceph_usage ln -s /usr/local/src/check_ceph_usage/check_ceph_usage /usr/local/lib/nagios/plugins/check_ceph_usage git clone http://git.zionetrix.net/git/check_ceph_status /usr/local/src/check_ceph_status ln -s /usr/local/src/check_ceph_status/check_ceph_status /usr/local/lib/nagios/plugins/check_ceph_status
command[check_ceph_health]=/usr/local/lib/nagios/plugins/check_ceph_health -d -i nagios -k /etc/ceph/ceph.client.nagios.keyring command[check_ceph_usage]=/usr/local/lib/nagios/plugins/check_ceph_usage -i nagios -k /etc/ceph/ceph.client.nagios.keyring --warning-data 50 --critical-data 60 --warning-allocated 80 --critical-allocated 90 command[check_ceph_status]=/usr/local/lib/nagios/plugins/check_ceph_status -i nagios -k /etc/ceph/ceph.client.nagios.keyring
service nagios-nrpe-server reload