ceph-deploy ile Ubuntu Linux 16 ve 20 Üzerinde Ceph Pasific Cluster Storage Kurulumu – Object Storage
Tags: ceph, storage, cluster, object
Published: 2021-09-14 20:15:02

**Ceph is the future of storage** : Açık kaynak kodlu, dağıtık, yazılım tabanlı storage sistemidir. **Object**, **block** ve **file-level** storage desteklemektedir. Geleneksel depolama sistemlerinin kısıtlarına karşın Ceph **ölçeklenebilir**, **esnek** ve **donanım bağımsız**lığı sayesinde **ekonomik**liliğide beraberinde getirir. Ayrıca dağıtık yapıda çalışması sayesinde olası bir arızayı karşın otomatik onarım işlemlerini başlatması, exabyte seviyelerine kadar çıkabilmesi ve **3-in-1 protokol** desteği Ceph'i bu denli zevkle kullanılabilir ve göz bebeği haline getirmiştir.

Yapımız kısaca aşağıdaki gibi;
1 node Ceph servisleri(**Monitör**, **Management**, **Rados Gateway**, **Admin client**) + 3 OSD node toplam 4 node.
Her OSD node’sinde storage cluster için 3’er ayrı disk(/dev/sdb, dev/sdc, dev/sdd gibi).
Siz kendi yapınız için yatayda OSD ve dikeyde disk yapınızı çoğaltabilirsiniz.

Her **OSD** sunucusunda diskler herhangi bir yere mount edilmemiş ve lvm yapılmamış olmalıdır. Ben 100GB alan verdim.
```javascript
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk 
|-sda1   8:1    0   99G  0 part /
|-sda2   8:2    0    1K  0 part 
`-sda5   8:5    0  975M  0 part [SWAP]
sdb      8:16   0   100G  0 disk 
sdc      8:32   0   100G  0 disk 
sdd      8:48   0   100G  0 disk 
sr0     11:0    1 1024M  0 rom  

```

**Bütün node**'lerde çalıştırılmalı;
```javascript
sudo apt update
#ubuntu 16
sudo apt install chrony python-minimal -y
#ubuntu 20
sudo apt install chrony  python3-pip -y
```

```javascript
sudo sed -i 's/pool 2.debian.pool.ntp.org offline iburst/server $NTP_ADDRESS iburst/g' /etc/chrony/chrony.conf
sudo systemctl restart chrony.service
```


```javascript
sudo useradd -d /home/cephuser -m cephuser
sudo passwd cephuser
#enter a password: 'Complex_Pass'
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
sudo chmod 0440 /etc/sudoers.d/cephuser
```


```javascript
sudo vi /etc/hosts

10.10.10.201 ceph-ops
10.10.10.202 ceph-stgx
10.10.10.203 ceph-stgy
10.10.10.204 ceph-stgz
```

**Sadece Admin node**'de çalıştırılmalı(yani ceph servislerinin kurulacağı **ceph-ops node**'si);
```javascript
ssh-keygen

ssh-copy-id cephuser@ceph-ops
ssh-copy-id cephuser@ceph-stgx
ssh-copy-id cephuser@ceph-stgy
ssh-copy-id cephuser@ceph-stgz
```


```javascript
sudo vi ~/.ssh/config

Host ceph-ops
   Hostname ceph-ops
   User cephuser
Host ceph-stgx
   Hostname ceph-stgx
   User cephuser
Host ceph-stgy
   Hostname ceph-stgy
   User cephuser
Host ceph-stgz
   Hostname ceph-stgz
   User cephuser
```


```javascript
#ubuntu 16
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-mimic/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

#ubuntu 20
#NoT: U20 için repoya source'ye eklerken sources.list.d'ye eklemek yerine direkt olarak "/etc/apt/source.list" altına eklemeniz daha uygun olabilir.
#Çünkü özellikle bu kurulum sırasında pasific kurmak isterken ceph sources.list.d'nin altındaki ceph.list source'sini octopus'a çekiyor.
#Fakat source.list altına eklediğinizde, burda yetkisi olmadığından ve değiştiremediğinden pacific versiyonunda kurulum sağlayabiliyorsunuz. "deb https://download.ceph.com/debian-pacific/ focal main"

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-octopus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

sudo apt update

#ubuntu 16
sudo apt install ceph-deploy -y

#ubuntu 20
pip3 install git+https://github.com/ceph/ceph-deploy.git
PATH=$PATH:/home/$USER/.local/bin

mkdir mycluster
cd mycluster
ceph-deploy new ceph-ops
```


```javascript
vi ceph.conf

osd pool default pg num = 8
osd pool default pgp num = 8
mon_initial_members = ceph-ops
mon_host = 10.10.10.201
public network = 10.10.10.0/24
cluster network = 10.10.20.0/24
rgw_override_bucket_index_max_shards = 500
mon_pg_warn_max_object_skew = 0
```


```javascript
ceph-deploy install ceph-ops ceph-stgx ceph-stgy ceph-stgz
ceph-deploy mon create-initial
ceph-deploy admin ceph-ops
ceph-deploy mgr create ceph-ops
ceph-deploy rgw create ceph-ops
```


```javascript
#Fiziksel osd'lerde öncesinde yapılandırlmış LVM varsa tespit edilip, temizlenmelidir.
ceph-deploy osd create ceph-stgx --data /dev/sdb
ceph-deploy osd create ceph-stgx --data /dev/sdc
ceph-deploy osd create ceph-stgx --data /dev/sdd

ceph-deploy osd create ceph-stgy --data /dev/sdb
ceph-deploy osd create ceph-stgy --data /dev/sdc
ceph-deploy osd create ceph-stgy --data /dev/sdd

ceph-deploy osd create ceph-stgz --data /dev/sdb
ceph-deploy osd create ceph-stgz --data /dev/sdc
ceph-deploy osd create ceph-stgz --data /dev/sdd
```


```javascript
#Ceph kurulumlarında OSD başına 50 ila 100 arasında PG düşmeli, bundan dolayı OSD sayısıyla 50 ve 100 çarpılarak minumum ve maksimum PG değerleri elde edilir.
#Örnek olarak 9 OSD'li bir kurulumda açılacak pool'ların PG değerlerinin toplamı 9x50=450 ile 9x100=900 arasında olmalıdır.
#default.rgw.buckets.data pool'una 450 ile 900 arasındaki 2'nin katı olan 512 değeri verilir, böylece ceph'in açma potansiyeli olan diğer pool'lar için verilen 8 default pg num(ceph.conf'da verildi) değeriyle bu eşik aşılmamış olur.
sudo ceph osd pool create default.rgw.buckets.data 512 512 replicated replicated_rule 20000000
```


```javascript
#Swift user oluşturuyorum, siz isterseniz s3 user oluşturabilirsiniz.
sudo radosgw-admin --uid "ceph-demo" --display-name "Ceph Demo Kurulum Kullanıcısı" --subuser=ceph-demo:swift --key-type swift --access full user create
sudo radosgw-admin --uid "ceph-demo" --max-buckets=0 user modify

#Uygulama bağlantısı için kullanılabilecek bilgiler
ceph.username = ceph-demo:swift
ceph.password = W2ocBJ4WwWvHfsARsO9PtD9HbFmJNKI4CYEZFACQ
ceph.endpoint = http://10.10.10.201:7480/swift/v1
ceph.auth.url = http://10.10.10.201:7480/auth/1.0
```

Ceph dashboard'ı aktif edebilirsiniz.
```javascript
#ubuntu 16
sudo ceph mgr module enable dashboard
sudo ceph dashboard create-self-signed-cert
sudo ceph config set mgr mgr/dashboard/server_addr ceph-ops
sudo ceph config set mgr mgr/dashboard/server_port 8443
sudo ceph mgr services #service url check
sudo ceph dashboard set-login-credentials admin admin

#ubuntu 20
sudo apt install ceph-mgr-dashboard
sudo ceph mgr module enable dashboard
sudo ceph dashboard create-self-signed-cert
sudo ceph config set mgr mgr/dashboard/server_addr ceph-ops
sudo ceph config set mgr mgr/dashboard/server_port 8443
sudo ceph mgr services #service url check
#Set the login credentials. Password read from -i <file>
sudo ceph dashboard set-login-credentials admin -i admin.txt
```

Aşağıdaki komutlarla da Ceph'i kontol edebilirsiniz.
```javascript
sudo ceph osd pool ls / sudo ceph osd pool ls detail
sudo ceph df detail
sudo ceph osd status
sudo ceph health detail
sudo ceph -s
```


```javascript
  cluster:
    id:     9c2bdf0d-528a-47c0-b466-4ed3b404162c
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-ops (age 40m)
    mgr: ceph-ops(active, since 4m)
    osd: 9 osds: 9 up (since 37m), 9 in (since 37m)
    rgw: 1 daemon active (ceph-ops)
 
  task status:
 
  data:
    pools:   6 pools, 138 pgs
    objects: 189 objects, 5.1 KiB
    usage:   11 GiB used, 79 GiB / 278 GiB avail
    pgs:     137 active+clean

```


![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vg88zcziza912ifre5sw.png)