====== Ceph deploy via cephadm [Ubuntu 20.04 ] ====== Post about how deploy ceph deploy via cephadm on ubuntu 20.04 on 3 nodes ==== REQUIREMENTS ==== * 3 nodes, with additional drive(in this example /dev/sdb) * ubuntu/debian * Systemd * Podman or Docker for running containers * Time synchronization (such as chrony or NTP) ==== PREPARE ==== Edit /etc/hosts 192.168.56.101 node1 node1.linuxdemo.local 192.168.56.102 node2 node2.linuxdemo.local 192.168.56.103 node3 node3.linuxdemo.local Set hostnames sudo hostnamectl set-hostname node1 sudo hostnamectl set-hostname node2 sudo hostnamectl set-hostname node3 **Hostnames must be resolved by ipv4, not localhost loop!!!** timesync install sudo apt-get install ntp ntpdate -y timedatectl set-ntp on tune /etc/sysctl.conf kernel.pid_max = 4194303 fs.aio-max-nr=1048576 sysctl -p User ceph-admin add sudo useradd -d /home/ceph-admin -m ceph-admin -s /bin/bash sudo passwd ceph-admin echo "ceph-admin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph-admin sudo chmod 0440 /etc/sudoers.d/ceph-admin Ssh configure Create ssh config for user su ceph-admin tee -a ~/.ssh/config < Generate and copy keys on all nodes su ceph-admin ssh-keygen ssh-copy-id ceph-admin@node1 && ssh-copy-id ceph-admin@node2 && ssh-copy-id ceph-admin@node3 ==== Ceph initial deploy ==== From node1(192.168.56.101) su ceph-admin sudo curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm -o /usr/local/bin/cephadm sudo chmod +x /usr/local/bin/cephadm sudo rm /etc/apt/sources.list.d/ceph.list sudo rm /etc/apt/trusted.gpg.d/ceph.release.gpg sudo /usr/local/bin/cephadm add-repo --release octopus sudo /usr/local/bin/cephadm install if [[ ! -d "/etc/ceph" |]]; then sudo mkdir -p /etc/ceph;fi sudo /usr/local/bin/cephadm bootstrap --mon-ip 192.168.56.101 --initial-dashboard-user itclife --initial-dashboard-password itclife --dashboard-password-noupdate Output like INFO:cephadm:Ceph Dashboard is now available at: URL: https://vm-1:8443/ User: admin Password: fv8b98gzeb INFO:cephadm:You can access the Ceph CLI with: sudo /usr/local/bin/cephadm shell --fsid a3f8eb22-edbc-11ea-a98b-09a89b8358a4 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring INFO:cephadm:Please consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/master/mgr/telemetry/ INFO:cephadm:Bootstrap complete. Login in shell(we log in in docker) sudo /usr/local/bin/cephadm shell --fsid a3f8eb22-edbc-11ea-a98b-09a89b8358a4 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring exit from docker exit Install packages other machines(from cluster) to mount ceph(node2,node3) sudo cephadm install ceph-common Copy keys to root user to other nodes ssh-copy-id -f -i /etc/ceph/ceph.pub root@node2 ssh-copy-id -f -i /etc/ceph/ceph.pub root@node3 or cat /etc/ceph/ceph.pub and copy to /root/authorized_keys on node2,node3 === Ceph nodes add via orch(orchestrator) === sudo ceph orch host add node2 sudo ceph orch host add node3 === Set public network for our ceph === sudo ceph config set mon public_network 192.168.1.0/24 === Deploy monitors on a specific set of hosts: === sudo ceph orch apply mon "node1,node2,node3" or If you want to adjust the default of 5 monitors: sudo ceph orch apply mon 5 === Ceph add label mon === sudo ceph orch host label add node1 mon sudo ceph orch host label add node2 mon sudo ceph orch host label add node3 mon === ceph list hosts === ceph orch host ls === Ceph create osd === Ceph list osds sudo ceph osd tree | column -t -s $'\t' **Exec command on nodes to clean drives(not necessary)** sudo wipefs --all /dev/sdb Add osd on host's sudo ceph orch daemon add osd node1:/dev/sdb sudo ceph orch daemon add osd node2:/dev/sdb sudo ceph orch daemon add osd node3:/dev/sdb === Ceph create fs and mds, and set placement groups (version1) === Create fs with name volume1 sudo ceph fs volume create volume1 Create 3 mds for fs with name volume1 sudo ceph orch apply mds volume1 3 When we create fs with name volume1, pools will be created automatically List pools sudo ceph osd lspools output 1 device_health_metrics 2 cephfs.volume1.meta 3 cephfs.volume1.data SET THE NUMBER OF PLACEMENT GROUPS get pg ceph osd pool get cephfs.volume1.data pg_num ceph osd pool get cephfs.volume1.meta pgp_num and set pg sudo ceph osd pool set cephfs.volume1.data pg_num 128 sudo ceph osd pool set cephfs.volume1.data pgp_num 128 it is mandatory to choose the value of pg_num because it cannot be calculated automatically. Here are a few values commonly used: Less than 5 OSDs set pg_num to 128 \\ Between 5 and 10 OSDs set pg_num to 512 \\ Between 10 and 50 OSDs set pg_num to 4096 \\ If you have more than 50 OSDs, you need to understand the tradeoffs and how to calculate the pg_num value by yourself \\ For calculating pg_num value by yourself please take help of [[https://ceph.com/pgcalc/|pgcalc]] tool List fs sudo ceph mds stat sudo ceph fs ls === Ceph create fs and mds(version1) === Create fs with name cephfs sudo ceph osd pool create cephfs_data 64 64 sudo ceph osd pool create cephfs_metadata 64 64 sudo ceph fs new cephfs cephfs_metadata cephfs_data sudo ceph orch apply mds cephfs 3 Where: * {pool-name} is the name of the Ceph pool you are creating. * pg_num is the total number of placement groups for the pool. It is recommended that pg_num is set to 128 when using less than 5 OSDs in your Ceph cluster. * pgp_num specifies total number of placement groups for placement purposes. Should be equal to the total number of placement groups. [[https://docs.ceph.com/docs/mimic/rados/configuration/pool-pg-config-ref/|Info about pg]] # By default, Ceph makes 3 replicas of objects. If you want to make four # copies of an object the default value--a primary copy and three replica # copies--reset the default values as shown in 'osd pool default size'. # If you want to allow Ceph to write a lesser number of copies in a degraded # state, set 'osd pool default min size' to a number less than the # 'osd pool default size' value. osd pool default size = 4 # Write an object 4 times. osd pool default min size = 1 # Allow writing one copy in a degraded state. # Ensure you have a realistic number of placement groups. We recommend # approximately 100 per OSD. E.g., total number of OSDs multiplied by 100 # divided by the number of replicas (i.e., osd pool default size). So for # 10 OSDs and osd pool default size = 4, we'd recommend approximately # (100 * 10) / 4 = 250. === Ceph mount cephfs === Create creds Volume name volume1 sudo ceph fs authorize volume1 client.user / rw | sudo tee /etc/ceph/ceph.client.user.keyring sudo chmod 600 /etc/ceph/ceph.client.user.keyring sudo cat /etc/ceph/ceph.client.user.keyring Output [client.user] key = AQDSxDNfzpmkIhAAGyKz2EIqZsaVrXWP0ZNRAQ== mount via sh sudo mkdir /mnt/cephfs sudo mount -t ceph node3:/ /mnt/cephfs -o name=user,secret=AQDSxDNfzpmkIhAAGyKz2EIqZsaVrXWP0ZNRAQ== cd /mnt/cephfs mount via fstab 192.168.56.101,192.168.56.102,192.168.56.103:/ /mnt/cephfs ceph name=user,secret=AQDSxDNfzpmkIhAAGyKz2EIqZsaVrXWP0ZNRAQ==,noatime,_netdev 0 2 ===== FAQ ===== === Deploy ceph client === ceph-deploy install ceph-client === Ceph test === cd /mnt/cephfs sudo dd if=/dev/zero of=./test3.img bs=20M count=30 === Ceph repair === sudo ceph osd crush rule dump # Shows you the current crush maps sudo ceph osd getcrushmap -o comp_crush_map.cm # Get crush map crushtool -d comp_crush_map.cm -o crush_map.cm # Decompile map vim crush_map.cm # Make and changes you need (host -> osd) crushtool -c crush_map.cm -o new_crush_map.cm # Compile map sudo ceph osd setcrushmap -i new_crush_map.cm # Load the new map === Ceph clean all packages and wipe data, umount fstab === cd /etc/systemd/system rm -rf $(ls | grep ceph) systemctl daemon-reload docker rm -f $(docker ps | grep ceph | awk '{print $NF}') apt-get purge ceph-* -y -f; apt-get autoremove -y rm -rf /var/lib/ceph/* sudo rm /etc/apt/sources.list.d/ceph.list sudo rm /etc/apt/trusted.gpg.d/ceph.release.gpg sudo rm /etc/apt/sources.list.d/docker-ce.list sudo apt-get update lvremove $(lvdisplay | grep Path | awk '{print $NF}' | grep ceph ) --force --verbose vgremove $(vgdisplay | grep Name | awk '{print $NF}' | grep ceph ) --force --verbose wipefs --all /dev/sdb Delete record from fstab sed -i '/^.*ceph.*$/d' /etc/fstab ; cat /etc/fstab === Ceph commands === sudo ceph status sudo ceph orch sudo ceph orch restart osd sudo ceph orch resume # CEPHADM_PAUSED: cephadm background work is paused get pools sudo ceph osd lspools output 1 device_health_metrics 2 cephfs_data 3 cephfs_meta delete pool systemctl stop ceph-mds.target killall ceph-mds ceph mds cluster_down ceph mds fail 0 ceph fs rm cephfs name --yes-i-really-mean-it ceph osd pool delete cephfs data pool cephfs data pool --yes-i-really-really-mean-it ceph osd pool delete cephfs metadata pool cephfs metadata pool --yes-i-really-really-mean-it rm -rf "/var/lib/ceph/mds/cluster-metadata server" ceph auth del mds."$hostname" **Mon configure** list mon ceph mon dump rm mon from node3 ceph mon rm node3 **Osd configure** Set min_size data ceph osd pool set cephfs_data min_size 1 Osd tree ceph osd tree | column -t -s $'\t' Remove osd ceph osd crush remove osd.0 ceph auth del osd.0 ceph osd rm 0 **Ceph stop cluster** Umount share on all nodes and exec on all nodes sudo systemctl stop ceph\*.service ceph\*.target ==== Fix ceph after crush ==== On all nodes systemctl stop ceph\*.service ceph\*.target An then restart systemctl restart ceph-11d4341a-dde8-11ea-9cb6-063fcf8afd33.target ===== Mans ===== [[https://docs.ceph.com/docs/master/cephadm/install/|https://docs.ceph.com/docs/master/cephadm/install/]] [[https://medium.com/@balderscape/setting-up-a-virtual-single-node-ceph-storage-cluster-d86d6a6c658e|https://medium.com/@balderscape/setting-up-a-virtual-single-node-ceph-storage-cluster-d86d6a6c658e]] [[https://github.com/ceph/ceph/pull/35587/files|https://github.com/ceph/ceph/pull/35587/files]] [[https://docs.ceph.com/docs/giant/rados/operations/control/|https://docs.ceph.com/docs/giant/rados/operations/control/]] [[http://onreader.mdl.ru/LearningCeph/content/Ch02.html#From_zero|http://onreader.mdl.ru/LearningCeph/content/Ch02.html#From_zero]] [[https://programming.vip/docs/ceph-delete-add-osd.html|https://programming.vip/docs/ceph-delete-add-osd.html]] [[https://docs.ceph.com/docs/mimic/cephfs/fstab/|https://docs.ceph.com/docs/mimic/cephfs/fstab/]] [[https://docs.ceph.com/docs/master/cephfs/fs-volumes/|https://docs.ceph.com/docs/master/cephfs/fs-volumes/]] [[https://kifarunix.com/install-and-configure-ceph-block-device-on-ubuntu-18-04/|Ceph block storage]] [[https://docs.ceph.com/docs/master/cephadm/adoption/|CONVERTING AN EXISTING CLUSTER TO CEPHADM]] [[https://ceph.io/planet/debug-ceph-docker-containers/|debug-ceph-docker-containers]] [[https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/container_guide/administering-ceph-clusters-that-run-in-containers|administering-ceph-clusters-that-run-in-containers]] \\ [[http://onreader.mdl.ru/LearningCeph/content/Ch04.html|PG]]