■河南 劉京義
Ceph 的基本架構(gòu)包括上層應(yīng)用接口,基礎(chǔ)庫(kù)LIBRADOS 和基礎(chǔ)存儲(chǔ)系統(tǒng)RADOS 等,對(duì)于RADOS 來(lái)說(shuō),是一個(gè)由具有自我修復(fù),自我管理的智能存儲(chǔ)節(jié)點(diǎn)組成的可靠的自動(dòng)化的分布的對(duì)象存儲(chǔ),是所有客戶(hù)端接口使用和部署的基礎(chǔ)。
RADOS 包括OSD(即Object StorageDevice,提供數(shù)據(jù)實(shí)體存儲(chǔ)資源),Monitor(維護(hù)整個(gè)Ceph 集群中各個(gè)節(jié)點(diǎn)的心跳信息,維持整個(gè)集群的全局狀態(tài)),MDS(即 Ceph Metadata Server,文件系統(tǒng)元數(shù)據(jù)服務(wù)節(jié)點(diǎn),支持多臺(tái)機(jī)器分布的部署,以實(shí)現(xiàn)系統(tǒng)的高可用性)等組件。
對(duì)于基礎(chǔ)庫(kù)LIBRADOS來(lái)說(shuō),可以讓?xiě)?yīng)用通過(guò)C、C++、Java、Python 和PHP 等工具直接連接到RADOS 的倉(cāng)庫(kù)。嚴(yán)格來(lái)說(shuō),除了底層RADOS 之上所有內(nèi)容,包括LIBRADOS、RADOSGW、RBD 以及Ceph FS,都是Ceph 客戶(hù)端接口。
對(duì) 于RADOSGW、RBD 以及Ceph FS 來(lái)說(shuō),都是根據(jù)LIBRADOS 提供的多編程語(yǔ)言接口開(kāi)發(fā)。所以它們之間是一個(gè)階梯級(jí)過(guò)渡的關(guān)系。
RADOSGW是Ceph 對(duì)存儲(chǔ)網(wǎng)關(guān),是底層基于Librados向客戶(hù)端提供RESTful 接口的對(duì)象存儲(chǔ)接口。
RBD 是可靠的,使用Linux 內(nèi)核用戶(hù)和QEMU/KVM驅(qū)動(dòng)的全局分布的塊設(shè)備,在一個(gè)Ceph 的集群中,Ceph的塊設(shè)備支持自動(dòng)精簡(jiǎn)配置,調(diào)整大小和存儲(chǔ)數(shù)據(jù)。Ceph 的塊設(shè)備可以充分利用RADOS功能,實(shí)現(xiàn)如快照,復(fù)制和數(shù)據(jù)一致性等。
Ceph 的RADOS 塊設(shè)備通過(guò)RADOS協(xié)議與內(nèi)核模塊或librbd 的庫(kù)進(jìn)行交互。Ceph FS 是一個(gè)和Posix 兼容分布式文件系統(tǒng),使用Linux內(nèi)核用戶(hù)并支持FUSE,使用Ceph 存儲(chǔ)集群來(lái)存儲(chǔ)數(shù)據(jù)。
Ceph存儲(chǔ)集群從客戶(hù)端接收文件,每個(gè)文件都會(huì)被客戶(hù)端切分成一個(gè)或多個(gè)對(duì)象,然后將這些對(duì)象進(jìn)行分組,再根據(jù)一定的策略存儲(chǔ)到集群的OSD節(jié)點(diǎn)中,Ceph的核心RADOS通常是由少量的負(fù)責(zé)集群管理的Monitor進(jìn)程和大量的負(fù)責(zé)數(shù)據(jù)存儲(chǔ)的OSD進(jìn)程構(gòu)成,采用無(wú)中心節(jié)點(diǎn)的分布式架構(gòu),對(duì)數(shù)據(jù)進(jìn)行分塊多份存儲(chǔ)。具有良好的擴(kuò)展性和高可用性。
Ceph分布式文件系統(tǒng)提供了多種客戶(hù)端,包括對(duì)象存儲(chǔ)接口、塊存儲(chǔ)接口以及文件系統(tǒng)接口,具有廣泛的適用性,并且客戶(hù)端和存儲(chǔ)數(shù)據(jù)的OSD設(shè)備直接進(jìn)行數(shù)據(jù)交互,大大提高了數(shù)據(jù)的存取性能。Ceph作為分布式文件系統(tǒng),能夠在維護(hù)POSIX兼容性的同時(shí)加入了復(fù)制和容錯(cuò)功能。從其發(fā)展來(lái)看,Ceph不僅僅是一個(gè)文件系統(tǒng),還是一個(gè)有企業(yè)級(jí)功能的對(duì)象存儲(chǔ)生態(tài)環(huán)境。
接下來(lái)以簡(jiǎn)單的實(shí)例,來(lái)說(shuō)明如何搭建Ceph分布式存儲(chǔ)。這里使用了四臺(tái)主機(jī),分別安裝了CentOS 7.X系統(tǒng),其IP從172.16.1.101到172.16.1.104,一臺(tái)作為管理節(jié)點(diǎn)使用,名稱(chēng)為“server1”,兩臺(tái)作為數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),名稱(chēng)分別為“server2” 和“server3”。一臺(tái)作為客戶(hù)端使用。名稱(chēng)為“cephClient”。在管理主機(jī)上執(zhí)行“hostnamectl set-hostname server1”命令,修改其主機(jī)名稱(chēng)。
執(zhí)行“useradd cephuser”,“echo"cephuser" |passwd--stdin cephuser”命令,創(chuàng)建名為“cephuser”的賬戶(hù),其密碼為“cephuser”,用來(lái)管理主節(jié)點(diǎn)。
執(zhí)行“cat <
執(zhí)行“echo"cephuser ALL=(root)NOPASSWD:ALL" >>/etc/sudoers.d/cephuser”,“chmod 0440/etc/sudoers.d/cephuser”命令,賦予“cephuser”用戶(hù)Root權(quán)限,使其能以Root權(quán)限運(yùn)行所有命令。在其他的主機(jī)上分別執(zhí)行以上命令,執(zhí)行同樣的操作,來(lái)配置基礎(chǔ)的環(huán)境參數(shù)。
注意,對(duì)于客戶(hù)端主機(jī)來(lái)說(shuō),不需要?jiǎng)?chuàng)建專(zhuān)用賬戶(hù),使用“root”賬戶(hù)即可。
在“server1”上執(zhí)行“yum -y install ntp ntpdate”命令,安裝NTP組件,將“server1”作為時(shí)間服務(wù)器使用。
執(zhí)行“sed -i'/^server/s/^/#/g'/etc/ntp.conf”,“sed -i '25aserver 127.127.1.0 fudge 127.127.1.0 stratum 8'/etc/ntp.conf”命令,配置NTP參數(shù)。執(zhí)行“systemctl start ntpd”,“systemctl enable ntpd”命令,重啟并激活NTP服務(wù)。
執(zhí)行“netstat -utpln|grep 123”命令,查看NTP服務(wù)端口開(kāi)啟狀態(tài)。
在其他主機(jī)上執(zhí)行“yum -y install ntpdate”,“/usr/sbin/ntpdate 172.16.1.101”,“echo "/usr/sbin/ntpdate 172.16.1.101" >>/etc/rc.local”,“chmod +x/etc/rc.local”命令,根據(jù)“server1”來(lái)同步時(shí)間,并在開(kāi)機(jī)時(shí)自動(dòng)加載時(shí)間同步命令,并為其設(shè)置執(zhí)行權(quán)限。
在“server1”上執(zhí)行“yum -y install yum-utils”命令,來(lái)安裝YUM的管理工具。執(zhí)行“yum-config-manager--add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/”命令,來(lái)配置YUM管理器,添加指定的源。
執(zhí)行“l(fā)s/etc/yum.repos.d/”命令,查看對(duì)應(yīng)的源信息。
執(zhí)行“yum -y install epel-release--nogpgcheck”命令,來(lái)安裝對(duì)應(yīng)的源,并且不檢查公鑰。
執(zhí)行“cat <
輸入“[Ceph]”,“name=Ceph packages for $basearch”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/$basearch”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“[Cephnoarch]”,“name=Ceph noarch packages”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“[cephsource]”,“name=Ceph source packages”,“baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS”,“enabled=1”,“gpgcheck=0”,“type=rpmmd”,“gpgkey=https://mirrors.163.com/ceph/keys/release.asc”,“priority=1”,“END”行。
在其他主機(jī)上分別執(zhí)行以上命令,來(lái)配置源信息。
在“server1”上執(zhí)行“su -cephuser”,“mkdir cephdata”,“cd cephdata”命令,切換到“cephuser”賬戶(hù)環(huán)境,并在其家目錄中創(chuàng)建對(duì)應(yīng)的目錄,這樣更便于管理。
在該目錄中執(zhí)行“sudo yum -y install ceph-deploy”,“sudo yum -y install ceph–nogpgcheck”命令,安裝Ceph主程序和管理工具。
最后,健全農(nóng)業(yè)科學(xué)技術(shù)的推廣體系,發(fā)展技術(shù)市場(chǎng)和中介服務(wù)體系,避免農(nóng)業(yè)科技與農(nóng)業(yè)生產(chǎn)脫節(jié)的現(xiàn)象。加強(qiáng)農(nóng)科教相互協(xié)作,推進(jìn)農(nóng)業(yè)科研、教育、推廣體系“三位一體”建設(shè),充分形成農(nóng)業(yè)科學(xué)教育系統(tǒng)的整體優(yōu)勢(shì)。
如果安裝出現(xiàn)異常,可以執(zhí)行“sudo rm -rt/etc/yum.repos.d/centos.repo”,“sudo/etc/yum.repos.d/bak/*/etc/yum.repos.d/”命令,使用epel源執(zhí)行安裝即可。之后在“server2”和“server3”上分別執(zhí)行以上命令,所不同的是還要執(zhí)行“sudo yum -y install deltarpm”命令,來(lái)安裝“deltarpm”工具,避免出現(xiàn)啟動(dòng)失敗的情況。在客戶(hù)端主機(jī)上執(zhí)行“yum-y install yum-pluginpriorities”?!皔um -y install ceph ceph-radosgw--nogpgcheck”命令,安裝YUM優(yōu)先級(jí)插件,Ceph主程序和Ceph連接的網(wǎng)關(guān)程序。
在“server1”上進(jìn)入Ceph安裝目錄,執(zhí)行“sshkeygen -t rsa”命令,生成所需的秘鑰對(duì)。執(zhí)行“ssh-copy-id cephuser@server1”,“ssh-copyid cephuser@server2”,“ssh-copy-id cephuser@server3”,“ssh-copy-id root@cephclient”命令,將公鑰復(fù)制到所有的主機(jī)上。執(zhí)行“cat <
輸入“Host server1”,“Hostname server1”,“User cephuser”,“Host server2”,“Hostname server2”,“User cephuser”,“Host server3”,“Hostname server31”,“User cephuser”,“END”行,添加對(duì)應(yīng)的主機(jī)和賬戶(hù)名稱(chēng)。執(zhí)行“chmod 644/home/cephuser/.ssh/config”命令,為該配置文件合適的權(quán)限。執(zhí)行“ceph-deploy new server2 server3”命令,對(duì)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行初始化操作。如果出錯(cuò)的話(huà),可以在對(duì)應(yīng)的數(shù)據(jù)節(jié)點(diǎn)上執(zhí)行“yum -y install epel-release”,“rpm -e epel-release”,“rpm -qa epel-release”命令,安裝對(duì)應(yīng)的epel源,之后進(jìn)行安裝。
如果依然出錯(cuò),可以根據(jù)出錯(cuò)提示信息,執(zhí)行“rpm -ivh/varcache/yum/x86_4/7/xxx.rpm”命令,來(lái)執(zhí)行對(duì)應(yīng)的安裝操作,其中的“xxx”為具體的文件名稱(chēng)。之后在管理節(jié)點(diǎn)執(zhí)行初始化操作,就可以順利安裝了。注意,如果在配置過(guò)程中出現(xiàn)問(wèn)題,需要重新創(chuàng)建集群或重新安裝Ceph,可以執(zhí)行“ceph-deploy purge server2 server3”,“cephdeploy purgedata server2 server3”,“ceph-deploy forgetkeys &&rm ceph.*”命令,將Ceph集群中的數(shù)據(jù)全部清除。
在“server1”上執(zhí)行“cat <
對(duì)于數(shù)據(jù)節(jié)點(diǎn)來(lái)說(shuō),其配置文件位于“/etc/ceph/”目錄中,會(huì)自動(dòng)從管理節(jié)點(diǎn)同步配置信息。
執(zhí)行“ssh cephuser@server2”命令,連接到指定的數(shù)據(jù)節(jié)點(diǎn)。執(zhí)行“sudo fdisk/dev/sdb”。“sudo partx -a/dev/sdb”命令,對(duì)指定的磁盤(pán)進(jìn)行分區(qū)處理。執(zhí)行“sudo mkfs -t xfs/dev/sdb1”命令,創(chuàng)建所需的分區(qū)。執(zhí)行“sudo mkdir/var/local/osd0”命令,掛載OSD存儲(chǔ)路徑。執(zhí)行“sudo vi/etc/fstab”命令,輸入“/dev/sdb1/var/local/osd0 xfs defaults 0 0”行,保存對(duì)應(yīng)的文件系統(tǒng)信息。
在“server1”上執(zhí)行“ceph-deploy osd prepare server2:/var/local/osd0 server3:/var/local/osd1”命令,針對(duì)數(shù)據(jù)節(jié)點(diǎn)初始創(chuàng)建OSD節(jié)點(diǎn),并指定節(jié)點(diǎn)存儲(chǔ)文件位置。對(duì)于OSD節(jié)點(diǎn)來(lái)說(shuō),其“/var/local/osd*/”存儲(chǔ)數(shù)據(jù)實(shí)體的目錄權(quán)限必須為777,并且屬主和屬組必須為“ceph”。執(zhí)行“chmod +r/home/cephuser/cephdata/ceph.client.admin.keyring”命令,針對(duì)管理客戶(hù)端的Key文件設(shè)置讀取權(quán)限。
執(zhí)行“ceph-deploy osd activate server2:/var/local/osd0 server3:/var/local/osd1”命令,激活兩個(gè)OSD節(jié)點(diǎn)。在數(shù)據(jù)節(jié)點(diǎn)上執(zhí)行“netstat -utpln”命令,會(huì)顯示和OSD相關(guān)的端口信息。執(zhí)行“ceph-deploy admin server2 server3”命令,將管理密鑰復(fù)制到數(shù)據(jù)節(jié)點(diǎn)。
執(zhí)行“sudo cp/home/cephuser/cephdata/ceph.client.admin.keyring/etc/ceph/”,“sudo cp/home/cephuser/cephdata/ceph.conf/etc/ceph/”命令,將管理Key文件和Ceph主配置文件復(fù)制到指定目錄。
在“server1”上執(zhí)行“ceph-deploy install ceph-client”命令,針對(duì)客戶(hù)端主機(jī)安裝Ceph客戶(hù)端程序。
執(zhí)行“ceph-deploy admin cephclient”命令,將管理密鑰推動(dòng)給客戶(hù)端。
執(zhí)行“ssh root@cephclient”,“chmod +r/etc/ceph/ceph.client.admin.keyring”,“exit”命令,遠(yuǎn)程連接客戶(hù)端,針對(duì)密鑰文件文件配置讀取權(quán)限。
執(zhí)行“ceph osd pool create cephfs_data 128”命令,創(chuàng)建數(shù)據(jù)存儲(chǔ)池,其中的“128”為塊的數(shù)量。
執(zhí)行“ceph osd pool create cephfs_metadata 128”命令,創(chuàng)建元數(shù)據(jù)存儲(chǔ)池。
執(zhí)行“ceph fs new cephfs cephfs_data cephfs_metadata”命令,創(chuàng)建文件系統(tǒng)。
執(zhí)行“ceph fs ls”命令,查看文件系統(tǒng)。
執(zhí)行“ssh root@cephclient”,“mkdir/mnt/ceph”命令,遠(yuǎn)程連接客戶(hù)端,創(chuàng)建所需目錄。
執(zhí)行“grep key/etc/ceph/ceph.client.admin.keyring |awk '{print$3}' >>/etc/ceph/admin.secret”命令,生成一個(gè)Key。
執(zhí)行“cat/etc/ceph/admin.secret”命令,顯示該Key的內(nèi)容。
執(zhí)行“mount -t ceph 172.16.1.102:6789:/ /mnt/ceph/ -o name=admin,secretfile=/etc/ceph/admin.secret”命令,掛載“server2”的MON進(jìn)程,并指定Key文件。
執(zhí)行“df -hT |grep ceph”命令,顯示目標(biāo)分區(qū)信息。進(jìn)入“/mnt/ceph”目錄,執(zhí)行“touch {1..10}.file”命令,創(chuàng)建所需的文件。
執(zhí)行“dd if=/dev/zero of=/mnt/ceph/1.file bs=1G count=1”命令,將“/dev/zero”中的無(wú)限輸入寫(xiě)到“1.file”文件中。
執(zhí)行“df -hT |grep ceph”命令,顯示寫(xiě)入信息。執(zhí)行“mkdir/mnt/ceph1”,“mount -t ceph 172.16.1.103:6789:/ /mnt/ceph1/ -o name=admin,secretfile=/etc/ceph/admin.secret”,“df -hT |grep ceph”命令,在“server3”節(jié)點(diǎn)上執(zhí)行類(lèi)似的操作。