Skip to content

Ghi chép về CEPH

Đặng Xuân Cảnh edited this page Nov 22, 2018 · 26 revisions

Các lệnh cơ bản

ceph-deploy

  • Install Ceph trên Client
ceph-deploy install {client}
  • Khởi tạo cụm
ceph-deploy mon create-initial
  • Copy key admin và config
ceph-deploy --overwrite-conf admin {host}
  • Tạo mới OSD
# Zapdisk
ceph-deploy disk zap {host} /dev/{disk}
# Create OSD (BlueStore)
ceph-deploy osd create --data /dev/{disk} {host}
  • Tạo mới Node Mon
ceph-deploy new {host}
  • Xóa Node Mon
# Remove trong config và restart service mon
  • Tạo mới Node MGR
  • Xóa node MGR

  • Push config mới qua các node client

ceph-deploy --overwrite-conf config push {host}
  • Tạo mới node RGW
ceph-deploy rgw create {host}
  • Push key qua client

Restart Service Ceph

  • Mon
systemctl restart ceph-mon@$(hostname)
  • OSD
systemctl restart ceph-osd@{osd-id}
  • MDS
systemctl restart ceph-mds@$(hostname)
  • RGW
systemctl status ceph-radosgw@rgw.$(hostname).service
  • MGR
systemctl restart ceph-mgr@$(hostname)

Kiểm tra trạng thái hệ thống

  • Hiển thị trạng thái cụm Ceph
ceph health
  • Hiển thị chi tiết trạng thái Warning, Error
ceph health detail
  • Hiển thị chi tiết trạng thái cụm Ceph
ceph -s
  • Hiển thị trạng thái cụm Ceph theo giờ gian thực
ceph -w
  • Kiểm tra trạng thái sử dụng disk của mỗi pool
ceph df
  • Kiểm tra trạng thái sử dụng disk của mỗi pool theo Object
rados df

Các lệnh thao tác với MGR

  • Kiểm tra thông tin các module của MGR
ceph mgr dump 
  • Enable các module MGR (zabbix, dashboard,...)
mgr module enable {module}

Các lệnh thao tác với OSD

  • Hiển thị trạng thái các OSD trong cụm
ceph osd stat
  • Hiển thị Crushmap OSD
ceph osd tree
ceph osd crush tree
ceph osd crush tree --show-shadow
  • Kiểm tra chi tiết location của 1 OSD
ceph osd find {osd-id}
  • Kiểm tra chi tiết metadata của 1 OSD
ceph osd metadata {osd-id}
  • Benchmark osd
ceph tell osd.{osd-id} bench
  • Hiển thị trạng thái sử dụng của các OSD
ceph osd df 
ceph osd df tree
  • Hiển thị latency Aplly, Commit data trên các OSD
ceph osd perf
  • Xóa 1 osd ra khỏi cụm Ceph (Thực hiện trên host của OSD đó)
i={osd-id}
ceph osd out osd.$i
ceph osd down osd.$i
systemctl stop ceph-osd@$i
ceph osd crush rm osd.$i
ceph osd rm osd.$i
ceph auth del osd.$i

Các lệnh thao tác trên pool

  • Create 1 pool
ceph osd pool create {pool-name} {pg-num} [{pgp-num}] [replicated] \
     [crush-ruleset-name] [expected-num-objects]
  • Set Application cho pool
osd pool application enable {pool-name} {application}
  • Hiển thị toàn bộ tham số của các pool
ceph osd pool ls detail
  • Hiện thị tham số của 1 pool
ceph osd pool get {pool-name} all
  • Điều chỉnh lại giá trị của pool
ceph osd pool set {pool-name} {key} {value}
  • Xóa pool
ceph osd pool delete {pool-name} {pool-name} --yes-i-really-really-mean-it

Các lệnh thao tác xác thực trên Ceph

  • Hiển thị toàn bộ các key authen của cụm Ceph
ceph auth list
  • Create hoặc get key
ceph auth get-or-create {key-name} mon {permission} osd {permission} mds {permission} > {key-name}.keyring
  • Cập nhật permission key đã có
ceph auth caps {key-name} mon {permission} osd {permission} mds {permission}
  • Xóa key
ceph auth delete {key-name}

Các lệnh thao tác đối với RBD

  • Hiển thị các images trong pool
rbd ls {pool-name}
  • Create 1 images
rbd create {pool-name}/{images} --size {size}
  • Hiển thị chi tiết images
rbd info {pool-name}/{images}
  • Hiển thị dung lượng thực tế của images
rbd diff {pool-name}/{images} | awk '{SUM += $2} END {print SUM/1024/1024 " MB"}'
  • Hiển thị images đang được mapped (Trên Client)
rbd showmapped
  • Xóa images
rbd rm {pool-name}/{images}
  • Create snapshot
rbd snap create {pool-name}/{images}@{snap-name}
  • Protect bản snapshot
rbd snap protect {pool-name}/{images}@{snap-name}
  • Kiểm tra tất cả các bản snapshot của 1 volume
rbs snap ls {pool-name}/{images}
  • Roolback snapshot
rbd snap rollback {pool-name}/{images}@{snap-name}
  • Clone snapshot thành 1 images mới
rbd clone {pool-name}/{images}@{snap-name} {pool-name}/{child-images}
  • Kiểm tra các images được clone từ snapshot
rbd children {pool-name}/{images}@{snap-name}
  • Unprotect bản snapshot
rbd snap unprotect {pool-name}/{images}@{snap-name}
  • Xóa 1 bản snapshot
rbd snap rm {pool-name}/{images}@{snap-name}
  • Xóa toàn bộ snapshot của 1 volume
rbd snap purge {pool-name}/{images}

Các lệnh thao tác đối với Object

  • Show toàn bộ pool name
rados lspools
  • Show toàn bộ Object trên cụm
rados -p {pool-name} ls
  • Upload Object lên cụm Ceph
rados -p {pool-name} put {object-file}
  • Download Object từ cụm Ceph
rados -p {pool-name} get {object-file}
  • Xóa 1 Object cụm Ceph
rados -p {pool-name} rm {object-file}
  • Kiểm tra các client kết nối đến Object
rados -p {pool-name} listwatchers {object-file}
  • Benchmark Object bằng rados bench
rados -p {pool-name} listwatchers {object-file}

Các lệnh thao tác với CephFS

  • Create pool cho cephfs
osd pool create <poolname> <int[0-]> {<int[0-]>} {replicated|erasure} {<erasure_code_profile>} {<rule>}   create pool
{<int>}   
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
  • Khởi tạo cephfs
ceph fs new cephfs cephfs_metadata cephfs_data
  • Kiểm tra các cephfs trên cụm
ceph fs ls
ceph mds stat
  • Enable nhiều cephfs trên cụm
ceph fs flag set enable_multiple true --yes-i-really-mean-it

Thao tác trên PG

  • Dump toàn bộ thông tin PG trên cụm
ceph pg dump [--format <format>]
  • Dump thông tin cụ thể của PG_stuck
ceph pg dump_stuck inactive|unclean|state|undersized|degraded
  • Query thông tin của 1 PG
ceph pg {pg-id} query
  • List các pg missing
ceph pg {pg-id} list-missing

ceph pg scrub {pg-id} ceph deep-scrub {pg-id}

  • Chủ động khôi phục pg gặp sự cố
ceph pg repair {pg-id}

Các lệnh nâng cao

  • Show config trong file ceph.conf của Ceph
ceph-conf --show-conf
  • Show toàn bộ config của Ceph
ceph-conf --show-config
for i in $(rbd ls {pool-name}); 
do 
echo {pool-name}/$i 
Size: $(rbd diff {pool-name}/$i | awk '{SUM += $2} END {print SUM/1024/1024 " MB"}'); 
done

Thao tác với CRUSHMAP

Các thao tác với crushmap file

  • Get Crushmap
ceph osd getcrushmap -o crushmap
  • Decompile crushmap file
crushtool -d crushmap -o crushmap.decom
  • Sau khi chỉnh sửa crushmap tiến hành Compile lại
crushtool -c crushmap.decom -o crushmap.new
  • Test apply crushmap mới cho cụm
crushtool --test -i crushmap.new --show-choose-tries --rule 2 --num-rep=2
  • Apply crushmap cho cụm
ceph osd setcrushmap -i crushmap.new

Các thao tác với Crushmap trên câu lệnh

  • Set lại class của 1 OSD
# Remove class cũ
ceph osd crush rm-device-class osd.{osd-id}
# Add lại class mới cho osd
ceph osd crush set-device-class ssd osd.{osd-id}
  • List danh sách class của osd
ceph osd crush class ls
  • List danh sách osd theo class
ceph osd crush class ls-osd {class}
  • Kiểm tra rules hiện có của cụm
ceph osd crush rule ls
  • Kiểm tra chi tiết của 1 rule
ceph osd crush rule dump
  • Create rule mới
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>

EC pool

  • Create rule cho ensure code
ceph osd erasure-code-profile set {profileEC} k=4 m=2 crush-device-class=ssd crush-failure-domain=host
  • Create ecpool
ceph osd pool create {ecpool-name} {pg_size} {pgp_size} erasure {profileEC}
  • Set ecpool cho phép lưu trữ RBD
ceph osd pool set {ecpool-name} allow_ec_overwrites true
ceph osd pool application enable {ecpool-name} rbd
  • Create images
rbd create {ecpool-name}/{images} --size {size}

Tùy chỉnh OSD trên Crushmap

  • Tùy chỉnh cụ thể osd trên Crushmap
ceph osd crush set osd.0 1.0 root=default datacenter=dc1 room=room1 row=foo rack=bar host=foo-bar-1

VD trên set osd.0 có weight =1 và nằm dưới root/dc1/roomm1/foo/bar/foor-bar-1

  • Xóa 1 bucket
ceph osd crush rm {bucket-name}

Ví dụ tùy chỉnh

# Add host node4
ceph osd crush add-bucket node4 host
# Move node4 to root default
ceph osd crush move node4 root=default
# Add disktype node4hdd, node4ssd
ceph osd crush add-bucket node4hdd disktype
ceph osd crush add-bucket node4ssd disktype
# Move disktype node4hdd, node4ssd to host node4
ceph osd crush move node4ssd host=node4
ceph osd crush move node4hdd host=node4
# Add osd to disktype
ceph osd crush set osd.11 0.00999 disktype=node4ssd
ceph osd crush set osd.12 0.00999 disktype=node4hdd

Tổng hợp thông tin PG của cụm

ceph pg dump | awk '
BEGIN { IGNORECASE = 1 }
/^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");
}'

Map Image RBD trên Client

Map rbd như 1 Block Device

# Trên client cài đặt cephclient
yum install ceph-common -y 

# Download ceph.conf và key về /etc/ceph/
scp root@cephnode:/etc/ceph/ceph.conf /etc/ceph/
scp root@cephnode:/etc/ceph/{key-name}.keyring /etc/ceph/

# Add config vào rbdmap 
echo "{pool-name}/{images}            id=admin,keyring=/etc/ceph/ceph.client.admin.keyring" >> /etc/ceph/rbdmap

# Kiểm tra 
sudo modprobe rbd
rbd feature disable {pool-name}/{images}  exclusive-lock object-map fast-diff deep-flatten
systemctl start rbdmap && systemctl enable rbdmap

Map cephfs trên Client

Map cephfs như 1 NFS folder

sudo mount -t ceph 192.168.0.1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret

sudo mkdir /home/usernname/cephfs
sudo ceph-fuse -m 192.168.0.1:6789 /home/username/cephfs

# Cấu hình trên fstab
10.10.10.10:6789:/     /mnt/ceph    ceph    name=admin,secretfile=/etc/ceph/secret.key,noatime,_netdev    0       2

Cấu hình ceph.conf tham khảo

[global]
# Debug config
debug lockdep = 0/0
debug context = 0/0
debug crush = 0/0
debug mds = 0/0
debug mds balancer = 0/0
debug mds locker = 0/0
debug mds log = 0/0
debug mds log expire = 0/0
debug mds migrator = 0/0
debug buffer = 0/0
debug timer = 0/0
debug filer = 0/0
debug objecter = 0/0
debug rados = 0/0
debug rbd = 0/0
debug journaler = 0/0
debug objectcacher = 0/0
debug client = 0/0
debug osd = 0/0
debug optracker = 0/0
debug objclass = 0/0
debug filestore = 0/0
debug journal = 0/0
debug ms = 0/0
debug mon = 0/0
debug monc = 0/0
debug paxos = 0/0
debug tp = 0/0
debug auth = 0/0
debug finisher = 0/0
debug heartbeatmap = 0/0
debug perfcounter = 0/0
debug rgw = 0/0
debug hadoop = 0/0
debug asok = 0/0
debug throttle = 0/0
rbd default format = 2

fsid = 7d3f2102-face-4012-a616-372615f2f54f
mon_initial_members = ceph1
mon host = 10.10.10.33
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd pool default size = 2
osd pool default min size = 1
osd crush chooseleaf type = 0
public network = 10.10.10.0/24
cluster network = 10.10.14.0/24
bluestore block db size = 5737418240
bluestore block wal size = 2737418240
osd objectstore = bluestore
mon_allow_pool_delete = false
rbd_cache = false
osd pool default pg num = 128
osd pool default pgp num = 128

[mon.ceph1]
host = ceph1
mon addr = 10.10.10.33

[osd]
osd crush update on start = false
bluestore = true
Clone this wiki locally