基於centos6.7的Ceph分佈式文件系統安裝指南

        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客戶端

Ceph的文件系統作爲一個目錄掛載到客戶端cephclient的/cephfs目錄下,可以像操作普通目錄一樣對此目錄進行操作。


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章