天天看點

ceph常用運維技巧總結2

叢集縮容

如果已經有ceph叢集在運作,首先需要将叢集下線。測試環境下線方法:關閉osd、mon、mds、radosgw這些程序。
    删除節點上的osd(此方法也可以是縮減叢集的機器)(依次把一個 OSD 移出叢集 CRUSH 圖、删除認證密鑰、删除 OSD 圖條目、删除 ceph.conf 條目。如果主機有多個硬碟,每個硬碟對應的 OSD 都得重複此步驟。)
    ceph osd out {osd-num} 把 OSD 踢出叢集後,它可能仍在運作,就是說其狀态為 up 且 out 。删除前要先停止 OSD 程序。
    /etc/init.d/ceph stop osd.{osd-num}停止 OSD 後,狀态變為 down 。
    ceph osd crush remove osd.{osd-num} 删除 CRUSH 圖的對應 OSD 條目,它就不再接收資料了。你也可以反編譯 CRUSH 圖、删除 device 清單條目、删除對應的 host 桶條目或删除 host 桶(如果它在 CRUSH 圖裡,而且你想删除主機),重編譯 CRUSH 圖并應用它。
    ceph auth del osd.{osd-num} 删除 OSD 認證密鑰
    ceph osd rm osd.{osd-num}删除 OSD
    ceph osd crush remove `hostname -s`  在crushMap中删除主機名,這個指令在這個主機下的所有的osd都删除的時候會生效。如果還有沒有移除的不會生效。  

----删除主機上的所有的osd----
for id in            
do 
    ceph osd out osd.$id
    /etc/init.d/ceph stop osd.$id
    ceph osd crush remove osd.$id
    ceph auth del osd.$id
    ceph osd rm osd.$id
     umount /var/lib/ceph/osd/ceph-$id
done
ceph osd crush remove `hostname -s`
           

monitor下線

删除mon程序:Mon删除
從健康的叢集中删除
、  service ceph –a stop mon.{mon-id} 停止螢幕
、  ceph mon remove {mon-id}從叢集删除螢幕
、  從ceph.conf中删除
從不健康的叢集中删除
、  ceph mon dump
、  service ceph stop mon
、  ceph-mon –i {mon-id} --extract-monmap {mappath}
、  monmaptool {mappath}  -rm {mon-id}
、  ceph-mon –I {mon-id} –inject-monmap {monpath}
           

清除叢集

清除叢集中的ceph保證有一個幹淨的ceph環境
rm -rf /etc/ceph/*.keyring
rm -rf /etc/ceph/*.conf
rm -rf /var/log/ceph/*
rm -rf /var/lib/ceph/{bootstrap-mds,bootstrap-osd,mds,mon,osd}/*再删除osd目錄時可能會報裝置忙,因為該目錄mount到了一個裝置上,此時是删除不掉的。需要先umount掉相關的磁盤 umount /var/lib/ceph/osd/ceph-
ceph auth list #檢查keyring被清除
kill - $pid_osd $pid_mds $pid_mon #殺死相關程序   看看每台主機上還有那些程序沒有删掉,進行删除。
----umount主機上所有的osd連接配接的硬碟-----
for id in      
do 
    umount /var/lib/ceph/osd/ceph-$id
done

機器上有ceph, 删除的時候可能删不全,安裝新ceph的時候會報一些錯誤, 可以使用下面的指令全清除掉
yum remove ceph ceph-common ceph-devel librados2 libcephfs1 python-ceph librbd1 ceph-test  libcephfs_jni1 libcephfs_jni1 libradosstriper1  librbd1 ceph-radosgw  ceph-libs-compat cephfs-java  libcephfs1 rbd-fuse rbd-fuse rest-bench -y
           

搭建ceph叢集

完全手動搭建一個ceph叢集
    準備/etc/hosts  包含所有的叢集。

    規劃網絡,分為public_network 和 cluster_network

    增加ceph的yum repo
    編輯檔案/etc/yum.repos.d/ceph.repo
    [ceph-updates]
    gpgcheck=
    enabled=
    name=Letv Cloud's Ceph packages
    priority=
    baseurl=http://IP/ceph/el6/update/
    [letv-ceph]
    gpgcheck=
    enabled=
    name=Letv Cloud's Ceph packages
    priority=
    baseurl=http://IP/ceph/el6/update/

    配置ntp
    就算是配置好了ntp服務,經過長時間運作,系統也可能出現時鐘skew的情況,此時重新開機ntp服務即可

    增加新使用者cephadmin
    ssh [email protected]
    useradd -d /home/cephadmin -m cephadmin
    passwd cephadmin

    echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
    chmod  /etc/sudoers.d/cephadmin

    配置使用者cephadmin ssh無密碼登陸
    打開防火牆
    端口  用于monitor
    端口 : 用于osd

    禁用SELINUX
    sudo setenforce 

    ##所有節點安裝ceph和用戶端工具
    yum install ceph striprados

ceph-deploy部署 
選擇一個部署機進行ceph-deploy部署。部署機器需要能夠ssh免密碼連接配接所有的部署機器。
----------ceph-deploy安裝monitor節點-----------------
    yum install ceph-deploy

    開始配置ceph.conf
    su - cephadmin
    mkdir mycluster
    此後所有操作都用cephadmin使用者在mycluster下進行

    cd mycluster
    ceph-deploy new 初始moniter節點{ test- test- test- }
    此時會在目前目錄下自動建立ceph.conf  ceph.log   ceph.mon.keyring(為此叢集建立密鑰環、并生成螢幕密鑰)三個檔案

    修改ceph.conf檔案
    如果确定osd的檔案系統是xfs, filestore xattr use omap 為false. 同時filestore journal writeahead為true

    如果使用自定義的crushmap, 設定osd crush update on start = false

    如果使用osd-domain, 設定osd crush chooseleaf type = {osd-domain-num}

    [global]
    auth service required = cephx
    filestore xattr use omap = true
    auth client required = cephx
    auth cluster required = cephx
    mon host = ,,
    mon initial members = <初始moniter節點>
    fsid = ee4ea70c-f--d3d-c0aacc92b
    osd pool default size = 
    osd pool default min size = 
    osd pool default pg num = 
    osd pool default pgp num = 
    public network = x.x.x.x/x
    cluster network = x.x.x.x/x

    [mon]
    mon compact on start = true

    [osd]
    osd max backfills = 
    osd backfill scan min = 
    osd backfill scan max = 
    filestore op threads = 
    osd recovery max active = 
    osd recovery max chunk = M
    osd recovery threads = 
    journal max write bytes = M
    journal queue max bytes = M
    mon osd down out interval  = 
    osd heartbeat interval = 
    osd heartbeat grace = 
    mon_osd_min_down_reporters = 
    osd_heartbeat_use_min_delay_socket = True

    安裝monitor節點
    ceph-deploy mon create-initial   此時目錄下會生成ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.bootstrap-rgw.keyring  ceph.client.admin.keyring  ceph.conf  ceph.log  ceph.mon.keyring

    推送admin keyring到所有節點
    sudo chmod +r ./ceph.client.admin.keyring
    ceph-deploy admin <所有節點>
    保留mycluster檔案架,為以後自動添加monitor節點準備

    檢查
    ceph -s
    狀态是HEALTH_ERR,無osd,mon節點都已經加入
           

增加monitor節點

---------------------手動增加monitor節點--------------------------
增加 Monitor(手動)
、在目标節點上,建立 mon 的預設目錄。{mon-id} 一般取為節點的 hostname 。
ssh {new-mon-host}
sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
、建立一個臨時目錄(和第  步中的目錄不同,添加 mon 完畢後需要删除該臨時目錄),來存放新增 mon 所需的各種檔案,
mkdir {tmp}
、擷取 mon 的 keyring 檔案,儲存在臨時目錄下。
ceph auth get mon. -o {tmp}/{key-filename}
、擷取叢集的 mon map 并儲存到臨時目錄下。
ceph mon getmap -o {tmp}/{map-filename}
、格式化在第  步中建立的 mon 資料目錄。需要指定 mon map 檔案的路徑(擷取法定人數的資訊和叢集的 fsid )和 keyring 檔案的路徑。
sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
、啟動節點上的 mon 程序,它會自動加入叢集。守護程序需要知道綁定到哪個 IP 位址,可以通過 --public-addr {ip:port} 選擇指定,或在 ceph.conf 檔案中進行配置 mon addr。
ceph-mon -i {mon-id} --public-addr {ip:port}
---------------------手動删除monitor節點-------------------------
删除 Monitor(手動)

當你想要删除一個 mon 時,需要考慮删除後剩餘的 mon 個數是否能夠達到法定人數。
、停止 mon 程序。
stop ceph-mon id={mon-id}
、從叢集中删除 monitor。
ceph mon remove {mon-id}
、從 ceph.conf 中移除 mon 的入口部分(如果有)。

---------------------ceph-deploy在叢集中删除或者添加一個monitor節點---------
a.移除ceph.conf中的monitor節點
b.将ceph.conf推送到各個節點 ceph-deploy  --overwrite-conf  config  push  ceph1  ceph2  
c.删除monitor   ceph-deploy  mon  destroy  ceph1

a.添加ceph.conf中的monitor中的節點
b.将ceph.conf推送到各個節點 ceph-deploy  --overwrite-conf  config  push  ceph1  ceph2   
c.增加一個monitor節點 ceph-deploy  --overwrite-conf  mon  create  ceph1

當添加或删除Monitor後,檢視選舉狀态
ceph  quorum_ status  --format  json-pretty
           

安裝OSD節點

---------------------手動安裝OSD節點--------------------------    
    手動安裝OSD節點
    檢查硬碟情況
    megacli64 檢查Raid卡狀态,確定是Cached, WriteBack, No Cache if no BBU
    yum install disktest 測試硬碟性能

    所有osd節點用手動安裝的方式, 使用root使用者

    建立osd号
    ceph osd create
    傳回一個數字,這個數字就是osd的唯一号,記錄為{osd-number}
    ceph osd tree
    檢查出現osd,狀态是down.
    準備ceph osd檔案夾
    mkdir /var/lib/ceph/osd/ceph-{osd-number}
    #如果是普通硬碟
    mkfs -t xfs -i size= /dev/disk
    #如果是RAID0
    mkfs -t xfs -i size= -d su=k -d sw= /dev/disk
    mount -o noatime,nodiratime,inode64 /dev/disk /var/lib/ceph/osd/ceph-{osd-number}
    在檔案夾内建立osd keyring等資料

    ceph-osd -i {osd-num} --mkfs --mkkey
    檢查檔案夾/var/lib/ceph/osd/ceph-{osd-number}内容, 并建立sysvinit

    touch  /var/lib/ceph/osd/ceph-{osd-number}/sysvinit
    添加osd權限

    ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring   
    檢查權限是否已經添加

    ceph auth list
    加入osd,權值代表T,所有如果是G硬碟,就為

    ceph osd crush add osd.{osd-num} {weight} root=default host={機器名}
    檢查osd清單

    ceph osd tree
    啟動ceph osd

    /etc/init.d/ceph start osd
    檢查是否加入叢集

    ceph osd tree
    ceph -s
-------------------------ceph-deply快速搭建osd節點-------------------------
ceph-deploy osd --zap-disk create test-98:/dev/sdb  test-98:/dev/sdc  test-95:/dev/sdb test-95:/dev/sdc   test-55:/dev/sdb  test-55:/dev/sdc
--zap-disk 擦除分區
#如果使用的是目錄而不是磁盤的話:
ceph-deploy osd prepare osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd activate osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd create --zap-disk bj-tdxy-ceph-144-128:/dev/sdb %s:/dev/sdc %s:/dev/sdd %s:/dev/sde %s:/dev/sdf
------------------增加 OSD( ceph-deploy )-------------------------------

還可以通過 ceph-deploy 工具很友善的增加 OSD。
、登入 ceph-deploy 工具所在的 Ceph admin 節點,進入工作目錄。
ssh {ceph-deploy-node}
cd /path/ceph-deploy-work-path
、列舉磁盤。
執行下列指令列舉一節點上的磁盤:
ceph-deploy disk list {node-name [node-name]...}
、格式化磁盤。
用下列指令格式化(删除分區表)磁盤,以用于 Ceph :
ceph-deploy disk zap {osd-server-name}:{disk-name}
ceph-deploy disk zap osdserver1:sdb
重要: 這會删除磁盤上的所有資料。
、準備 OSD。
ceph-deploy osd prepare {node-name}:{data-disk}[:{journal-disk}]
ceph-deploy osd prepare osdserver1:sdb:/dev/ssd
ceph-deploy osd prepare osdserver1:sdc:/dev/ssd
prepare 指令隻準備 OSD 。在大多數作業系統中,硬碟分區建立後,不用 activate 指令也會自動執行 activate 階段(通過 Ceph 的 udev 規則)。
前例假定一個硬碟隻會用于一個 OSD 守護程序,以及一個到 SSD 日志分區的路徑。我們建議把日志存儲于另外的驅動器以最優化性能;你也可以指定一單獨的驅動器用于日志(也許比較昂貴)、或者把日志放到 OSD 資料盤(不建議,因為它有損性能)。前例中我們把日志存儲于分好區的固态硬碟。
注意: 在一個節點運作多個 OSD 守護程序、且多個 OSD 守護程序共享一個日志分區時,你應該考慮整個節點的最小 CRUSH 故障域,因為如果這個 SSD 壞了,所有用其做日志的 OSD 守護程序也會失效。
、準備好 OSD 後,可以用下列指令激活它。
ceph-deploy osd activate {node-name}:{data-disk-partition}[:{journal-disk-partition}]
ceph-deploy osd activate osdserver1:/dev/sdb1:/dev/ssd1
ceph-deploy osd activate osdserver1:/dev/sdc1:/dev/ssd2
activate 指令會讓 OSD 進入 up 且 in 狀态。該指令使用的分區路徑是前面 prepare 指令建立的。
           

radosgw搭建

-------------------------radosgw搭建-------------------------------------------
yum  install  -y  ceph-radosgw  radosgw-agent  在相關節點上安裝對象網管
a.  建立keyring
ceph-authtool  --create-keyring  /etc/ceph/ceph.client.radosgw.keyring
chmod  +r  /etc/ceph/ceph.client.radosgw.keyring
b.  建立key
ceph-authtool  /etc/ceph/ceph.client.radosgw.keyring  \
  -n  client.radosgw.gateway --gen-key
c.  Add capabilities to Key
ceph-authtool  -n  client.radosgw.gateway  --cap  osd  'allow rwx' \
  --cap  mon  'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
d.  Add the key to Ceph Storage Cluster
ceph  -k  /etc/ceph/ceph.client.admin.keyring  auth  add  client.radosgw.gateway \
  -i  /etc/ceph/ceph.client.radosgw.keyring
如果其他節點需要ceph.client.radosgw.keyring,可以推送到/etc/ceph目錄下
e.  Add gateway configuration to /etc/ceph/ceph.conf
[client.radosgw.gateway]
host = ceph1
keyring = /etc/ceph/ceph.client.radosgw.keyring
rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
log file = /var/log/radosgw/client.radosgw.gateway.log
√ 啟動radosgw服務(預設監聽7480端口)
#/usr/bin/radosgw  -c  /etc/ceph/ceph.conf  -n  client.radosgw.gateway
√ 建立使用者
#sudo radosgw-admin user create --uid=ningyougang --display-name=ningyougang [email protected]

------------------------------------------部署rados gateway---------------------------------------------------------
注意,必須在叢集部署成功之後才能繼續部署rados gateway. 注意,一下操作都是在ceph的存儲節點上進行的,即必須要在跑ceph程序的節點上運作。

安裝ceph-radosgw
yum install ceph-radosgw -y
登陸到ceph存儲節點上,建立rados gateway需要的pool.
zone=default
ceph osd pool create ${zone}.rgw.data.root  
ceph osd pool create .rgw.root  
ceph osd pool create ${zone}.rgw.control  
ceph osd pool create ${zone}.rgw.gc  
ceph osd pool create ${zone}.rgw.buckets.data  
ceph osd pool create ${zone}.rgw.buckets.index  
ceph osd pool create ${zone}.rgw.buckets.non-ec  
ceph osd pool create ${zone}.rgw.log  
ceph osd pool create ${zone}.rgw.intent-log  
ceph osd pool create ${zone}.rgw.usage  
ceph osd pool create ${zone}.rgw.users.keys  
ceph osd pool create ${zone}.rgw.users.email  
ceph osd pool create ${zone}.rgw.users.uid  
ceph osd pool create ${zone}.rgw.meta  

建立keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
sudo chmod +r /etc/ceph/ceph.client.radosgw.keyring
sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key
sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring
sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring
追加rados gateway配置到/etc/ceph/ceph.conf
把以下内容追加到/etc/ceph/ceph.conf的最後,其中最後一行的host為本地的hostname。

[client.radosgw.gateway]
rgw dns name = mytests3.com
keyring = /etc/ceph/ceph.client.radosgw.keyring
log file = /var/log/radosgw/client.radosgw.gateway.log
rgw_thread_pool_size = 
rgw_num_async_rados_threads = 
rgw frontends = civetweb port= request_timeout_ms= access_log_file=/var/log/radosgw/access.log  這裡是沒有用nginx作為負載均衡器轉發,是以端口還是端口。
rgw_override_bucket_index_max_shards = 
host = $(hostname -s)

建立日志目錄
mkdir -p /var/log/radosgw
重新開機rados gateway
systemctl restart [email protected]
檢視是否存在/usr/bin/radosgw程序。
ps aux|grep radosgw
如果不存在,說明有問題,請檢視/var/log/radosgw/client.radosgw.gateway.log日志.

驗證端口是否能正常工作
curl localhost
是否能夠傳回一個xml:

<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
如果能,說明gateway已經部署成功了.

建立使用者和ak/sk
運作一下指令之後,就能得到一組ak/sk

radosgw-admin user create --uid=leengine --display-name="leengine"
ak/sk以為keys下,輸出形如:

    "keys": [
        {
            "user": "leengine",
            "access_key": "aaasda",
            "secret_key": "sgbweogwe"
        }
    ],
這個key之後可以通過一下指令行查詢:

radosgw-admin user info --uid=leengine
在其他節點上部署rados gateway
隻需将已經部署好的節點的/etc/ceph/ceph.client.radosgw.keyring拷貝到新的節點上,并參照第步追加新節點的/etc/ceph/ceph.conf. 不需要在其他節點上進行其他操作。
           
----------------------------------nginx負載均衡機-----------------------------------------------------------------------
------------------------------------dnsmasq------------------------------------------------------------------------------------
yum install dnsmasq 
vim /etc/dnsmasq.conf

conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
resolv-file=/etc/resolv.dnsmasq.conf  //這裡面配置的是公網dns的配置 
conf-dir=/etc/dnsmasq.d               //這個裡面配置的是使用者配置的本地生效的dns配置,或者在下面這樣配置也是可以的。
listen-address=
#address=/.s3.lecloud.com/127.0.0.1
address=/.s3bjtest.lecloud.com/
address=/.s3-bj.lecloud.com/
address=/.s3-gd.lecloud.com/
address=/.replicate.com/
address=/.mytests3.com/ 
address=/mytests3.com/    配置一下域名和對應的IP位址

systemctl restart  dnsmasq.service       開啟dnsmasq服務
---------------------------------s3cmd搭建---------------------------------------------------------------
yum install s3cmd 
修改~/.s3cfg
[default]
access_key = ss
secret_key = ss
default_mime_type = binary/octet-stream
enable_multipart = True
encoding = UTF-
host_base = mytests3.com
host_bucket = %(bucket)s.mytests3.com
use_https = False
put_continue = True
multipart_chunk_size_mb = 
recursive = True
signature_v2 = True

s3md 直接發端口的radosgw上。
測試指令: s3cmd mb s3://test01 -d (debug模式) -c (指定配置檔案)
------------------------------------------------------------------------------------------------
           

ceph運維操作

ceph運維操作:

ceph -s  叢集整體目前狀态情況檢視
ceph -w  實時狀态檢視
ceph df  ceph存儲空間檢視
ceph osd tree  檢視osd狀态
ceph osd dump  檢視pool設定的資訊和osd設定資訊和各種狀态
--------pool相關操作-------
ceph osd lspools  檢視pools
ceph osd pool create images    建立一個image名稱的pool,包涵個pgnum  (pgsnum = (osd數量 * ) / 副本數 向上對齊)
ceph  osd  pool  set  images  size      #設定pool:images的副本數為3
  ceph osd pool set rbd pg_num 
  ceph osd pool set rbd  pgp_num   設定pool的pg數目
ceph  osd  pool  set-quota  images  max_objects     #設定pool最大對象數
ceph  osd  pool  delete  images  images  --yes-i-really-really-mean-it  删除images pool
ceph osd pool set {rbdpool} min_size   修改ceph資料的最小副本數和副本數
ceph osd pool set {rbdpool} size 
ceph osd pool set {rbdpool} target_max_bytes   設定池的最大的存儲空間為T
ceph osd pool set-quota {rbdpool} max_objects   為叢集pool設定配額,達到預警前叢集會告警,達到上限之後就不在寫入資料
ceph osd pool rename {current——pool-name} {new-pool-name} 重命名pool
rados df 展示pool統計
ceph osd pool get {pool-name} {key} 擷取pool相關的參數值
ceph osd dump |grep '參數'
要設定一個存儲池的選項值,執行指令:
ceph osd pool set {pool-name} {key} {value}
常用選項介紹:
size:設定存儲池中的對象副本數,詳情參見設定對象副本數。僅适用于副本存儲池。
min_size:設定 I/O 需要的最小副本數,詳情參見設定對象副本數。僅适用于副本存儲池。
pg_num:計算資料分布時的有效 PG 數。隻能大于目前 PG 數。
pgp_num:計算資料分布時使用的有效 PGP 數量。小于等于存儲池的 PG 數。
crush_ruleset:
hashpspool:給指定存儲池設定/取消 HASHPSPOOL 标志。
target_max_bytes:達到 max_bytes 閥值時會觸發 Ceph 沖洗或驅逐對象。
target_max_objects:達到 max_objects 閥值時會觸發 Ceph 沖洗或驅逐對象。
scrub_min_interval:在負載低時,洗刷存儲池的最小間隔秒數。如果是  ,就按照配置檔案裡的 osd_scrub_min_interval 。
scrub_max_interval:不管叢集負載如何,都要洗刷存儲池的最大間隔秒數。如果是  ,就按照配置檔案裡的 osd_scrub_max_interval 。
deep_scrub_interval:“深度”洗刷存儲池的間隔秒數。如果是  ,就按照配置檔案裡的 osd_deep_scrub_interval 。

 可調選項
、調整現有叢集上的可調選項。注意,這可能會導緻一些資料遷移(可能有 % 之多)。這是推薦的辦法,但是在生産叢集上要注意此調整對性能帶來的影響。此指令可啟用較優可調選項:
ceph osd crush tunables optimal(調整叢集參數到最優的狀态)
如果切換得不太順利(如負載太高)且切換才不久,或者有用戶端相容問題(較老的 cephfs 核心驅動或 rbd 用戶端、或早于 bobtail 的 librados 用戶端),你可以這樣切回:
ceph osd crush tunables legacy(調整叢集的參數到預設的狀态)
、不對 CRUSH 做任何更改也能消除報警,把下列配置加入 ceph.conf 的 [mon] 段下:
mon warn on legacy crush tunables = false
為使變更生效需重新開機所有螢幕,或者執行下列指令:
ceph tell mon.\* injectargs --no-mon-warn-on-legacy-crush-tunables

--------對象存儲-----------
rados  put  test-object-  a.txt  --pool=data 建立對象
rados -p   data ls 檢視pool中的對象
ceph osd map data  test-object- 确定對象的存儲的位置
rados rm test-object- --pool=data 删除對象
rados ls -p poolname  列出poolname中所有的objects


---------檢視crushMap--------
ceph osd getcrushmap -o crush.out
crushtool -d crush.out -o crush.txt
ceph osd crush dump
ceph osd crush rule dump   //将rule結果調出來

ceph osd 維護模式
ceph osd set noout
/etc/init.d/ceph stop osd.{osd-num}
ceph osd crush rule rm {rule name}   從crush中删除一個rule

----------ceph injectargs 維護模式--------
#How often an Ceph OSD Daemon pings its peers (in seconds).
#預設為6
ceph tell osd.* injectargs '--osd-heartbeat-interval 10'

#The elapsed time when a Ceph OSD Daemon hasn’t shown a heartbeat that the Ceph Storage Cluster considers it down.
#預設為20
ceph tell osd.* injectargs '--osd-heartbeat-grace 30'
-----------維護完成------------------------
/etc/init.d/ceph start osd.{osd-num}
ceph osd unset noout

------------radosgw運維--------------------(ceph底層是沒有權限控制的,權限控制在上層的radosgw進行提供,如果是s3cmd的話隻能檢視自己的相關資訊)
建立使用者
#sudo  radosgw-admin  user  create  --uid=newtouchstep  --display-name=newtouchstep [email protected]
修改使用者
#sudo  radosgw-admin user  modify  --uid=newtouchstep  --display-name=newtouchstep [email protected]
檢視使用者資訊
#sudo  radosgw-admin  user  info  --uid=newtouchone
删除使用者
#sudo  radosgw-admin    user  rm  --uid=newtouchone  #沒有資料才可以删除
#sudo  radosgw-admin   user  rm  --uid=newtouchone   --purge-data #删除使用者删除資料
暫停使用者使用
#sudo  radosgw-admin   user  suspend   --uid=newtouchone
使用者生效
#sudo  radosgw-admin  user  enable   --uid=newtouchone
使用者檢查
#sudo  radosgw-admin    user  check   --uid=newtouchone
查詢bucket
#sudo  radosgw-admin  bucket  list    查詢所有的bucket 資訊
查詢指定bucket的對象
#sudo  radosgw-admin  bucket  list  --bucket=images
統計bucket資訊
#sudo  radosgw-admin  bucket  stats     #查詢所有bucket統計資訊
#sudo  radosgw-admin  bucket  stats  --bucket=images  #查詢指定bucket統計資訊
删除bucket
删除pucket(但是不删除object,加上bucket後恢複)
#sudo  radosgw-admin  bucket  rm  --bucket=images
删除bucket後同時删除object
#sudo  radosgw-admin  bucket  rm  --bucket=images   --purge-objects
檢查bucket
#sudo  radosgw-admin  bucket  check
删除object
#sudo  radosgw-admin  object  rm  --bucket=attach  --object=fanbingbing.jpg
為bucket設定配額
#sudo  radosgw-admin  quota  set  --max-objects=200   --max-size=10000000000 --quota-scope=bucket  --bucket=images
#sudo  radosgw-admin  quota  enable   --quota-scope=bucket   --bucket=images  
#sudo  radosgw-admin  quota  disable   --quota-scope=bucket  --bucket=images
為帳号設定配額
#sudo  radosgw-admin  quota  set  --max-objects=2  --max-size=100000  --quota-scope=user --uid=newtouchstep
#sudo  radosgw-admin  quota  enable   --quota-scope=user  --uid=newtouchstep
#sudo  radosgw-admin  quota  disable   --quota-scope=user  --uid=newtouchstep

radosgw-admin metadata get bucket:maoweitest02  檢視bucket的詳細資訊 包括ID号,存儲的位置,建立的時間,擁有者

#添加使用者權限,允許其讀寫users權限
radosgw-admin caps add  --uid=admin --caps="users=*"
radosgw-admin caps add --uid=admin --caps="usage=read,write"

---------------/etc/init.d/ceph的使用(關閉這個叢集上的所有的ceph相關程序,包括mon。mds.osd 等程序)-------------
/etc/init.d/ceph start 、stop、restart   單節點啟動、關閉、重新開機ceph叢集
/etc/init.d/ceph -a start 、stop、 restart  所有節點啟動、關閉、重新開機ceph叢集
service ceph start 、stop、restart   把ceph當做service服務
service ceph start -a start、stop、restart
/etc/init.d/ceph start osd
service ceph start osd

-----------檢視monitor的狀态-------------------------------
ceph mon stat   檢視mon的狀态資訊
ceph mon dump   檢視mon的映射資訊
ceph quorum_status    檢查mon的選舉狀态
ceph mon remove test-  删除一個mon節點
ceph quorum_status -f json-pretty  産看monitor的選舉情況

-----------osd相關操作-------------------------------------
ceph osd df  詳細列出叢集每塊磁盤的使用情況,包括大小、權重多少空間率等 
ceph osd down   把osd給down掉,主要是标記為down
ceph osd  in    把osd标記為in
ceph osd rm  在叢集中删除一個osd硬碟
ceph osd crush rm  osd 在叢集中删除一個osd硬碟crush map
ceph osd crush set osd   host=node241 設定osd crush的權重為
ceph osd out osd  此時osd的reweight變為,此時不在此節點上配置設定資料,但是osd程序裝置還在
ceph osd in osd   将逐出的osd加入到叢集中
ceph osd pause      暫停整個叢集的osd,此時叢集不能接受資料
ceph osd unpause     再次開啟接受資料
ceph osd set nodown  設定标志flags,不允許關閉osd,解決網絡不穩定,osd狀态不斷切換的問題
ceph osd unset nodown 取消設定
ceph osd lost {id} [--yes-i-really-mean-it]  把OSD 标記為丢失,有可能導緻永久性資料丢失,慎用!

------------rados指令相關操作--------------------------------
rados是和ceph的對象存儲叢集進行通信的方式
rados lspools <====>ceph osd pool ls 檢視叢集裡面有多少個pool
rados mkpool test_pool 建立一個pool
rados create test_object -p test_pool 建立一個對象
rados -p test_pool ls 檢視test_pool下所有的對象檔案
rados rm test_object  -p test_pool 删除一個pool中指定的對象
rados rmpool test_pool test_pool -yes-i-really-really-mean-it 删除pool池和它中的資料
rados -p test_pool put test_object xx.txt上傳一個對象到test_pool
rados bench  write  rand -t  -b  -p test_pool  使用rados進行 性能測試
ceph --admin-daemon /var/run/ceph/ceph-client.radosgw.gateway.asok config set debug_rgw 20/20  修改radosgw的日志等級

------------pg相關操作---------------------------------------
ceph pg dump <===> ceph pg ls 檢視pg組的映射關系
ceph pg map  檢視一個pg的map映射
ceph pg stat  檢視pg的狀态
ceph pg  query 檢視一個pg的詳細資訊
ceph pg scrub {pg-id} 洗刷一個pg組
ceph pg dump_stuck unclean  檢視pg中的各種pg狀态
ceph pg dump_stuck inactive
ceph pg dump_stuck stable 
ceph pg dump --format plain (純文字)顯示一個叢集中所有的pg統計
             --format json  (json格式)
要查詢某個 PG,用下列指令:
ceph pg {poolnum}.{pg-id} query
為找出卡住的歸置組,執行:
ceph pg dump_stuck [unclean|inactive|stale|undersized|degraded]

ceph tell mon.FOO injectargs --debug_mon 10/10   設定mon的日志等級
檢視mon的配置檔案資訊
ceph daemon mon.FOO config show
or:
ceph daemon mon.FOO config get 'OPTION_NAME'
           

其他常用指令

-----------------------------------------------------------------------------
more /etc/redhat-release   檢視Linux系統版本
uname -a  檢視Linux核心版本
ceph -v   檢視ceph版本
ceph-deploy  --version  檢視ceph-deploy版本
ceph mon_status  檢視monitor的狀态
lsblk  檢視osd磁盤挂載情況
ceph df 檢查叢集的資料使用量及其在存儲池内的分布情況
#檢視ceph預設的配置檔案的設定内容:
ceph --show-config
           

centos7指令模式

centos7指令模式:
1.停止某個節點上的某個指定的守候程序:啟動某個節點上某個指定的守候程序:
systemctl stop/restart/start ceph-osd@{id}
systemctl stop/restart/start ceph-mon@{hostname}[.service]
systemctl stop/restart/start ceph-mds@{hostname}[.service]
按類型啟動某個節點上某一類守護程序:
systemctl start/stop/restart ceph-osd.target
systemctl start/stop/restart ceph-mon.target
systemctl start/stop/restart ceph-mds.target
停止某一個節點上的所有的守護程序:
systemctl start/stop/restart   ceph\*.service ceph\*.target
systemctl start ceph.target

列出本節點中所有的ceph程序,為什麼能用,因為在crushmap中有啊!!!!是以針對的是運維而不是搭建
systemctl status ceph\*.service ceph\*.target
啟動/停止某一ceph節點上所有的守候程序
systemctl start ceph.target
systemctl stop ceph\*.service ceph\*.target

ceph auth list  檢視所有的auth
關閉一個ceph叢集:
首先關閉每個節點上的osd,然後關閉mon

#檢視目前osd的配置檔案資訊
 ceph --admin-daemon /var/run/ceph/ceph-osd.asok config show | grep osd_journal

--------------------------------------------------------------------------
如果你的配置檔案或 keyring 檔案不在預設路徑下,你得在指令中指定:
這個就解決了一個跳闆機維護多個ceph叢集的功能,但是操作相對來說比較麻煩:
ceph -c /path/to/conf -k /path/to/keyring health

--------------------------------------------------------------------------
 使用管理套接字
Ceph 管理套接字允許你通過套接字接口查詢守護程序,它們預設存在于 /var/run/ceph 下。要通過管理套接字通路某個守護程序,先登入它所在的主機、再執行下列指令:
ceph daemon {daemon-name}
ceph daemon {path-to-socket-file}
比如,這是下面這兩種用法是等價的:
ceph daemon osd foo
ceph daemon /var/run/ceph/ceph-osd.asok foo
用下列指令檢視可用的管理套接字指令:
ceph daemon {daemon-name} help
管理套接字指令允許你在運作時檢視和修改配置。
另外,你可以在運作時直接修改配置選項(也就是說管理套接字會繞過 Mon,不要求你直接登入宿主主機,不像 ceph {daemon-type} tell {id} injectargs 會依賴螢幕)。

寫入M的object資料:
--> first M osd.primary journal --> osd.primary --> osd.secondary journal --> osd.secondary --> second M osd.primary journal --> osd.primary --> and so on...

[mon.a]
        host = host01
        addr = :
[mon.b]
        host = host02
        addr = :
[mon.c]
        host = host03
        addr = :

ceph monitor 的選舉展示:
 ceph quorum_status --format json-pretty
----------------------------------------------------------------------------------
rados  ls -p  rbd  檢視一個pool下面的對象
rados -p test rm my-object  删除一個對象
rados mkpool test  建立一個pool
rados rmpool test test  --yes-i-really-really-mean-it 删除一個pool
rados lspools
ceph osd lspools
rados -p test put my-object  data/file   上傳一個資料到對象my-object
rados -p test stat my-object    檢視對象狀态
ceph osd map test my-object     檢視pool到對象到osd的映射
find /var/lib/ceph/osd/ceph-x/current/  -name  檢視存儲到osd的資料

--------------------------------------------------------------------------------------
s3cmd setacl --acl-private s3://testpool  設定bucket和object的acl
# 建立s3使用者key
radosgw-admin key create --uid='user_id' --key-type=s3 --gen-secret  --gen-access-key
# 建立swift使用者key
radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret
# 删除s3使用者key
radosgw-admin key rm --uid='testuser'  --access-key=JEB64N3OFDODAZAIZ8H
# 删除swift使用者key
radosgw-admin key rm --subuser=testuser:swift --key-type=swift
# 列出所有的使用者
radosgw-admin meatadata list user
           

繼續閱讀