Ceph

    -^-
   /   \
   |O o|
   ).-.(
  '/|||\`
  | '|` |
    '|`

lynx ceph.com/
Damit "Big Data" auch "Big Platz" hat.

ceph_cluster


Prerequirements / Info:
	A minimum of three monitors nodes are recommended for a cluster quorum (lynx http://ceph.com/planet/zero-to-hero-guide-for-ceph-cluster-planning/)
	Das Initial Filesystem unter "/var/lib/ceph/osd/ceph-<N>" braucht ca. 6 GB Platz, egal wie groß letzendlich die Platte ist. Realer "RAW" Platz sind es allerdings nur 15 MB. Der Rest wird vorallokiert.
	This compelling list of features makes btrfs the ideal choice for Ceph clusters. http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/#filesystem-background-info
																					 http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/#not-recommended
#Build#############################################################################################################################
Stand. 10.2016
Getstet mit "ceph version v11.0.0-3393-gc701628 (c701628da25140b9216691192409603331cec5fc)"

Bei Debian vorher auf Debian 8 upgraden
Bei Suse auf mind. 13.1 upgraden

via Yast2:
	NUR PYTHON 2 NICHT 3 !!!
	python-Sphinx
	libudev-devel
	#libleveldb
	#leveldb-devel
	#python-leveldb
	fuse-devel
	xfsprogs-devel
	python-fcgi
	FastCGI
	FastCGI-devel
	libatomic_ops-devel
	#snappy-devel
	gperftools
		gperftools-devel
	JeMalloc
		jemalloc-devel
	keyutils-devel
	#libcurl-devel
	mozilla-nss-tools
		nss-myhostname
		mozilla-nss-devel
	cython (bei Suse 12.3 nach der Installation noch das neuetse Update installieren. Ggf. Update repsoitiries anpassen)
	python-tox
	python-pip
	python-remoto
	#lttng-ust-devel
	
	Bei Debian
	apt-get install libldap2-dev
	apt-get install python-sphinx
	apt-get install libudev-dev
	apt-get install libatomic-ops-de
	apt-get install libkeyutils-dev
	apt-get install libjemalloc-dev
	apt-get install libfcgi-dev
	apt-get install cython
	apt-get install libfuse-dev
	apt-get install libboost-all-dev
	
gcc/g++ mind. v4.8 . (mind. C++ Standard 11)
	via Yast installieren oder siehe "gcc How To"
	Bei Debian 7
		vi /etc/apt/sources.list ->
			deb http://ftp.uk.debian.org/debian/ jessie main non-free contrib
		vi /etc/apt/preferences ->
			Package: *
			Pin: release a=wheezy
			Pin-Priority: 900
			Package: gcc*
			Pin: release a=jessie
			Pin-Priority: 910
		aptitude update
		aptitude install gcc-4.8/jessie
		ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
		aptitude install g++-4.8/jessie
		ln -s /usr/bin/g++-4.8 /usr/bin/g++
	
ICU (Suse 12.3 bei Debian)
	wget http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz
	tar -xzf icu4c-58_1-src.tgz 
	cd icu/source
	./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include
	make
	make install
	
Boost C++ Libs (bei Suse 12.3) :
	lynx https://sourceforge.net/projects/boost/files/boost/1.62.0/
	tar -xzf boost_1_62_0.tar.gz
	cd boost_1_62_0
	./bootstrap.sh --prefix=/usr --libdir=/usr/lib64 --includedir=/usr/include --with-libraries=all --with-icu
	./b2
	cp -frv boost/* /usr/include/boost/
	cp -frv /root/temp/ceph/boost_1_62_0/stage/lib/ /usr/lib64/
	
libressl/openssl (bei Debiab)
	siehe libressl/openSSL Doku
	
curl (bei Debian und ab Suse Leap)
	siehe Curl Doku

Cmake (bei Suse 12.3 und Debian 7 [cmake version 3.13]):
	wget --no-check-certificate https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
	tar -xzf cmake-3.6.2.tar.gz
	cd cmake-3.6.2/
	./configure --prefix=/usr
	gmake		#Bei Debian "make"
	gmake install
	cmake --version

snappy	(ab Suse 12.3 und Debian):
	git clone https://github.com/google/snappy
	cd snappy/
	./autogen.sh
	./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include
	make
	make install

babeltrace	(bei Suse 12.3):
	wget http://www.efficios.com/files/babeltrace/babeltrace-1.4.0.tar.bz2
	tar -xf babeltrace-1.4.0.tar.bz2 
	cd babeltrace-1.4.0/
	./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include --disable-debug-info
	make
	make install

Ab opensuse 13.1 und Debian
userspace-rcu:
	wget http://www.lttng.org/files/urcu/userspace-rcu-0.9.2.tar.bz2
		#git clone git://git.liburcu.org/userspace-rcu.git
		#cd userspace-rcu/
		#./bootstrap
	tar -xf userspace-rcu-0.9.2.tar.bz2
	cd userspace-rcu-0.9.2/
	./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include
	make
	make install
	
lttng-ust:
	wget http://lttng.org/files/lttng-ust/lttng-ust-2.8.1.tar.bz2
	tar -xf lttng-ust-2.8.1.tar.bz2
	cd lttng-ust-2.8.1/
	./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include
	make
	make install

leveldb (und Debian):
	export GIT_SSL_NO_VERIFY=true
	#lynx https://github.com/google/leveldb
	git clone https://github.com/google/leveldb
	cd leveldb
	make
	cp -frv out-shared/libleveldb.so* /usr/lib64/
	mkdir /usr/include/leveldb
	cp -frv include/leveldb/* /usr/include/leveldb
	cp -frv include/ /usr/include/

#mind. 3 GB RAM	
wget http://download.ceph.com/tarballs/ceph_10.2.2.orig.tar.gz
screen
./autogen.sh
./configure --bindir=/usr/bin --sbindir=/usr/sbin --libdir=/usr/lib64 --includedir=/usr/include
time make
time make install

ggf. vorher nochmal.
	cd /usr/lib64
	rm -frv libcurl.so.4
	ln -s libcurl.so.4.3.0 libcurl.so.4

Achtung !! nicht auf einem SMB Share compilieren. Dort können nicht alle Symlinks gesetzt werden. Besser NFS oder lokal.

Benötigt ca. 35 GB Platz für kompilierten Code und Installations Files	
#Build GIT Source
	export GIT_SSL_NO_VERIFY=true
	git clone git://github.com/ceph/ceph
	cd ceph
	git submodule update --init --recursive
	#./install-deps.sh								#Manuell Ausführen
	./do_cmake.sh
	cd build
	#screen
	time make
	time make install
	#cp -frv lib/* /usr/lib
	cp -frv lib/* /usr/lib64
	cp -frv /usr/local/bin/* /usr/bin
	cp -frv /usr/local/sbin/* /usr/sbin/
	mkdir /usr/lib/ceph
	cp -frv /usr/local/libexec/ceph/* /usr/lib/ceph/
	cp -frv ../systemd/* /usr/lib/systemd/system/
	ggf. "vi /usr/lib/systemd/system/ceph-mon@.service" ->
			#ExecStart=/usr/bin/ceph-mon -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph
			ExecStart=/usr/bin/ceph-mon -f --cluster ${CLUSTER} --id %i
		Oder Konfigs laden

ceph --version
ceph -s

#Self Test. Funktioniert über GIT compiling.

make vstart
../src/vstart.sh -d -n -x -l
./bin/ceph -s
./bin/rados -p rbd bench 30 write
./bin/rbd create foo --size 1000
../src/stop.sh

#ceph-deploy
export GIT_SSL_NO_VERIFY=true 
git clone git://github.com/ceph/ceph-deploy
cd ceph-deploy
git submodule update --init --recursive
./bootstrap
python setup.py install
 
#############################################################################################################################
#Ceph Initial Konfig. 
Kommandos im ceph-deploy Ordner ausführen oder unter /usr/bin verlinken.

rm -frv /var/log/ceph.log
rm -frv /etc/ceph/*
mkdir -p /etc/ceph
rm -frv /var/lib/ceph
rm -frv /var/run/ceph/
mkdir -p /var/run/ceph/
mkdir -p /var/lib/ceph/mon/ceph-docker-1
mkdir -p /var/lib/ceph/osd/ceph-0
cd /etc/ceph
rm -frv /lib64/libreadline.so.6; ln -s /lib64/libreadline.so.6.2 /lib64/libreadline.so.6
ntpdate ptbtime1.ptb.de
ntpdate -s 172.17.190.17
export DISPLAY=172.17.190.1:0.0
/root/temp/ceph/ceph-deploy/ceph-deploy install docker-1 docker-2 docker-3
/root/temp/ceph/ceph-deploy/ceph-deploy new docker-1 docker-2 docker-3
/root/temp/ceph/ceph-deploy/ceph-deploy mon create docker-1 docker-2 docker-3
/root/temp/ceph/ceph-deploy/ceph-deploy mon create-initial
vi /etc/ceph/ceph.conf	->
	[global]
	fsid = 6015338a-4dcd-4197-949e-3d6d5705547c
	mon_initial_members = docker-1
	mon_host = 172.17.190.91
	auth_cluster_required = none
	auth_service_required = none
	auth_client_required = none
	log file  = /var/log/ceph.log
	osd pool default size = 2 # Write an object 2 times
	osd pool default min size = 1 # Allow writing 1 copy in a degraded state
	osd pool default pg num = 64
	osd pool default pgp num = 64
	#Choose a reasonable crush leaf type
	#0 for a 1-node cluster.
	#1 for a multi node cluster in a single rack
	#2 for a multi node, multi chassis cluster with multiple hosts in a chassis
	#3 for a multi node cluster with hosts across racks, etc.
	osd crush chooseleaf type = 1
	mon_allow_pool_delete = true
	
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'
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
systemctl restart ceph.target

/root/temp/ceph/ceph-deploy/ceph-deploy mon create-initial
/root/temp/ceph/ceph-deploy/ceph-deploy admin docker-1 docker-2 docker-3
ceph -s

###
#Ceph OSD
iscsiadm -m discovery -t sendtargets -p 172.17.190.90:3260
iscsiadm -m node -T iqn.2016-10.moore.corp:docker1 -p 172.17.190.90:3260 --login
iscsiadm -m node -T iqn.2016-10.moore.corp:meta1 -p 172.17.190.90:3260 --login
ssh docker-2 "iscsiadm -m discovery -t sendtargets -p 172.17.190.90:3260;iscsiadm -m node -T iqn.2016-10.moore.corp:docker2 -p 172.17.190.90:3260 --login; iscsiadm -m node -T iqn.2016-10.moore.corp:meta2 -p 172.17.190.90:3260 --login; fdisk -l"
ssh docker-3 "iscsiadm -m discovery -t sendtargets -p 172.17.190.90:3260; iscsiadm -m node -T iqn.2016-10.moore.corp:docker3 -p 172.17.190.90:3260 --login; iscsiadm -m node -T iqn.2016-10.moore.corp:meta3 -p 172.17.190.90:3260 --login; fdisk -l"
fdisk -l
ceph -s
ceph-deploy disk zap docker-1:sda
	ceph-deploy disk zap docker-2:sda
	ceph-deploy disk zap docker-3:sda
ceph -s
ceph-deploy osd prepare --fs-type btrfs --zap docker-1:sda
	ceph-deploy osd prepare --zap docker-2:sda
	ceph-deploy osd prepare --zap docker-3:sda
fdisk -l
ceph -s
ceph-deploy osd activate docker-1:sda1
	ceph-deploy osd activate docker-2:sda1
	ceph-deploy osd activate docker-3:sda1
ceph -k ceph.client.admin.keyring health
ceph -s
###

#CephFS 
#Infos 
#	mindest ein aktiver Meta Server erforderlich. Shared Storage wie GFS2/OCFS2
#	https://www.b1-systems.de/fileadmin/content/talks/cebit2015/ceph_cebit2015-presentation.pdf
mkdir -p /var/lib/ceph/mds/ceph-docker-1
	ssh docker-2 "mkdir -p /var/lib/ceph/mds/ceph-docker-2"
	ssh docker-3 "mkdir -p /var/lib/ceph/mds/ceph-docker-3"
ceph-deploy mds create docker-1 docker-2 docker-3
ceph -s
ceph osd pool create cephfs_data 8
ceph -s
ceph osd pool create cephfs_metadata 8
ceph -s
ceph fs new cephFS-Test cephfs_metadata cephfs_data
ceph fs ls
ceph mds stat
ceph df
ceph auth get-or-create client.cephfs mon 'allow r' osd 'allow rwx pool=cephfs' -o /root/temp/client.cephfs.keyring
ceph-authtool -p -n client.cephfs /root/temp/client.cephfs.keyring > /root/temp/client.cephfs
scp -r /root/temp/client* docker-2:/root/temp
scp -r /root/temp/client* docker-3:/root/temp
ceph-fuse --keyring /etc/ceph/client.cephfs.keyring --name client.cephfs /mnt/cephfs

echo 4096 > /sys/block/sde/queue/read_ahead_kb
################################################################################################################################
#Ceph Single Node Cluster
rm -frv /var/log/ceph.log
rm -frv /etc/ceph/*
mkdir -p /etc/ceph
rm -frv /var/lib/ceph
mkdir -p /var/lib/ceph/mon/ceph-docker-1
mkdir -p /var/lib/ceph/osd/ceph-0
cd /etc/ceph
rm -frv /lib64/libreadline.so.6; ln -s /lib64/libreadline.so.6.2 /lib64/libreadline.so.6
ntpdate ptbtime1.ptb.de
ntpdate -s 172.17.190.17
export DISPLAY=172.17.190.1:0.0
/root/temp/ceph/ceph-deploy/ceph-deploy install docker-1
/root/temp/ceph/ceph-deploy/ceph-deploy new docker-1
/root/temp/ceph/ceph-deploy/ceph-deploy mon create docker-1
/root/temp/ceph/ceph-deploy/ceph-deploy mon create-initial
vi /etc/ceph/ceph.conf	->
	[global]
	fsid = ba5aef75-52c1-4fc1-a53e-a75111badea1
	mon_initial_members = docker-1
	mon_host = 172.17.190.91
	auth_cluster_required = none
	auth_service_required = none
	auth_client_required = none
	log file  = /var/log/ceph.log
	osd pool default size = 2
	osd crush chooseleaf type = 0
#
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'
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
systemctl restart ceph.target
/root/temp/ceph/ceph-deploy/ceph-deploy mon create-initial
/root/temp/ceph/ceph-deploy/ceph-deploy admin docker-1
ceph -s
#Ceph OSD
iscsiadm -m discovery -t sendtargets -p 172.17.190.90:3260
iscsiadm -m node -T iqn.2016-10.moore.corp:docker1 -p 172.17.190.90:3260 --login
#iscsiadm -m node -T iqn.2016-10.moore.corp:meta1 -p 172.17.190.90:3260 --login
fdisk -l
ceph -s
ceph-deploy disk zap docker-1:sda
ceph -s
ceph-deploy osd prepare --fs-type btrfs --zap docker-1:sda
fdisk -l
ceph -s
ceph-deploy osd activate docker-1:sda1
ceph -k ceph.client.admin.keyring health
ceph -s
#CephFS
mkdir -p /var/lib/ceph/mds/ceph-docker-1
ceph-deploy mds create docker-1
#lynx http://docs.ceph.com/docs/master/rados/operations/placement-groups/
ceph osd pool create cephfs_data 8
ceph osd pool create cephfs_metadata 8
ceph fs new cephFS-Test cephfs_metadata cephfs_data
ceph fs ls
ceph mds stat
ceph df detail
ceph auth get-or-create client.cephfs mon 'allow r' osd 'allow rwx pool=cephFS-Test' -o /root/temp/client.cephfs.keyring
ceph-authtool -p -n client.cephfs /root/temp/client.cephfs.keyring > /root/temp/client.cephfs
ceph-fuse --keyring /etc/ceph/client.cephfs.keyring --name client.cephfs /mnt/cephfs
#
#Kopieren Der Schlüsseldaten zu den Clients
scp -r /root/temp/client.cephfs* docker-3:/root/temp
scp -r /etc/ceph.conf docker-3:/root/temp
ceph-fuse --keyring /etc/ceph/client.cephfs.keyring --name client.cephfs /mnt/cephfs
	ceph-fuse -m docker-2 (oder anderen Monitor Server) -c /root/temp/ceph.conf --keyring /root/temp/client.cephfs.keyring --name client.cephfs /mnt/cephfs
	#http://docs.ceph.com/docs/jewel/man/8/ceph-fuse/

#Node Ausfall test#############################################################################################################################
nach restart der ausgefallen node
"iscsiadm -m node -T iqn.2016-10.moore.corp:docker1 -p 172.17.190.90:3260 --login" #"iSCIS LUN einbinden"
"mount /dev/sda1 /var/lib/ceph/osd/ceph-1" #Platte an OSD ID Diretory mounten
"systemctl restart ceph.target"
"ceph-fuse --keyring /etc/ceph/client.cephfs.keyring --name client.cephfs /mnt/cephfs"

#RBD#############################################################################################################################
#Rados Block Deveice. Vorsicht hier kein Shared Storage, da Deveice lokal eingebunden wird.
lynx https://www.suse.com/documentation/ses-2/book_storage_admin/data/storage_bp_integration.htmlumount 
ggf. modprobe rbd
rbd create cephfs_data/myimage --size 102400 (oder 10G) --object-size 8M --image-feature layering
rbd map --pool cephfs_data myimage
rbd showmapped
rbd list cephfs_data
mkfs.btrfs /dev/rbd0 # Oder das Block Deveice direkt in eine XEN VM einbinden. "disk = [ '/dev/rbd0,,sda', '/dev/cdrom,,sdc,cdrom' ]"
rados df
rbd info cephfs_data/myimage 

#Delete Image aus Pool
rbd list ceph_rdb_docker_img
rbd info ceph_rdb_docker_img/docker1
rbd status ceph_rdb_docker_img/docker1
rbd unmap --pool ceph_rdb_docker_img docker1
rbd rm ceph_rdb_docker_img/docker1
	Problem:
		2017-03-28 14:46:17.781625 7fda61d699c0 -1 librbd: image has watchers - not removing
		Removing image: 0% complete...failed.
		rbd: error: image still has watchers
		This means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.
	Lösung:
		rbd status ceph_rdb_docker_img/docker1
		iptables -F
		iptables -A INPUT -s 172.17.190.58 -j LOG --log-level 7 --log-prefix "INPUT CEPH: "
		iptables -A INPUT -s 172.17.190.58 -j DROP
		tail -f /var/log/firewall 
		#mind. 30 Sekunden für den Timeout warten
rbd list ceph_rdb_docker_img
rbd showmapped
rados df

#################################################################################################
Reale Größe eines RBD Images

rbd diff ceph_rdb_docker_swarm/docker_swarm | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'

##################################################################################################
#User Authenficiatiom
ceph auth list
ceph auth get-or-create client.cephfs mon 'allow r' osd 'allow rwx pool=cephFS-Test' -o /root/temp/client.cephfs.keyring
ceph-authtool -p -n client.cephfs /root/temp/client.cephfs.keyring > /root/temp/client.cephfs
scp -r /root/temp/client.docker-3.keyring docker-3:/root/temp/
scp -r /etc/ceph/ceph.conf docker-3:/etc/ceph


##################################################################################################
#Pools

Pools löschen/Filesystem löschen
	ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
	Falls: Error EBUSY: pool 'cephfs_data' is in use by CephFS
		ceph osd pool ls
		ceph fs ls
		ggf. "killall /usr/bin/ceph-mds" auf allen MDS nodes.
		ceph mds fail 0 (1,2,3,4 usw)
		#ceph mds rm 0 (1,2,3,4 usw)
		ceph fs rm cephFS-Test --yes-i-really-mean-it
		ggf. "vi /etc/ceph/ceph.conf" ->
			mon_allow_pool_delete = true
		ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
		ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
		ceph df
		ceph osd pool ls
		ceph fs ls

Pool umbenennen
	ceph osd pool ls
	ceph osd pool rename ceph_rdb_img ceph_rdb_docker_img
	ceph osd pool ls

########################################################################################
#Storage dem Cluster hinzufügen		
ceph-deploy disk zap docker-1:sda
ceph-deploy osd prepare --zap docker-1:sda
ceph-deploy osd activate docker-1:sda1
fdisk -l
ceph -s
ceph df detail

Mountepunkte bei den Client werden automatisch mitvergrößert
########################################################################################

#OSD Löschen#############################################################################################################################
ceph osd out osd.0
ceph osd crush remove osd.0
ceph auth del osd.0
killall /usr/bin/ceph-osd
ceph osd down osd.0
ceph osd rm osd.0
ceph osd tree
umount /var/lib/ceph/osd/ceph-0
########################################################################################

#Status Commands
ceph -s
ceph df
ceph healt [detail]
ceph osd tree
ceph mon dump
ceph mds dump
getfattr -n ceph.file.layout /mnt/cephfs/file_1
ceph osd lspools
ceph osd pool stats $pool_name
ceph osd stat
ceph mon stat
ceph mds stat
ceph -s -c /etc/ceph/striker/ceph.conf 
ceph pg dump
ceph tell osd.* version
ceph heap stats
rbd showmapped
	rbd status ceph_rdb_docker_img/docker1
rados df

########################################################################################
#destroy ceph cluster and hard reboot
rm -frv /var/log/ceph.log
rm -frv /etc/ceph/*
mkdir -p /etc/ceph
rm -frv /var/lib/ceph
mkdir -p /var/lib/ceph/mon/ceph-docker-1
mkdir -p /var/lib/ceph/osd/ceph-0
cd /etc/ceph
rm -frv /lib64/libreadline.so.6; ln -s /lib64/libreadline.so.6.2 /lib64/libreadline.so.6
echo 1 > /proc/sys/kernel/sysrq; echo b > /proc/sysrq-trigger;

#################################################
#Perofrmance Vergleich zu NFS
#cephFS
docker-3:/etc/ceph # time dd if=/dev/zero of=/mnt/cephfs/ddfile bs=8k count=1000000 && sync
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 825.992 s, 9.9 MB/s

real    13m46.182s
user    0m0.608s
sys     0m44.622s

####
#NFS Share
docker-3:/etc/ceph # time dd if=/dev/zero of=/mnt/nfs_mount/ddfile bs=8k count=1000000 && sync
1000000+0 records in
1000000+0 records out
8192000000 bytes (8.2 GB) copied, 495.069 s, 16.5 MB/s

real    8m15.247s
user    0m0.391s
sys     0m15.561s
docker-3:/etc/ceph # 

#Benchmarks
#http://tracker.ceph.com/projects/ceph/wiki/Benchmark_Ceph_Cluster_Performance

dd if=/dev/zero of=here bs=1G count=1 oflag=direct		#Ohne Disk Chache

ceph osd pool create scbench 100 100
rados bench -p scbench 10 write --no-cleanup

rados bench -p scbench 10 seq
rados bench -p scbench 10 rand

rados -p scbench cleanup

######################################
rm -frv /root/iscsi_export/*
dd if=/dev/zero of=/root/iscsi_export/docker_1.img bs=1024k seek=1000000 count=0
dd if=/dev/zero of=/root/iscsi_export/docker_2.img bs=1024k seek=1000000 count=0
dd if=/dev/zero of=/root/iscsi_export/docker_3.img bs=1024k seek=1000000 count=0
dd if=/dev/zero of=/root/iscsi_export/ceph_meta_1.img bs=1024k seek=1000000 count=0
dd if=/dev/zero of=/root/iscsi_export/ceph_meta_2.img bs=1024k seek=1000000 count=0
dd if=/dev/zero of=/root/iscsi_export/ceph_meta_3.img bs=1024k seek=1000000 count=0
killall iscsi-scstd
rmmod iscsi_scst
rmmod scst_vdisk
rmmod scst
rmmod iscsi_scst
#start again
modprobe scst
modprobe scst_vdisk
modprobe iscsi-scst
iscsi-scstd
scstadmin -config /etc/scst.conf
sync; echo 3 > /proc/sys/vm/drop_caches

####################################################
#Test File erstellen
time dd if=/dev/zero of=ddfile bs=8k count=250000 && sync		#2 GB


########################################################################################
#Troubleshooting
ceph pg dump | grep -i incons | cut -f 1 | while read i; do ceph pg repair ${i} ; done

Problem:
	health HEALTH_WARN
	1 active+undersized+degraded
Lösung:
	ceph health detail
	ceph pg dump | grep -wE "2\.8" = Placement Group Status aus Dump
	ceph pg 2.8 query | grep -i state
	ceph pg dump_stuck stale
	ceph pg dump_stuck inactive
	ceph pg dump_stuck unclean
	ceph osd tree
	ceph pg map 2.8 = Herausfinden auf welchen OSDs die PG läuft.
	Löschen des Journals, siehe Anleitung weiter unten.
	danach kommt die meldung "1 active+remapped"
	#
	ceph health detail | awk '{print $2}' | sort | uniq
	ceph pg repair 2.8
	ceph pg force_create_pg 2.8
	oder automatisiert bei viele PGs
	vi ceph_healt.sh ->
		#!/bin/bash
		set -x
		for pg in `ceph health detail | awk '{print $2}' | sort | uniq`; 
		do 
		  ceph pg force_create_pg $pg
		done
	oder "ceph health detail | grep pg | awk '{ print $2 }' | xargs -n1 ceph pg force_create_pg"

Problem:
	Ceph legt auf eine OSD mit BTRFS einen haufen Snapshots an (snap_*)
	und der "btrfs-cleaner" geht zu offt auf 100% CPU.
Lösung:
	"vi /etc/ceph/ceph.conf" ->
	filestore btrfs snap = false

Löschen des Journals
	ps -ef | grep -o osd
		root       4069   1734  3 12:35 pts/1    00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0
		root       4094   1734  4 12:36 pts/1    00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 4
	kill 4069 4094
	ceph-osd -i 0 --flush-journal
	ceph-osd -i 4 --flush-journal
	ceph-osd -i 0 --mkjournal
	ceph-osd -i 4 --mkjournal
	ceph osd unset noout
	usr/bin/ceph-osd -f --cluster ceph --id 0 &
	usr/bin/ceph-osd -f --cluster ceph --id 4 &
	
OSD Auto Repair
	ceph osd tree
	ceph osd repair osd.0
	ceph osd repair osd.1
	ceph osd repair osd.2
	
Problem:
	/usr/bin/ceph-mon -f --cluster ceph --id ceph-node3 &
		2017-03-07 16:23:20.916675 7f42271b17c0 -1 unable to read magic from mon data
	Monitor startet nicht.
Lösung:
	Alle ceph Executables neu starten oder System hart rebooten

Problem:
	[WRN] slow request
Lösung:
	vi /etc/ceph.conf
		osd op complaint time = 180

Problem:
	clock skew detected on mon.ceph-node2, mon.ceph-node3, mon.ceph-node4
Lösung
	echo "mon clock drift allowed = 30" >> /etc/ceph/ceph.conf
	Monitore restarten
	
###########################################################################
#Info

Wenn der gesammte Cluster (z.B. singe Node) ausfällt. Hängen auch hier die Mount Points (uninterruptible sleeps und zombies) .
Wenn man eine Leere Datei (sparse file) erstellt, "dd if=/dev/zero of=testdatei.img bs=1024k seek=100000 count=0" wird der gesammte allkoierte Speicherplatz mit "du -h" angezeigt nicht der RAW belegte platz. Wenn man die leere Datei in ein anderes Filesystem kopieren möchte belegt sie leider genausoviel Platz wie die Vorallokation .
	Lösung: ein kopieren mittels "cp --sparse=always suse.img /tmp" dann wird nur der realer verbrauchte Speicher kopiert.

###Palcement Groups
ceph pg dump | awk '
 /^pg_stat/ { col=1; while($col!="up") {col++}; col++ }
 /^[0-9a-f]+\.[0-9a-f]+/ { match($0,/^[0-9a-f]+/); pool=substr($0, RSTART, RLENGTH); poollist[pool]=0;
 up=$col; i=0; RSTART=0; RLENGTH=0; delete osds; while(match(up,/[0-9]+/)>0) { osds[++i]=substr(up,RSTART,RLENGTH); up = substr(up, RSTART+RLENGTH) }
 for(i in osds) {array[osds[i],pool]++; osdlist[osds[i]];}
}
END {
 printf("\n");
 printf("pool :\t"); for (i in poollist) printf("%s\t",i); printf("| SUM \n");
 for (i in poollist) printf("--------"); printf("----------------\n");
 for (i in osdlist) { printf("osd.%i\t", i); sum=0;
   for (j in poollist) { printf("%i\t", array[i,j]); sum+=array[i,j]; sumpool[j]+=array[i,j] }; printf("| %i\n",sum) }
 for (i in poollist) printf("--------"); printf("----------------\n");
 printf("SUM :\t"); for (i in poollist) printf("%s\t",sumpool[i]); printf("|\n");
}'
####
#Palcement Groups
ceph pg dump | egrep -v '^(0\.|1\.|2\.|3\.)' | egrep -v '(^pool\ (0|1|2|3))' | column -t
#

##################################################################################################
Monitoring für Icinga und Nagios

https://github.com/valerytschopp/ceph-nagios-plugins

##################################################################################################
cephFS mounts in andere Pools. Multi Filesystems.
NOCH NICHT PRAKTIKABEL !!!!
	"ceph fs flag set enable_multiple true --yes-i-really-mean-it"
##################################################################################################

##################################################################################################
#http://docs.ceph.com/docs/giant/rbd/rbd-snapshot/
Snapshots erlauben/erstellen
	ceph mds set allow_new_snaps true --yes-i-really-mean-it
	rbd snap create ceph_rdb_docker_img/docker1@snap_1
	rbd snap ls ceph_rdb_docker_img/docker1

Snapshot zurückfahren
	VORHER RBD UNBEDINGT UNMOUNTEN !!!
	rbd snap rollback ceph_rdb_docker_img/docker1@snap_2
	
Snapshot löschen 
	rbd snap rm ceph_rdb_docker_img/docker1@snap_2		= einzelnt löschen
	rbd snap purge ceph_rdb_docker_img/docker1			= Alle löschen
	
##################################################################################################
#Jumbo Frames
ifconfig eth0 mtu 9000
#ip link set dev eth0 mtu 9000
Falls OpenVswitch eingesetzt wird
	ovs-vsctl set interface vif2.0 mtu=9000
	ovs-vsctl set interface vif2.0-emu mtu=9000
	ovs-vsctl set interface vif1.0 mtu=9000
	ovs-vsctl set interface vif1.0-emu mtu=9000
	ovs-vsctl set interface xenbr0 mtu=9000
	ifconfig vif2.0 mtu 9000
	ifconfig vif2.0-emu mtu 9000
	ifconfig vif1.0-emu mtu 9000
	ifconfig vif1.0 mtu 9000
Test Jumbo Frames
"netstat -i"
"ping -M do -s 8972 172.16.190.27"
##################################################################################################
#Ceph harddisk Scheduler

für die OSD nodes
echo 4096 > /sys/block/sdb/queue/read_ahead_kb
echo deadline > /sys/block/sdb/queue/scheduler
echo 20480 > /sys/block/sdb/queue/nr_requests
echo 1 > /sys/block/sdb/queue/iosched/fifo_batch

Scheduler (noop,cfg,deadline) lynx http://ceph.com/community/ceph-bobtail-performance-io-scheduler-comparison/

##################################################################################################
#Upgarde von v11 auf v12


##################################################################################################
#To DO

Pool Größe Definieren
Jorunals erstellen auf anderen Platten (SSDs)
PG Count: https://access.redhat.com/documentation/en/red-hat-ceph-storage/1.3/paged/storage-strategies/chapter-14-pg-count
Defragementation:  xfs_db -c frag -r /dev/sdd
Load Balancing
Calamari: http://images.google.de/imgres?imgurl=https%3A%2F%2Fmarcosmamorim.files.wordpress.com%2F2014%2F07%2Fscreen-shot-2014-07-06-at-10-16-24-pm.png&imgrefurl=https%3A%2F%2Fmarcosmamorim.wordpress.com%2F2014%2F07%2F11%2Fbuild-package-and-install-calamari-on-debian-weezy%2F&h=647&w=1172&tbnid=1RkAowexqhN5GM%3A&docid=OXR-B4sDM8T-tM&ei=uN8RWLvAJ6jFgAbA96aoCg&tbm=isch&client=firefox-b&iact=rc&uact=3&dur=328&page=0&start=0&ndsp=22&ved=0ahUKEwi7_Nzf6_rPAhWoIsAKHcC7CaUQMwghKAMwAw&bih=731&biw=1536
CRUSH Map manipulation: https://www.suse.com/documentation/ses-1/book_storage_admin/data/op_crush.html
ceph-dash https://github.com/Crapworks/ceph-dash
erasure coding replication 
Cache Tiering
Rados Gateway
Quotas https://www.suse.com/documentation/ses-1/book_storage_admin/data/ceph_pools.html
Jumbo Frames.
clock skew / wert änder. default ist 0.05 sec.
export/import RBD Images
Beu dumpenden Prozessen auto restart (ceph-osd)

Post Revisions: