最近由於工作涉及一些關於Ceph存儲的部署和測試,謹以此文總結記錄一下ceph cluster搭建過程,基本上ceph官網都有,只是做一個總結,歡迎各位噴我,以便我提高。
本文主要介紹使用ubuntu系統搭建一個完整的ceph cluster,並通過ceph client簡單使用RBD & cephFS。
官方有使用ceph-deploy工具去自動部署ceph cluster的介紹,本文爲了讓大家更好的理解整個過程,在參數調優方面更爲靈活,所以使用手搭建的方法,如果想ceph-deploy去部署,後續會貼出來。
我的環境:ubuntu-12.04.5-server VM * 4
ceph版本: v0.94.5
節點角色:
hostname | IP | 角色 |
deploy | 10.128.3.10 | 管理/client |
ceph1 | 10.128.3.11 | mon/mds/osd |
ceph2 | 10.128.3.12 | mon/mds/osd |
ceph3 | 10.128.3.13 | mon/mds/osd |
由於虛擬機資源不夠,同個虛擬機同時啓動mon/mds/osd,如果不需要使用cephFS的話以省略mds的部署。
一、虛擬機安裝配置
三個ceph節點最好添加兩塊虛擬硬盤,其中一塊用於osd,另一塊用於ubuntu系統本身,其實osd也可以指定本地文件系統中的路徑。
安裝好ubuntu-12.04.5-server,安裝過程略,打開SSH服務,用於遠程登陸配置。
二、安裝ceph
每個節點更新安裝源,由於ubuntu自帶的源裏ceph版爲太低,當前最新能安裝v0.94.5版本
root@deploy:~# wget -q -O-'https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc' | sudoapt-key add -
root@deploy:~# echo deb http://ceph.com/debian/ $(lsb_release-sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
root@deploy:~# apt-get update
root@deploy:~# apt-get install ceph
三、部署準備
在deploy節點做以下操作:
1. 把ceph1/ceph2/ceph3寫到deploy的/etc/hosts裏
10.128.3.10 deploy
10.128.3.11 ceph1
10.128.3.12 ceph2
10.128.3.13 ceph3
2. 生成一個唯一的fsid
root@deploy:~#uuidgen
f32dcc3c-179a-47ba-962a-601beba0b671
3. 編寫一個/etc/ceph/ceph.conf
[global]
fsid =f32dcc3c-179a-47ba-962a-601beba0b671
moninitial members = ceph1,ceph2,ceph3
monhost = 10.128.3.11, 10.128.3.12, 10.128.3.13
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
file store xattr use omap = true
osd pool default size = 2
osd pool default min size = 1
osd pool default pg num = 128
osd pool default pgp num = 128
osd crush chooseleaf type = 1
4. 生成監視器密鑰
root@deploy:~# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
creating /tmp/ceph.mon.keyring
5. 創建admin用戶
root@deploy:~# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *'--cap mds 'allow'
creating /etc/ceph/ceph.client.admin.keyring
6. 把client.admin密鑰加入ceph.mon.keyring
root@deploy:~# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring into/tmp/ceph.mon.keyring
7. 創建monitor map
root@deploy:~# monmaptool --create --add ceph1 10.128.3.11 --add ceph2 10.128.3.12 --add ceph3 10.128.3.13 --fsid f32dcc3c-179a-47ba-962a-601beba0b671 --clobber /tmp/monmap
monmaptool: monmap file /tmp/monmap
monmaptool: set fsid to f32dcc3c-179a-47ba-962a-601beba0b671
monmaptool: writing epoch 0 to /tmp/monmap (3 monitors)
8. 拷貝/etc/ceph/*,/tmp/monmap, /tmp/ceph.mon.keyring到所有ceph節點
如ceph1:
root@deploy:~# scp /etc/ceph/* root@ceph1:/etc/ceph/
root@deploy:~# scp /tmp/monmap root@ceph1:/tmp/monmap
root@deploy:~# scp /tmp/ceph.mon.keyring root@ceph1:/tmp/ceph.mon.keyring
四、部署mon
在每個ceph節點下執行以下操作,對應不同hostname需要把hostname改掉
1. 初始化mon數據
root@ceph1:~# ceph-mon --mkfs -i ceph1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
ceph-mon: set fsid to f32dcc3c-179a-47ba-962a-601beba0b671
ceph-mon: created monfs at /var/lib/ceph/mon/ceph-ceph1 formon.ceph1
2. 創建done文件
root@ceph1:~# touch /var/lib/ceph/mon/ceph-ceph1/done
3. 創建sysvinit文件,爲了系統自動啓動
root@ceph1:~# touch /var/lib/ceph/mon/ceph-ceph1/sysvinit
4. 啓動mon進程
root@ceph1:~# service ceph start mon.ceph1
當所有ceph節點啓動mon進程後,可以查看當前集羣狀態,可看到已經啓動mon,但這時沒有啓動osd,所以顯示空間爲0
五、部署osd
1. 在管理節點deploy創建osd id
此例中我們創建3個osd id,以下命令執行3下,分別得到id(0,1,2)
root@deploy:~# ceph osd create
2. 在每個ceph節點創建osd工作目錄,每個節點對應一個id
ceph1:
mkdir /var/lib/ceph/osd/ceph-0
ceph2:
mkdir /var/lib/ceph/osd/ceph-1
ceph3:
mkdir /var/lib/ceph/osd/ceph-2
3. 對附加的磁盤格式化並且掛載出來
這裏附加的磁盤爲/dev/sdb
root@ceph1:~# mkfs -t xfs /dev/sdb
root@ceph1:~# mount /dev/sdb /var/lib/ceph/osd/ceph-0
如果需要系統啓動自動掛載,需要添加到/etc/fstab
/dev/sdb /var/lib/ceph/osd/ceph-0 xfs defaults 0 0
4. 初始化OSD數據目錄
root@ceph1:~# ceph-osd -i 0 --mkfs --mkkey
5. 註冊此OSD的密鑰
root@ceph1:~# ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /var/lib/ceph/osd/ceph-0/keyring
6. 把節點加入CRUSH MAP
root@ceph1:~# ceph osd crush add-bucket ceph1 host
7. 節點放入default根
root@ceph1:~# ceph osd crush move ceph1 root=default
8. 添加系統自動啓動osd
root@ceph1:~# touch /var/lib/ceph/osd/ceph-0/sysvinit
9. 啓動osd進程
root@ceph1:~# service ceph start osd.0
10. 此時查看ceph集羣狀態,已經正常,並且此時開始,就可以正常使用rbd和radosgw了
六、部署mds
在每個ceph節點上執行以下操作
1. 創建mds工作目錄
root@ceph1:~# mkdir -p /var/lib/ceph/mds/ceph-ceph1
2. 註冊MDS的密鑰
root@ceph1:~# ceph auth get-or-create mds.ceph1 mds 'allow ' osd'allow rwx' mon 'allow profile mds' -o /var/lib/ceph/mds/ceph-ceph1/keyring
3. 啓動mds進程並設置系統自動啓動
root@ceph1:~# touch /var/lib/ceph/mds/ceph-ceph1/sysvinit
root@ceph1:~# service ceph start mds.ceph1
創建好mds後,使用ceph -s查看沒有關於mds的顯示,此時需要創建一個cephFS,就能顯示
七、pool操作
1. 查看pool
ceph osd lspools
2. 創建一個pool
//ceph osd pool create {pool-name} {pg-num} [{pgp-num}]
創建一個命名爲images的pool
ceph osd pool create images 128 128
3. 刪除一個pool
//ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]
刪除pool:images
ceph osd pool delete images images --yes-i-really-really-mean-it
八、創建一個塊設備(RBD)
1. 首先創建一個pool
ceph osd pool create images 128 128
2. 創建塊設備,基於pool
//rbd --pool {pool-name} create {image-name} --size {megabytes}
創建一個20M的RBD
rbd --pool images create image1 --size 20
3. 掛載這個RBD,並使用
map到本地塊設備,並會返回本地塊設備名,記下來,這裏爲(/dev/rbd1)
rbd --pool images map image1
格式化並掛載image1
mkfs.ext4 /dev/rbd1
mkdir mnt
mount -t ext4 /dev/rbd1 mnt/
此時可以往這個掛載點裏讀寫了
九、創建一個cephFS
1. 首先創建兩個pool
其中一個作爲元數據pool,另一個作爲數據pool
ceph osd pool create metadata 128 128
ceph osd pool create data 128 128
2. 創建cephFS
ceph fs new testfs metadata data
3. 查看當前集羣中的cephfs
ceph fs ls
4. 掛載cephFS並使用
有兩種方式,一種爲內核掛載方式,另一種ceph提供的用戶態掛載方式fuse
a)kernel
mount.ceph ceph1,ceph2,ceph3:/ mnt/ -o name=admin,secret=`ceph-authtool -p /etc/ceph/ceph.client.admin.keyring`
b)fuse
ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -c /etc/ceph/ceph.conf ~/mnt/