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