Ceph是加州大學Santa Cruz分校的Sage Weil(DreamHost的聯合創始人)專為博士論文設計的新一代自由軟件分布式文件系統。自2007年畢業之後,Sage開始全職投入到Ceph開 發之中,使其能適用於生產環境。Ceph的主要目標是設計成基於POSIX的沒有單點故障的分布式文件系統,使數據能容錯和無縫的復制。2010年3 月,Linus Torvalds將Ceph client合並到內 核2.6.34中。
關於Ceph的詳細介紹見:Ceph:一個 Linux PB 級分布式文件系統
本文是在Centos6.7上對Ceph的部署的詳細指南。
首先對部署環境進行說明:
IP Hostname ceph磁盤 備注 10.201.26.121 ceph01 20g adm, mon, osd0 10.201.26.122 ceph02 20g osd1 10.201.26.123 ceph03 20g osd2 10.201.26.121 cephclient 掛載點:/cephfs ceph客戶端
1. 安裝前准備(root用戶)
參考文檔:http://docs.openfans.org/ceph/ceph4e2d658765876863/ceph-1/installation30105feb901f5b8988c53011/preflight3010988468c03011
1.1 在每台機添加hosts
修改文件/etc/hosts(或者/etc/sysconfig/network),添加以下內容:
10.201.26.121 ceph01
10.201.26.122 ceph02
10.201.26.123 ceph03
1.2 每個Ceph節點上創建一個用戶
# adduser ceph
# passwd ceph
密碼統一設為: ceph
1.3 在每個Ceph節點中為用戶增加 root 權限
# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
# chmod 0440 /etc/sudoers.d/ceph
1.4 關閉防火牆等服務
# service iptables stop
# chkconfig iptables off //關閉開機啟動防火牆
每台機器節點都需要修改/etc/selinux/config 文件
將SELINUX=enforcing改為SELINUX=disabled
2. CEPH部署設置(root用戶操作)
增加Ceph資料庫至 ceph-deploy 管理節點. 之後,安裝 ceph-deploy
安裝 EPEL 軟件源(單台機操作即可):
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum update -y
安裝ceph依賴
# rpm -Uvh http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
# yum install ceph-deploy -y
否則會出現以下問題:
3. 數據節點磁盤掛載(root用戶)
在ceph01、ceph02、ceph03上分別掛載了一塊20g大小的磁盤作為ceph的數據存儲測試使用。需要將它們分區,創建xfs文件系統。
3.1 分區(三台機),創建xfs文件系統
# parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary xfs 0% 100%
(parted) quit
# mkfs.xfs /dev/sdb1
如果出現以下問題:
是因為xfs在默認的系統安裝上是不被支持的,需要自己手動安裝默認的包。
先修過yum的配置文件
# vim /etc/yum.repos.d/CentOS-Base.repo
[centosplus]
enabled=1 //把0改為1
# yum install -y xfsprogs kmod-xfs //安裝軟件包
然後再執行mkfs.xfs /dev/sdb1就可以了。
4. 存儲集群搭建(ceph用戶)
集群規模:1個管理節點,1個監控節點,3個數據節點。
4.0免密碼登陸(三台機)
在每台機上運行以下命令:
$ ssh-keygen -t rsa -P ''(回車)
執行完這個命令後,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
下面從admin節點開始使用ceph-deploy
4.1 在admin上創建集群目錄(ceph01)
$ mkdir ceph-cluster
$ cd ceph-cluster
4.2 創建集群(ceph01)
$ ceph-deploy new ceph01
4.3 安裝ceph(ceph01)
$ ceph-deploy install ceph01 ceph02 ceph03
此命令將會按順序在3台機上安裝ceph
如果報錯:
RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
執行以下命令再重新執行一遍:
$ rpm -e ceph-release
如果報錯:
[INFO ] Running command: sudo rpm -Uvh --replacepkgs https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm
[WARNIN] curl: (22) The requested URL returned error: 404 Not Found
[DEBUG ] Retrieving https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm
[WARNIN] error: skipping https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm - transfer failed
[ERROR ] RuntimeError: command returned non-zero exit status: 1
[ERROR ] RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs https://download.ceph.com/rpm-infernalis/el6/noarch/ceph-release-1-0.el6.noarch.rpm
這是因為在centos6中,沒有infernalis這個版本的rpm包
因為暫時沒有找到在哪裡修改這個版本信息,故采用手動安裝(三台機都需要)
$ sudo yum install -y yum-plugin-priorities
$ sudo rpm -Uvh http://ceph.com/rpm-hammer/el6/noarch/ceph-release-1-0.el6.noarch.rpm
$ sudo yum -y install ceph
如果報錯:
[DEBUG ] You could try running: rpm -Va --nofiles --nodigest
[ERROR ] RuntimeError: command returned non-zero exit status: 1
[ERROR ] RuntimeError: Failed to execute command: yum -y install ceph
執行一遍一下命令再重新執行一遍:
$ rpm -Va --nofiles –nodigest
4.4 創建並初始化監控節點(ceph01)
$ ceph-deploy mon create-initial
執行此命令後會初始化mon結點,並且在mon結點生成ceph.conf等文件,ceph.conf文件中聲明了mon結點等信息
如果報錯:
在mon節點(ceph01)上手動執行以下命令:
$ sudo yum install redhat-lsb
然後再執行ceph-deploy mon create-initial
查看一下 Ceph 存儲節點的硬盤情況:
$ ceph-deploy disk list ceph01
$ ceph-deploy disk list ceph02
$ ceph-deploy disk list ceph03
如果報錯:
[ERROR ] RuntimeError: remote connection got closed, ensure ``requiretty`` is disabled for ceph02
需要在mdsnode,osdnode1,osdnode2三個節點中使用leadorceph用戶的身份執行sudo visudo命令,然後修改
Defaults requiretty 為Defaults:ceph !requiretty
4.5 添加數據節點(ceph01)
(為了快速安裝,本例中為每個Ceph OSD守護進程使用單個目錄而非單個磁盤 。使用ceph-deply osd命令可查看在分離的磁盤/分區上創建OSD和日志的方法。登陸Ceph節點, 並為每個Ceph OSD守護進程創建單個目錄。)
# ssh root@ceph01
# mkdir /data
# mkdir /data/osd0
# chmod -R 777 /data/
# exit
# ssh root@ceph02
# mkdir /data
# mkdir /data/osd1
# chmod -R 777 /data/
# exit
# ssh root@ceph03
# mkdir /data
# mkdir /data/osd2
# chmod -R 777 /data/
# exit
4.6 掛載磁盤(三台機)
將各個磁盤分別掛載到對應的目錄(ceph01、ceph02、ceph03)
$ sudo mount /dev/sdb1 /data/osd0
(另外兩個節點類似,不過是osd1,osd2)
4.7 在管理節點准備OSD(ceph01)
$ ceph-deploy osd prepare ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2
4.8 激活OSD(ceph01)
(注意如果osd的目錄所在磁盤是ext4格式的文件系統會報錯,需要進行額外的設置)
$ ceph-deploy osd activate ceph01:/data/osd0 ceph02:/data/osd1 ceph03:/data/osd2
如果報錯:
是因為多次卸載和安裝ceph造成磁盤的id和cluster的uuid不一致,需要將 /data/osd0下的文件全部清空(3台機都要改)
4.9 開機掛載磁盤(三台機)
掛載好的新磁盤會在下一次重啟或開機的時候失效,因此我們需要在每台機上對新磁盤進行掛載,分別在每台機編輯/etc/fstab文件,在最後添加(以ceph01為例):
$ sudo vim /etc/fstab
/dev/sdb1 /osd0 xfs defaults 0 0
4.10 分發配置和密鑰
使用ceph-deploy命令將配置文件和管理密鑰復制到管理節點和你的Ceph節點。
# ceph-deploy admin ceph01 ceph02 ceph03
4.11 查看集群狀態
# ceph health //當集群完成配對後,應返回active+clean狀態
如果報錯:
[ceph@ceph03 ceph-cluster]$ ceph health
2016-03-06 21:53:54.886552 7fdc5cf5a700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2016-03-06 21:53:54.886584 7fdc5cf5a700 0 librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound
是因為普通用戶無法讀取導致無法進行cephx認證,執行以下命令:
# sudo chmod +r /etc/ceph/ceph.client.admin.keyring
如果出現以下情況:
[ceph@ceph03 ceph-cluster]$ ceph health
HEALTH_WARN 64 pgs degraded; 64 pgs stuck degraded; 64 pgs stuck unclean; 64 pgs stuck undersized; 64 pgs undersized
是因為配置中默認osd=3,備份=2,與實際不符,更改配置文件ceph.conf,增加以下兩行:
osd_pool_default_size = 2
osd_pool_default_min_size = 1
(不過沒有生效,懷疑需要重啟集群,待測試),或者添加一個osd節點(有些說法是要最少3個osd)
如果報錯:
2016-04-21 15:21:05.597951 7fde9cb6b700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2016-04-21 15:21:05.597963 7fde9cb6b700 0 librados: client.admin initialization error (2) No such file or directory
是因為沒有權限讀取keyring
執行以下命令賦權限:
$ sudo chmod 777 /etc/ceph/*
已經成功!!(這裡發現沒有啟動mds節點,需要手動啟動,輸入命令service ceph start mds.ceph01)
重新部署(注意!)
部署過程中如果出現任何奇怪的問題無法解決,可以簡單的刪除一切從頭再來:
# ceph-deploy purge ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
# ceph-deploy purgedata ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd1 ceph-osd2
# ceph-deploy forgetkeys
5. 創建文件系統
創建文件系統的步驟參考官網:http://docs.ceph.com/docs/master/cephfs/createfs/
對於一個剛創建的MDS服務,雖然服務是運行的,但是它的狀態直到創建 pools 以及文件系統的時候才會變為Active.
還沒有創建時候的狀態
$ ceph mds stat
5.1 創建管理節點(ceph01)
$ ceph-deploy mds create ceph01
注意:如果不創建mds管理節點,client客戶端將不能正常掛載到ceph集群!
5.2 查看pool
$ ceph osd lspools
新創建的ceph集群只有rdb一個pool。這時我們需要創建一個新的pool
5.3 新建pool
參考官網:http://docs.ceph.com/docs/master/rados/operations/pools/
$ ceph osd pool create cephfs_data 10#用於數據的pool
$ ceph osd pool create cephfs_metadata 10#用於元數據的pool
$ ceph fs new myceph cephfs_metadata cephfs_data
5.4 檢驗
查看mds狀態
$ ceph mds stat
查看集群狀態
$ ceph -s
附錄1 —— ceph常用命令
1. 查看狀態命令:
查看ceph集群狀態:ceph -s
查看mon狀態:ceph mon stat
查看msd狀態:ceph msd stat
查看osd狀態:ceph osd stat
查看osd目錄樹(可以查看每個osd掛在哪台機,是否已啟動):ceph osd tree
2. 啟動節點命令:
需要在對應的節點進行啟動(如果對應節點沒有該服務,會進行提示)
啟動mon進程:service ceph start mon.ceph01
啟動msd進程:service ceph start msd.ceoh01(我們集群沒有msd節點)
啟動osd進程:service ceph start osd.0(在ceph01上)
啟動osd進程:service ceph start osd.1(在ceph02上)
啟動osd進程:service ceph start osd.2(在ceph03上)
附錄2——client掛載
Client掛載方式有兩種:內核kernal方式和fuse方式。由於我們使用的centos6.7內核版本太低,而升級內核時間太長,故直接采用fuse方式進行掛載。下面分別介紹centos6.7和ubuntu15.04掛載client的方法。
注:client掛載前需要在client節點安裝ceph,方法參考上述文檔
1. centos 6.7使用fuse掛載(client節點)
安裝ceph源
參考官方文檔:http://docs.ceph.com/docs/master/cephfs/fuse/
(其中的ceph.keyring需要改為ceph.client.admin.keyring )
如果不進行此步驟,否則會報“No package ceph-fuse available.”
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
安裝ceph-fuse
# yum install -y ceph-fuse
創建掛載目錄
# mkdir /cephfs
復制配置文件
將ceph配置文件ceph.conf從管理節點copy到client節點
# scp [email protected]:/etc/ceph/ceph.conf /etc/ceph/
復制密鑰
將ceph的ceph.client.admin.keyring從管理節點copy到client節點
# scp [email protected]:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
查看ceph授權
# ceph auth list
掛載到指定目錄
將ceph掛載到/cephfs
# ceph-fuse -m 10.201.26.131:6789 /cephfs
取消掛載
# umount/cephfs
2. ubuntu15.04 使用fuse掛載
安裝ceph-fuse
# apt-get install -y ceph-fuse
或者手動安裝,下載地址:http://mirrors.aliyun.com/ubuntu/pool/main/c/ceph/,下載包ceph-dbg_0.94.1-0ubuntu1_amd64.deb
# dpkg -i ceph-dbg_0.94.1-0ubuntu1_amd64.deb
創建掛載目錄
# mkdir /cephfs
復制配置文件
將ceph配置文件ceph.conf從管理節點copy到client節點
# scp [email protected]:/etc/ceph/ceph.conf /etc/ceph/
復制密鑰
將ceph的ceph.client.admin.keyring從管理節點copy到client節點
# scp [email protected]:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
查看ceph授權
# ceph auth list
掛載到指定目錄
將ceph掛載到/cephfs
# ceph-fuse -m 10.201.26.131:6789 /cephfs
取消掛載
# umount/cephfs