ceph 運維部署文檔(cenos 7.0以上)

ceph塊存儲設備手動部署指導

Ceph和GPFS比較

  1. GPFS於1993年研發,1995年投入商用,適用於高性能計算和並行處理。之前都是共享存儲,從3.5版本開始新增了FPO模式,採用Share Nothing架構,性能好歷史悠久,支持AIX、LINUX、windows。CEPH從2010年加入LINUX版本,最初設計的RADOS是爲其實現一個高性能的文件系統服務的,後來考慮支持塊設備、對象存儲,向雲計算靠攏。但目前只支持linux,aix、windows的還需要開發才能支持。
  2. 從海量存儲架構上看。GPFS通過將文件分佈在多個節點和磁盤上,可以超越單一節點和單一文件系統的性能極限,支持PB級海量存儲,目前使用模式多是多節點共享存儲並行訪問。CEPH是統一分佈式存儲系統,具有優異的性能、可靠性、可擴展性,其CRUSH算法去中心化,從客戶端感知數據分佈,另外還可以根據機架感知等來調整Crushmap,例如可以具體到某個磁盤,某個機器,某個機架,甚至是某個DC,這樣就可以考慮到機房、機架、機器這樣的存儲層次,在每層設置不同的存儲策略,從而達到較好的效果。只有在增加/刪除設備時才需要改動存儲層次,方便了數據管理和提高了效率。
  3. 從高性能上看。GPFS通過將I/O分佈在多個硬盤提高性能,能夠高效工作在1個節點到4000多個節點的集羣環境中,還有就是很好的支持SSD盤和閃存陣列。Ceph最開始是爲HDD設計的,沒有充分考慮全SSD,甚至更先進的PCIe SSD和NVRAM的情況NVRAM。導致這些硬件的物理性能在Ceph中無法充分發揮出來,特別是延遲和IOPS,受比較大的影響。
  4. 從可靠性上看。在GPFS的環境中,某一節點的硬盤連接丟失,不會影響到其他的節點,GPFS使用RSCT的功能持續的監控不同文件模塊的健康狀態,當任一錯誤被檢測到時,相應的恢復動作將自動執行。GPFS還提供了額外的日誌和恢復功能,可以維持元數據的一致性。最大三副本,可支持節點的自動Failover。CEPH的rados採用強一致性設計,可容忍網絡中斷、掉電、服務器宕機、硬盤故障等,並進行自動修復,保證數據的可靠性和系統可用性。也是同樣的三副本設計,支持節點的自動Failover。Monitors是Ceph的管家,維護着Ceph的全局狀態。Monitors的功能和zookeeper類似,它們使用Quorum和Paxos算法去建立全局狀態的共識。其OSDs可以進行自動修復,而且是並行修復。
  5. 從工業標準看。GPFS是商用的,經歷大量生產環境和實踐的檢驗,相對來說成熟穩定。CEPH是開源的,2010年加入到LINUX中,還未經歷大量生產環境的檢驗和複雜業務場景的企業實踐驗證,還不夠成熟完善。但總的來說,Ceph瑕不掩瑜,仍然是一個優秀,甚至出色的開源存儲系統。

部署前環境配置


  • 環境部署信息
本手順安裝架構:
    Ceph-deploy 1個
    MON 2個
    OSD 3個

CentOS 7:
    ceph-deploy + mon1(mon1)
       10.53.16.190
    mon2(mon2)
       10.53.16.191
    osd(node1)
       10.53.16.192
    osd(node2)
       10.53.16.193
    osd(node3)
       10.53.16.194
  • 修改所有節點的主機名字 以及 /etc/hosts
1. 每個節點修改主機名:
    hostnamectl set-hostname mon1
    hostnamectl set-hostname mon2
    hostnamectl set-hostname node1
    hostnamectl set-hostname node2
    hostnamectl set-hostname node3

2. 修改mon1節點的hosts文件
    vim /etc/hosts
    10.53.16.190 mon1
    10.53.16.191 mon2
    10.53.16.192 node1
    10.53.16.193 node2
    10.53.16.194 node3

3. ping測試節點連通性
    ping -c 3 mon1
    ping -c 3 mon2
    ping -c 3 node1
    ping -c 3 node2
    ping -c 3 node3
  • 爲mon1添加epel, 更新rpm源
1. 添加epel源
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*

2. 添加 Ceph 源:
sudo vim /etc/yum.repos.d/ceph.repo

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

3. 更新軟件包:
sudo yum update -y && sudo yum install yum-plugin-priorities

如果yum出現問題,請重新刪除repo
rm -f mv /etc/yum.repos.d/epel.repo

  • 爲每個節點添加防火牆規則以及關閉selinux
    1. 關閉selinux
           sudo setenforce 0

    2. 關閉防火牆或者自己添加防火牆規則
        1. 添加 Calamari端口
        sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
        sudo firewall-cmd --zone=public --add-port=2003-2004/tcp --permanent
        sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent

        2. 添加 mon 節點端口
                  sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent

        3. 添加mon節點和node節點端口
                  sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
                  sudo firewall-cmd --zone=public --add-port=2003-2004/tcp --permanent
                  sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
  • 在所有節點安裝ntp服務
 sudo yum install ntp ntpdate ntp-doc -y
  • 添加系統賬戶ceph,並且設置root權限
useradd -d "/home/ceph"  -m ceph
passwd ceph
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
sudo chmod 0440 /etc/sudoers.d/ceph
  • 重啓所有節點服務器
init 6
  • 配置mon1的ssh, 免密訪問所有節點
1. 生成ssh-key
    ssh-keygen(無需輸入任何內容,一直enter生成完成)
    ssh-copy-id ceph@mon1
    ssh-copy-id ceph@mon2
    ssh-copy-id ceph@node1
    ssh-copy-id ceph@node2
    ssh-copy-id ceph@node3

2. 修改 ~/.ssh/config
Host mon1
    Hostname mon1
    User ceph
Host mon2
    Hostname mon2
    User ceph
Host node1
    Hostname node1
    User ceph
Host node2
    Hostname node2
    User ceph
Host node3
    Hostname node3
    User ceph           
  • 拷貝mon1的服務器的/etc/hosts文件到所有節點
scp /etc/hosts root@mon2:/etc/hosts
scp /etc/hosts root@node1:/etc/hosts
scp /etc/hosts root@node2:/etc/hosts
scp /etc/hosts root@node3:/etc/hosts

ceph集羣部署


  • 在mon1節點上安裝ceph-deploy服務
sudo yum install ceph-deploy -y
  • 在mon1節點上創建ceph配置目錄
mkdir -p ~/ceph_cluster
cd ~/ceph_cluster
  • 指定mon1爲管理節點
ceph-deploy new mon1

安裝出現以下錯誤,請重新指定其他其他服務器管理節點
[ceph_deploy][ERROR ] UnsupportedPlatform: Platform is not supported: centos

  • 修改配置文件
vim ceph.conf
osd pool default size = 3    //修改副本數量,建議爲3個
public network = 10.53.16.0/24 //注意 mon_host 必須在 public network 網絡的網段內
cluster network = 10.0.0.0/8 //集羣的工作網段,用於集羣的數據同步,心跳等等
  • 在所有節點安裝Ceph
sudo ceph-deploy install mon1 node1 node2
  • 初始化 monitor
ceph-deploy mon create-initial
  1. 如果啓動失敗,請查看當前系統賬戶是否是ceph賬戶

  2. 確認是否啓動成功

    ps -ef | grep ceph
    root 7097 1289 0 13:35 ? 00:00:00 sshd: ceph [priv]
    ceph 7105 7097 0 13:35 ? 00:00:00 sshd: ceph@pts/1
    ceph 7108 7105 0 13:35 pts/1 00:00:00 -bash
    ceph 7879 1 0 5月11 ? 00:00:13 /usr/bin/ceph-mon -f --cluster ceph --id mon2 --setuser ceph --setgroup ceph
    root 9107 1289 0 14:11 ? 00:00:00 sshd: ceph [priv]
    ceph 9110 9107 0 14:11 ? 00:00:00 sshd: ceph@pts/2
    ceph 9119 9110 0 14:11 pts/2 00:00:00 -bash
    ceph 9174 9119 0 14:11 pts/2 00:00:00 ps -ef
    ceph 9175 9119 0 14:11 pts/2 00:00:00 grep --color=auto ceph

3.使用下面命令確認每個節點是否順利啓動ceph

systemctl status ceph-mon@mon1.service
systemctl status ceph-mon@node1.service
systemctl status ceph-mon@node2.service
  1. 遇到獲取keyring失敗,查看ceph.conf的public network設置爲同一網段或者查看網卡是否存在多個ip地址
    [mon1][ERROR ] "ceph auth get-or-create for keytype admin returned -1
    [mon1][ERROR ] Failed to return 'admin' key from host mon1
    [ceph_deploy.gatherkeys][ERROR ] Failed to connect to host:mon1
    [ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpAz3hQe
    [ceph_deploy][ERROR ] RuntimeError: Failed to connect any mon
如果沒有任何日誌報錯的話,以上ceph集羣就順利啓動了

創建OSD磁盤


爲每個osd節點分配獨立的磁盤,與系統的磁盤隔離開來,以及爲ceph日誌文件也隔離獨立磁盤, 保證數據安全性,可靠性以及性能#### 建議創建osd磁盤在10個以上

  • 使用裸盤作爲OSD(推薦使用,這樣性能比較好)
    1. 在節點上查看裸盤路徑
        fdisk -l
    2. 在mon1部署節點上添加裸盤
        ceph-deploy disk zap node1:/dev/sdb node2:/dev/sdb
        ceph-deploy osd prepare node1:/dev/sdb node2:/dev/sdb
        ceph-deploy osd activate node1:/dev/sdb1 node2:/dev/sdb1
  • 使用文件夾作爲OSD
1. 爲node1節點和node2節點創建文件夾
ssh ceph@node1
mkdir /var/local/osd1
sudo chmod 777 /var/local/osd1
exit

ssh ceph@node2
mkdir /var/local/osd2
sudo chmod 777 /var/local/osd2
exit

2. 在mon1節點上激活osd
    ceph-deploy osd prepare node1:/var/local/osd1 node2:/var/local/osd2
    sudo ceph-deploy osd activate node1:/var/local/osd1 node2:/var/local/osd2
3. 查看節點是否成功部署
    ceph osd tree
  • 推送配置文件到所有節點
ceph-deploy admin mon1 node1 node2
  • 查看ceph集羣狀態
ceph health
  1. 出現找不到/etc/ceph/ceph.client.admin.keyring的錯誤,請修改權限 chmod 777 /etc/ceph/ceph.client.admin.keyring
    2018-05-15 20:26:27.442992 7f29a8b6b700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
    2018-05-15 20:26:27.443003 7f29a8b6b700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
    2018-05-15 20:26:27.443004 7f29a8b6b700 0 librados: client.admin initialization error (2) No such file or directory
    Error connecting to cluster: ObjectNotFound

ceph節點的增加

  • 增加mon節點
1. 編輯部署節點hosts文件,添加新mon節點的ip,拷貝到要部署的mon節點中
    sudo scp /etc/hosts root@mon4:/etc/hosts

2. 在新的mon節點上安裝ntp
     sudo yum install ntp ntpdate ntp-doc -y

3. 在部署節點部署ceph
    ceph-deploy install mon4

4. 將新的節點添加到ceph 集羣中
     ceph-deploy mon add mon4
  1. 出現如下部署錯誤,請查看部署節點的ceph.conf文件的public network設置爲公網的地址

[mon4][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.mon][ERROR ] Failed to execute command: ceph-mon –cluster ceph –mkfs -i mon4 –monmap /var/lib/ceph/tmp/ceph.mon4.monmap –keyring /var/lib/ceph/tmp/ceph-mon4.mon.keyring –setuser 1001 –setgroup 1001
[ceph_deploy][ERROR ] GenericError: Failed to add monitor to host: mon4

  • 增加osd節點
1. 在新節點上創建文件夾或者裸盤
   ssh ceph@node3 
   mkdir /var/local/osd3
   sudo chmod 777 /var/local/osd3
   exit

2. 在部署節點激活新的osd節點
    ceph-deploy osd prepare node3:/var/local/osd3    
    ceph-deploy osd activate node3:/var/local/osd3
3. 推送配置到新的節點
    ceph-deploy admin node3
4. 查看是否部署成功
    ceph osd tree
  • 刪除mon節點
ceph-deploy mon destroy mon1
  • 刪除 osd 節點
1. 踢出osd節點
    ceph osd out osd.4

2. 在osd節點服務停止ceph服務
    ps -ewf|grep ceph; kill it

3. 移除crush節點 
    ceph osd crush remove osd.4

4. 移除auth認證
    ceph auth del osd.4

6. 移除osd節點
    ceph osd rm 4 

關於修改osd的journal

osd的數據與journal日誌放在不同的磁盤上有助於大幅度提升iops性能和數據安全性。建議把journa放在獨立的ssd磁盤上
  • 使用fdisk爲新的磁盤創建分區sdb1

  • 停止osd0所在節點的ceph服務

service ceph stop osd.0
  • osd.0刷入所有日誌
ceph-osd --flush-journal -i 0

-i 0爲osd.o的磁盤編號

  • 掛載journal到獨立的磁盤
rm /var/lib/ceph/osd/ceph-0/journal
ln -s /dev/sdb1 /var/lib/ceph/osd/ceph-0/journal
  • 創建新的日誌文件
ceph-osd --mkjournal -i 0
service ceph start osd.0

創建pool數據池


  • 顯示所有pool池
rados lspools
  • 查看pool ID、副本數量、CRUSH規則集、PG和PGP數量
ceph osd dump |grep pool
  • 創建pool池
    1. 若少於5個OSD, 設置pg_num爲128。
    2. 5~10個OSD,設置pg_num爲512。
    3. 10~50個OSD,設置pg_num爲4096。
    4. 以此類推
ceph osd pool create test-pool 64

test-pool:數據池名字
64:pg數量

  • 調整pool池副本
1. 調整test-pool池的副本數量爲2
    ceph osd pool set test-pool size 2
  • 設置pool配額
1. 設置pool最大存儲對象數量,取消最大對象限制設置爲0
    ceph osd pool set-quota test-pool max_objects 10000

2. 設置pool的最大容量
    ceph osd pool set-quota test-pool max_bytes $((10 * 1024 * 1024 * 1024))
  • 重命名pool
1. 將test-pool改爲image-pool
ceph osd pool rename test-pool image-pool
  • 查看pool狀態
rados df
  • 創建pool快照
    1. ceph支持對整個pool創建快照(和Openstack Cinder一致性組區別?),作用於這個pool的所有對象。但注意ceph有兩種pool模式:
    2. Pool Snapshot,我們即將使用的模式。創建一個新的pool時,默認也是這種模式。
    3. Self Managed Snapsoht,用戶管理的snapshot,這個用戶指的是librbd,也就是說,如果在pool創建了rbd實例就自動轉化爲這種模式。
    4. 這兩種模式是相互排斥,只能使用其中一個。因此,如果pool中曾經創建了rbd對象(即使當前刪除了所有的image實例)就不能再對這個pool做快照了。反之,如果對一個pool做了快照,就不能創建rbd image了。
ceph osd pool mksnap test-pool test-pool-snap
  • 刪除pool快照
ceph osd pool rmsnap test-pool test-pool-snap

test-pool:數據池
test-pool-snap:快照名

創建ceph塊設備


  • 在指定的數據池中創建10GB塊設備
rbd create  test-rbd --size 10G -p test-pool

test-pool:指定的數據池
test-rbd: 創建的數據

  • 列出數據池的塊設備以及詳細信息
rbd ls -p test-pool
rbd --image test-rbd info -p test-pool

layering: 支持分層
striping: 支持條帶化 v2
exclusive-lock: 支持獨佔鎖
object-map: 支持對象映射(依賴 exclusive-lock )
fast-diff: 快速計算差異(依賴 object-map )
deep-flatten: 支持快照扁平化操作
journaling: 支持記錄 IO 操作(依賴獨佔鎖)

rbd image有4個 features,layering, exclusive-lock, object-map, fast-diff, deep-flatten
因爲目前內核版本 3.10僅支持layering,修改默認配置
每個ceph node的/etc/ceph/ceph.conf 添加一行
rbd_default_features = 1
這樣之後創建的image 只有這一個feature

format 1 - 新建 rbd 映像時使用最初的格式。此格式兼容所有版本的 librbd 和內核模塊,但是不支持較新的功能,像克隆。
format 2 - 使用第二版 rbd 格式, librbd 和 3.11 版以上內核模塊才支持(除非是分拆的模塊)。此格式增加了克隆支持,使得擴展更容易,還允許以後增加新功能

  • 掛載ceph塊設備
1. 修改存儲特徵
rbd feature disable test-rbd -p test-pool exclusive-lock object-map fast-diff deep-flatten
2. 掛載塊設備
sudo rbd map --image test-rbd -p test-pool
3. 查看是否掛載成功
rbd showmapped
  • 使用這個塊設備
1. 查看容量
sudo fdisk -l /dev/rbd0
2. 格式化xfs文件系統
sudo mkfs.xfs /dev/rbd0
3. 創建掛載路徑 
sudo mkdir /mnt/ceph-disk
4. 掛載路徑
sudo mount /dev/rbd0 /mnt/ceph-disk
5. 查看是否掛載成功
df -h /mnt/ceph-disk

掛載成功後就可以直接在這個文件裏放東西了,相當於網盤了。數據會自動備份在這個osd服務器上了

calamari監控管理平臺部署


  • 安裝環境

    1. Calamari包含的組件主要有calamari-server;romana;salt-minion;salt-master;diamond。
      這些模塊各自的作用:calamari-server 這個是提供一個與集羣進行交互,並且自己封裝了一個自己的API,做集中管理的地方,這個只需要在集羣當中的某一臺機器上安裝,也可以獨立安裝

    2. romana 就是原來的calamari-client,這個叫client,其實是一個web的界面,這個叫calamari-web更好,現在已經更名爲romana,這個也是只需要在集羣當中的某一臺機器上安裝,也可以獨立安裝,這個需要跟calamari-server安裝在一臺機器上
      salt-master 是一個管理的工具,可以批量的管理其他的機器,可以對安裝了salt-minion的機器進行管理,在集羣當中,這個也是跟calamari-server安裝在一起的

    3. salt-minion 是安裝在集羣的所有節點上的,這個是接收salt-master的指令對集羣的機器進行操作,並且反饋一些信息到salt-master上diamond 這個是系統的監控信息的收集控件,提供集羣的硬件信息的監控和集羣的信息的監控,數據是發送到romana的機器上的,是由romana上的carbon來收取數據並存儲到機器當中的數據庫當中的

節點情況
需要安裝軟件
Calamari服務端
calamri-server romana salt-master
集羣節點
salt-minion diamond
host文件 拷貝master的host文件

  • 拷貝ceph-deploy的/etc/hosts到各個ceph節點
scp /etc/hosts root@node1:/etc/hosts
scp /etc/hosts root@node2:/etc/hosts
  • 爲每個節點軟件下載和解壓
wget https://file.hfjy.com/index.php/s/t9d49CWvwjhgM15/download
unzip download.zip
cd centosjewel/
  • ceph-deploy節點安裝監控服務端calamari和romana
1. 本地安裝 calamari, romana, salt-master
    sudo yum localinstall calamari-server-1.3.3-jewel.el7.centos.x86_64.rpm romana-1.2.2-36_gc62bb5b.el7.centos.x86_64.rpm salt-master-2015.8.1-1.el7.noarch.rpm
2. 調整目錄權限
    sudo chmod 777 -R /var/log/calamari/
    sudo chmod 777 -R /opt/calamari/
3. 安裝被監控端而後在繼續操作服務端
  • 被監控節點安裝(在node節點上安裝)
1. 安裝salt-minion diamond
   sudo yum localinstall salt-2015.8.1-1.el7.noarch.rpm salt-minion-2015.8.1-1.el7.noarch.rpm diamond-3.4.68-jewel.noarch.rpm

2. 配置salt-minion文件
    sudo sed -i 's/#master: salt/master:mon1/' /etc/salt/minion

mon1: 爲 calamari的主機名字

  1. 添加minion.d附加目錄及calamari.conf文件
sudo mkdir /etc/salt/minion.d/
sudo touch /etc/salt/minion.d/calamari.conf
sudo chmod 777 /etc/salt/minion.d/calamari.conf
sudo echo 'master:mon1'> /etc/salt/minion.d/calamari.conf
sudo systemctl restart salt-minion
sudo systemctl enable salt-minion
  • 配置diamond
cd /etc/diamond/ && sudo cp diamond.conf.example diamond.conf
sudo chmod 777 /etc/diamond/diamond.conf
sudo sed -i '/^host/s/graphite/mon1/' /etc/diamond/diamond.conf
sudo systemctl restart diamond
sudo systemctl enable diamond
  1. mon1:calamari服務端的名字
  2. 如果啓動diamond失敗,請添加服務
    sudo chkconfig --add diamond
  • 所有被監控節點完後,在監控服務端啓動服務器
sudo systemctl restart salt-master

管理salt-minion節點(calamari服務端操作)

  • 列出所有節點
sudo salt-key -L
  • 允許所有節點接入
sudo salt-key -A
  • 檢測節點鏈接性
sudo salt '*' test.ping
  • 輸出集羣狀態
sudo salt '*' ceph.get_heartbeats

初始化calamari配置(在服務端操作)

  • 初始化calamari,輸入賬戶和密碼,就可以進行web訪問了
sudo calamari-ctl initialize

清除ceph安裝包


  • 清除安裝包
ceph-deploy purge mon1 node1 node2
  • 清除配置信息
ceph-deploy purgedata mon1 node1 node2
ceph-deploy forgetkeys
  • 卸載部署的ceph包
ceph-deploy uninstall mon1 node1 node2
  • 每個節點刪除殘留的配置文件
rm -rf /var/lib/ceph/osd/*
rm -rf /var/lib/ceph/mon/*
rm -rf /var/lib/ceph/mds/*
rm -rf /var/lib/ceph/bootstrap-mds/*
rm -rf /var/lib/ceph/bootstrap-osd/*
rm -rf /var/lib/ceph/bootstrap-mon/*
rm -rf /var/lib/ceph/tmp/*
rm -rf /etc/ceph/*
rm -rf /var/run/ceph/*

性能測試

RADOS 性能測試:使用 Ceph 自帶的 rados bench 工具
  • 該工具的語法爲:rados bench -p
順序寫:
rados bench -p rbd 10 write --no-cleanup
順序讀:
rados bench -p rbd 10 seq
隨機讀
rados bench -p rbd 10 rand
  • RADOS 性能測試:使用 rados load-gen 工具
語法:
rados -p rbd load-gen 
--num-objects     初始生成測試用的對象數,默認 200
--min-object-size 測試對象的最小大小,默認 1KB,單位byte 
--max-object-size 測試對象的最大大小,默認 5GB,單位byte
--min-op-len      壓測IO的最小大小,默認 1KB,單位byte
--max-op-len      壓測IO的最大大小,默認 2MB,單位byte
--max-ops         一次提交的最大IO數,相當於iodepth
--target-throughput 一次提交IO的歷史累計吞吐量上限,默認 5MB/s,單位B/s
--max-backlog     一次提交IO的吞吐量上限,默認10MB/s,單位B/s
--read-percent    讀寫混合中讀的比例,默認80,範圍[0, 100]
--run-length      運行的時間,默認60s,單位秒
rados -p pool100 load-gen --read-percent 0 --min-object-size 1073741824 --max-object-size 1073741824 --max-ops 1 --read-percent 0 --min-op-len 4194304 --max-op-len 4194304 --target-throughput 1073741824 --max_backlog 1073741824

該命令的含義是:在 1G 的對象上,以 iodepth = 1 順序寫入 block size 爲 4M 的總量爲 1G 的數據。其平均結果大概在 24MB/s,基本和 rados bench 的結果相當。
在 client 上,同樣的配置,順序寫的BW大概在 20MB/s,順序讀的 BW 大概在 100 MB/s。

一些常見問題處理

  • osd節點狀態爲down(處理情況一)
1. 在mon節點上先踢出
    ceph auth del osd.*
2. 在osd節點上重新激活
    sudo ceph-disk activate-all    

*:爲down的節點編號

  • osd節點狀態爲down(處理情況二)
1. 重新在ceph-deploy激活節點
    ceph-deploy osd activate node3:/var/local/osd3
  • pg出現down的故障
1. 枚舉出down的服務器
    ceph pg dump_stuck inactive
    ceph pg {pg id} query

2. 找出pg down掉的osd編號, 重啓osd服務, 需要等待幾分鐘,等pg節點爲incomplete
    cepg osd {osd.*} lost --yes-i-really-mean-it

3. 如果出現 Error ENOENT: i don't have pgid 1.13, 重新創建該pg節點
    ceph pg force_create_pg {pg id}

ceph常用命令

集羣維護常用命令概覽

  • 檢查集羣的狀況
啓動集羣后、讀寫數據前,先檢查下集羣的健康狀態。你可以用下面的命令檢查:
ceph health 
ceph health detail  (詳細)
ceph -w(監控當前集羣的狀態)
ceph df(檢查整個集羣磁盤使用狀況)
  • mon操作相關
ceph mon dump(監視圖)
ceph quorum_status(監視器法定人數)
ceph mon remove mon2(刪除mon2節點)
ceph mon getmap -o 1.txt(導出mon map)
monmaptool --print 1.txt (導入上面的mon map)
ceph-mon -i nc3 --inject-monmap 1.txt(把上面的mon map注入新加入的節點)
ceph-conf --name mon.nc3 --show-config-value admin_socket(查看mon的amin socket)
ceph-conf --name mon.nc1 --show-config-value log_file  /var/log/ceph/ceph-mon.nc1.log(查看ceph mon log日誌所在的目錄)
ceph --admin-daemon /var/run/ceph/ceph-mon.nc3.asok config show | less(查看一個集羣ceph-mon.nc3參數的配置、輸出信息特別詳細)
  • mds操作相關
ceph mds dump(查看mds狀態)
ceph  mds rm 0 mds.nc1(刪除一個mds節點)
ceph mds rmfailed <int[0-]>  (設置mds狀態爲失敗)
ceph mds add_data_pool <poolname>(新建pool)
mds cluster_down(關閉mds集羣)
mds cluster_up(啓動mds集羣)
ceph mds set max_file_size 1024000000000(設置cephfs文件系統存儲方式最大單個文件尺寸)
ceph mds fail 0(強制mds狀態爲featrue)
ceph fs rm leadorfs --yes-i-really-mean-it(刪除mds文件系統)
ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it(刪除fs數據文件夾)
ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it (刪除元數據文件夾)
ceph  mds rm 0 mds.node242(拆除文件系統前推薦先刪除節點)
  • auth相關
ceph auth list(查看ceph集羣中的認證用戶及相關的key)
ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.admin.keyring(爲ceph創建一個admin用戶併爲admin用戶創建一個密鑰,把密鑰保存到/etc/ceph目錄下)
ceph auth get-or-create osd.0 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-0/keyring(爲osd.0創建一個用戶並創建一個key)
ceph auth get-or-create mds.nc3 mon 'allow rwx' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mds/ceph-cs1/keyring(爲mds.nc3創建一個用戶並創建一個key)
ceph auth import   /var/lib/ceph/mds/ceph-cs1/keyring(導入key信息)
ceph auth del osd.0(刪除集羣中的一個認證用戶)
  • osd相關
物理盤
ceph osd tree (查看osd列表)
ceph osd df (檢查osd磁盤使用狀況)
ceph osd perf(查看數據延遲)
ceph osd down osd.0 (down掉一個osd.0的硬盤)
ceph osd rm osd.0(在集羣中刪除一個osd.0硬盤)
ceph osd crush rm osd.0(在集羣中刪除一個osd 硬盤 crush map)
ceph osd crush rm node1 在集羣中刪除一個osd的host節點
ceph osd getmaxosd(查看最大osd的個數)
ceph osd setmaxosd 2048(設置最大的osd的個數(當擴大osd節點的時候必須擴大這個值)

ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]](設置osd crush的權重爲1.0)
> ceph osd crush set osd.1 0.5 host=node241
ceph osd reweight 3 0.5(設置osd的權重)
ceph osd out osd.3(把一個osd節點逐出集羣)
ceph osd in osd.3(把逐出的osd加入集羣)
ceph osd pause(暫停osd, 暫停後整個集羣不再接收數據)
ceph osd unpause(再次開啓osd, 開啓後再次接收數據)
ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less(查看一個集羣osd.0參數的配置、輸出信息特別詳細,集羣所有配置生效可以在此參數下確認)
ceph osd set nodown(設置標誌 flags ,不允許關閉osd、解決網絡不穩定,osd 狀態不斷切換的問題)
ceph osd unset nodown(取消設置)
  • pool相關
數據池。
ceph osd lspools(查看ceph集羣中的pool數量)
ceph osd pool create rbdtest 100(在ceph集羣中創建一個pool,這裏的100指的是PG組)
ceph osd dump | grep 'replicated size'(查看集羣中所有pool的副本尺寸)
ceph osd pool get rbdpool size(查看pool 最大副本數量)
ceph osd pool get rbdpool min_size(查看pool 最小副本數量)
ceph osd pool set rbdtest pg_num 100(設置一個pool的pg數量)
ceph osd pool set rbdtest pgp_num 100(設置一個pool的pgp數量)

ceph osd pool set {pool_name} min_size 1 修改ceph,數據最小副本數、和副本數
ceph osd pool set {pool_name} size 2
> ceph osd pool set rbdpool min_size 1
> ceph osd pool set rbdpool size 2

ceph osd pool set rbdtest target_max_bytes 100000000000000(設置rbdtest池的最大存儲空間爲100T(默認是1T))
ceph osd pool set-quota rbdtest max_objects 10000(爲一個ceph pool配置配額、達到配額前集羣會告警,達到上限後無法再寫入數據)
ceph osd pool delete rbdtest  rbdtest  --yes-i-really-really-mean-it (在集羣中刪除一個pool,注意刪除poolpool 映射的image 會直接被刪除,線上操作要謹慎)
ceph osd pool mksnap rbdtest   rbdtest-snap20150924(給一個pool創建一個快照)
rados lssnap -p rbdtest(查看快照信息)
ceph osd pool rmsnap rbdtest  rbdtest-snap20150924(刪除pool的快照)
rados lssnap -p rbdtest(驗證,剩餘一個snap)
  • rados相關
rados 是和Ceph的對象存儲集羣(RADOS),Ceph的分佈式文件系統的一部分進行交互是一種實用工具。
rados lspools(查看ceph集羣中有多少個pool (只是查看pool))
rados df(顯示整個系統和被池毀掉的使用率統計,包括磁盤使用(字節)和對象計數)
rados mkpool test(創建一個pool)
rados create test-object -p test(創建一個對象object)
rados -p test ls(查看對象文件)
rados rm test-object-1 -p test(刪除一個對象)
rados rmpool test test –yes-i-really-really-mean-it(刪除foo池 (和它所有的數據))
rados ls -p test | more(查看ceph pool中的ceph object (這裏的object是以塊形式存儲的)
rados -p test mksnap testsnap(爲test pool創建快照)
rados -p test lssnap(列出給定池的快照)
rados -p test rmsnap testsnap(刪除快照)
rados -p test put myobject blah.txt(上傳一個對象到test pool)
  • rbd相關
rbd create -p test --size 10000 kjh(在test池中創建一個命名爲kjh的10000M的鏡像)
rbd ls test(查看ceph中一個pool裏的所有鏡像)
rbd -p test info kjh(查看新建的鏡像的信息)
rbd info -p test  --image kjh(查看ceph pool中一個鏡像的信息)
rbd rm  -p test  kjh(刪除一個鏡像)
rbd resize -p test --size 20000 kjh(調整一個鏡像的尺寸)
rbd -p test info kjh(調整後的鏡像大小)
  • pg相關
PG =“放置組”。當集羣中的數據,對象映射到編程器,被映射到這些PGS的OSD。
ceph pg dump (查看pg組的映射信息)
ceph pg map 0.3f(查看一個PG的map)
> osdmap e88 pg 0.3f (0.3f) -> up [0,2] acting [0,2]   #其中的[0,2]代表存儲在osd.0、osd.2節點,osd.0代表主副本的存儲位置

ceph pg stat(查看PG狀態)
ceph pg  {pg-id} query(查詢一個pg的詳細信息)
ceph pg scrub {pg-id}(要洗刷一個pg組,執行命令)
ceph pg dump_stuck unclean((不乾淨)歸置組含有複製數未達到期望數量的對象,它們應該在恢復中。)
ceph pg dump_stuck inactive((不活躍)歸置組不能處理讀寫,因爲它們在等待一個有最新數據的 OSD 復活且進入集羣。)
ceph pg dump_stuck stale((不新鮮)歸置組處於未知狀態:存儲它們的 OSD 有段時間沒向監視器報告了(由 mon_osd_report_timeout 配置)。可用格式有 plain (默認)和 json 。閥值定義的是,歸置組被認爲卡住前等待的最小時間(默認 300 秒)
ceph pg dump --format plain(顯示一個集羣中的所有的pg統計)
ceph pg {pg-id} mark_unfound_lost revert|delete(恢復一個丟失的pg,
如果集羣丟了一個或多個對象,而且必須放棄搜索這些數據,你就要把未找到的對象標記爲丟失( lost )。
如果所有可能的位置都查詢過了,而仍找不到這些對象,你也許得放棄它們了。這可能是罕見的失敗組合導致的,集羣在寫入完成前,未能得知寫入是否已執行。
當前只支持 revert 選項,它使得回滾到對象的前一個版本(如果它是新對象)或完全忽略它。要把 unfound 對象標記爲 lost )
ceph pg ls {pg-id} (查看某個PG內分佈的數據狀態,具體狀態可以使用選項過濾輸出)
  • rbd pool 快照功能
ceph osd pool create ptmindpool 256 256(新建個pool叫’ptmindpool’同時在下面創建一個’kjhimage’)
rbd create kjhimage --size 1024 --pool ptmindpool(創建鏡像)
rbd --pool ptmindpool ls(查看鏡像)
rbd snap create ptmindpool/kjhimage@snapkjhimage(創建snap,快照名字叫’snapkjhimage’)
rbd snap ls ptmindpool/kjhimage(查看kjhimage的snap)
rbd snap rollback ptmindpool/kjhimage@snapkjhimage(回滾快照)
rbd snap rm ptmindpool/kjhimage@snapkjhimage(刪除snap 刪除snap報(rbd: snapshot 'snapshot-xxxx' is protected from removal.)寫保護 ,使用 rbd snap unprotect volumes/snapshot-xxx' 解鎖,然後再刪除)
rbd snap purge ptmindpool/kjhimage(刪除kjhimage的全部snapshot)
rbd export -p ptmindpool --image kjhimage /tmp/kjhimage.img(把ceph pool中的一個鏡像導出)
l /tmp/kjhimage.img (驗證查看導出文)
rbd import /tmp/kjhimage.img  -p ptmindpool --image importmyimage1(把一個鏡像導入ceph中)
rbd -pptmindpool ls(驗證查看導入鏡像文件)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章