Last active
September 12, 2022 10:25
-
-
Save huynp1999/45b6d7f425e02395cc77aae4be356415 to your computer and use it in GitHub Desktop.
Onetap - Ceph lab simple script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# this script only works on Centos 8 (maybe 7) | |
# first, we need to provide hostnames in /etc/hosts | |
# assume all osd nodes has the same number of disks (eg: vdb, vdc) | |
# usage: | |
# bash ceph-deploy.sh | |
admin="ceph1 ceph2 ceph3" | |
mon="ceph1 ceph2 ceph3" | |
#mds="ceph1 ceph2 ceph3" | |
osd="ceph1 ceph2 ceph3" | |
vd="b c" | |
codename=$2 | |
version=$2 | |
os="el8" | |
if [ -z "$1" ] | |
then | |
echo "No argument supplied" | |
echo "-r: install ceph from repo, need to provide codename (install lastest version)" | |
echo " e.g: bash ceph-deploy -r octopus" | |
echo "-p: install ceph from downloaded packages, need to provide version (install specific versions)" | |
echo " e.g: bash ceph-deploy -p 14.2.18" | |
else | |
for i in $admin; do ssh root@$i 'sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*; sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*; sed -i -e "s|baseurl=http://mirror.vccloud.vn|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*'; done | |
echo "########################################" | |
echo "DONE fix repo" | |
echo "########################################" | |
for i in $admin; do ssh root@$i 'yum install python2 wget -y'; done | |
yum install python2-pip -y | |
pip2 install ceph-deploy | |
echo "########################################" | |
echo "DONE install python2 pip cephdeploy" | |
echo "########################################" | |
if [ "$1" = "-r" ]; then | |
cat <<EOF> /etc/yum.repos.d/ceph.repo | |
[ceph] | |
name=Ceph packages for $basearch | |
baseurl=https://download.ceph.com/rpm-octopus/el8/x86_64/ | |
enabled=1 | |
priority=2 | |
gpgcheck=1 | |
gpgkey=https://download.ceph.com/keys/release.asc | |
[ceph-noarch] | |
name=Ceph noarch packages | |
baseurl=https://download.ceph.com/rpm-octopus/el8/noarch | |
enabled=1 | |
priority=2 | |
gpgcheck=1 | |
gpgkey=https://download.ceph.com/keys/release.asc | |
[ceph-source] | |
name=Ceph source packages | |
baseurl=https://download.ceph.com/rpm-octopus/el8/SRPMS | |
enabled=0 | |
priority=2 | |
gpgcheck=1 | |
gpgkey=https://download.ceph.com/keys/release.asc | |
EOF | |
sed -i "s|octopus|"$codename"|" /etc/yum.repos.d/ceph.repo | |
for i in $admin; do scp /etc/yum.repos.d/ceph.repo root@$i:/etc/yum.repos.d; done | |
for i in $admin; do ssh root@$i 'yum install ceph -y'; done | |
elif [ "$1" = "-p" ]; then | |
mkdir /root/ceph-pkgs | |
cd /root/ceph-pkgs | |
wget https://download.ceph.com/rpm-$version/$os/x86_64/ -O index.html | |
for i in `cat index.html | grep $version-0.$os.x86_64 | awk -F ">" '{print $2}' | awk -F "<" '{print $1}' | grep -v "debug\|test\|resource\|rbd-fuse\|rbd-nbd\|rbd-mirror\|python34\|rados-objclass\|devel\|cephfs-java\|fuse\|ceph-radosgw\|index.html\|compat\|jni1"`;do wget https://download.ceph.com/rpm-$version/$os/x86_64/${i};done | |
for i in ceph-mgr-modules-core ceph-volume; do wget https://download.ceph.com/rpm-$version/$os/noarch/$i-$version-0.$os.noarch.rpm; done | |
fi | |
echo "########################################" | |
echo "DONE download ceph packages" | |
echo "########################################" | |
for i in $admin; do scp -r /root/ceph-pkgs root@$i:/root; done | |
for i in $admin; do ssh root@$i 'yum --nogpgcheck localinstall /root/ceph-pkgs/*.rpm -y'; done | |
echo "########################################" | |
echo "DONE install ceph packages on all hosts" | |
echo "########################################" | |
for i in $admin; do ssh root@$i 'systemctl restart chronyd; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep; chronyc -a makestep'; done | |
sed -i 's/if not codename or not _get_distro/#if not codename or not _get_distro/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py | |
sed -i 's/raise exc.UnsupportedPlatform/#raise exc.UnsupportedPlatform/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py | |
sed -i 's/distro=distro_name,/#distro=distro_name,/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py | |
sed -i 's/codename=codename,/#codename=codename,/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py | |
sed -i 's/release=release)/#release=release)/' /usr/lib/python2.7/site-packages/ceph_deploy/hosts/__init__.py | |
mkdir /root/ceph-cluster | |
rm /root/ceph-cluster/*: | |
cd /root/ceph-cluster | |
ceph-deploy new $mon | |
echo "########################################" | |
echo "DONE new" | |
echo "########################################" | |
cat <<EOF >> ceph.conf | |
public_network = 10.5.88.0/22 | |
cluster_network = 10.5.88.0/22 | |
mon_allow_pool_delete = true | |
EOF | |
echo "########################################" | |
echo "DONE config" | |
echo "########################################" | |
ceph-deploy mon create-initial | |
sleep 10 | |
echo "########################################" | |
echo "DONE mon init" | |
echo "########################################" | |
ceph-deploy admin $admin | |
ceph-deploy mgr create $mon | |
ceph-deploy mds create $mds | |
echo "########################################" | |
echo "DONE admin, mgr and mds" | |
echo "########################################" | |
for i in $osd; do for j in $vd; do ssh root@$i "ceph-volume lvm zap /dev/vd$j --destroy"; done; done | |
for i in $osd | |
do | |
ssh root@$i "lsblk | awk '{print \$1}' | grep ceph | cut -c 3-" > /tmp/abc | |
for lvs in `cat /tmp/abc` | |
do | |
dmsetup remove $lvs | |
done | |
done | |
for i in $osd; do for j in $vd; do ssh root@$i "wipefs -af /dev/vd$j"; done; done | |
echo "########################################" | |
echo "DONE zap all devices" | |
echo "########################################" | |
for i in $osd; do for j in $vd; do ceph-deploy osd create --data /dev/vd$j $i; done; done | |
echo "########################################" | |
echo "DONE add osds" | |
echo "########################################" | |
echo "########################################" | |
echo "DONE deploy ceph cluster !!!" | |
echo "########################################" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment