您好,登錄后才能下訂單哦!
小編給大家分享一下Ceph如何實現集群搭建,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Ceph是一個分布式存儲,可以提供對象存儲、塊存儲和文件存儲,其中對象存儲和塊存儲可以很好地和各大云平臺集成。一個Ceph集群中有Monitor節點、MDS節點(可選,用于文件存儲)、至少兩個OSD守護進程。
Ceph OSD:OSD守護進程,用于存儲數據、處理數據拷貝、恢復、回滾、均衡,并通過心跳程序向Monitor提供部分監控信息。一個Ceph集群中至少需要兩個OSD守護進程。
Monitor:維護集群的狀態映射信息,包括monitor、OSD、Placement Group(PG)。還維護了Monitor、OSD和PG的狀態改變歷史信息。
MDS:存儲Ceph文件系統的元數據。
4臺服務器:1臺作為Monitor,1臺作為OSD RGW,還有兩臺作為OSD。ps:我們不搭建CephFS。
所有服務器都安裝Ubuntu 16.04。
分別將Monitor節點定義為node1,兩臺OSD節點定義為node2、node3,RGW節點定義為node4。
打開Monitor節點的/etc/hostname文件,內容修改為node1,保存退出。但該文件需OS重啟后才能生效,因此需再手動執行命令讓其立刻生效,命令為:
# hostname node1
再分別打開各節點的/etc/hosts文件,加入這四個節點ip與名稱的對應關系,類似如下:
127.0.0.1 localhost 127.0.1.1 node1 192.168.1.100 node1 192.168.1.101 node2 192.168.1.102 node3 192.168.1.103 node4 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
使用Monitor服務器作為NTP server,另外3臺作為NTP client。
需安裝NTP服務,執行命令:apt-get install ntp。 完成后,修改配置文件/etc/ntp.conf。因為環境不通外網,無法訪問Ubuntu時間源。并且,這個環境也沒有其他的NTP時間源,因此,在這里,我們使用Monitor服務器作為NTP server的本地時間源。在文件末尾添加如下內容:
server 127.127.1.0 # 如果有其他的NTP源,可以更換這里的ip地址。 fudge 127.127.1.0 stratum 10 并注銷掉以Ubuntu時間源的部分。 #pool 0.ubuntu.pool.ntp.org iburst #pool 1.ubuntu.pool.ntp.org iburst #pool 2.ubuntu.pool.ntp.org iburst #pool 3.ubuntu.pool.ntp.org iburst #pool ntp.ubuntu.com
修改完成后,保存退出。并重啟ntp服務,執行命令:service ntp restart。
注意:NTP服務剛重啟時,需要一定的時間來同步時間源,不能立刻提供服務,需一定時間后才能正常工作(一般5分鐘左右)。可在NTP server端執行明令ntpq -p來查看服務狀態。
需安裝ntpdate,執行命令:apt install ntpdate。
安裝后,執行命令ntpdate [-d] {serverIp}來同步時間。-d表示打開調試信息,可不打開。例如:
# ntpdate 109.105.115.67
成功時會出現類似提示:ntpdate[39600]: step time server 109.105.115.67 offset -46797.696033 sec。如果出現:ntpdate[28489]: no server suitable for synchronization found。可能是因為server還未能正常提供服務,等待一段時間后再次嘗試。
同步成功后,還需要將時間寫入硬件時鐘,防止OS重啟后時間恢復至原樣。執行命令hwclock –w。
在所有的節點上都安裝SSH server服務。
# apt-get install openssh-server
因為我們搭建的Ceph直接使用root用戶,所以需要修改ssh配置文件/etc/ssh/sshd_config,搜索PermitRootLogin選項,將其參數改為yes。保存退出文件,并重啟SSH服務,執行命令:service ssh restart。
生成SSH keys,不要設置passphrase,所有的輸入選項都直接回車。
# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub.
拷貝這個key到所有的節點。
# ssh-copy-id node1 # ssh-copy-id node2 # ssh-copy-id node3 # ssh-copy-id node4
如果整個內網環境需要設置網絡代理才能使用apt-get安裝程序,那么需要在配置文件/etc/environment中添加,如:
http_proxy="http://[proxy-ip]:[proxy-port]" https_proxy=https://[proxy-ip]:[proxy-port]
設置完成后,執行命令:export http_proxy="http://[proxy-ip]:[proxy-port]"; export https_proxy=https://[proxy-ip]:[proxy-port],使得配置立即生效。
注意:一定要在/etc/environment中配置,而不能在諸如/etc/profile、~/.profile等類似文件配置。因為,安裝ceph時,會使用ssh來連接遠程節點并apt-get安裝程序,但ssh只能識別/etc/environment中的環境變量,設置在其他文件中會導致網絡訪問失敗。
注意二:所有節點都需要設置。
這里,我們直接在Monitor節點node1上安裝ceph-deploy,然后通過ceph-deploy在node1上部署Monitor,在node2和node3節點上部署OSD,最后,在node4上部署Ceph網關rgw。
在node1上創建一個目錄,用來維護ceph-deploy生成的配置信息。ceph-deploy命令會在當前目錄生成輸出文件,確保執行該命令時位于對應的目錄。
mkdir my-cluster cd my-cluster
更新鏡像倉庫,并安裝ceph-deploy。
apt-get update && sudo apt-get install ceph-deploy
在安裝過程中如果遇到了問題,想重新開始安裝,執行以下命令來清空配置。
ceph-deploy purgedata {ceph-node} [{ceph-node}] ceph-deploy forgetkeys
如果還想清空Ceph包,需執行:
ceph-deploy purge {ceph-node} [{ceph-node}]
注意:在實際的操作中,如果直接執行ceph-deploy purgedata,總是會報錯,提示Ceph還安裝在該節點上,拒絕執行清空操作。因此我都是先執行ceph-deploy purge,再執行ceph-deploy purgedata和ceph-deploy forgetkeys。
ceph-deploy new {initial-monitor-node(s)}
如:
ceph-deploy new node1
在當前目錄下使用ls和cat命令檢查ceph-deploy輸出結果,可以看到一個ceph配置文件,一個密鑰環以及為新集群創建的日志文件。
因為我們環境中只有兩個OSD,而Ceph模式的副本個數為3,因此我們需要修改配置文件Ceph.conf,在[global]部分增加如下配置:
osd pool default size = 2
如果OSD存儲數據分區的文件系統類型不是xfs,則需要設置一些osd變量,否則OSD不能正常啟動,報錯為“ERROR: osd init failed: (36) File name too long”。同樣,在Ceph.conf文件,[global]部分增加如下配置:
osd max object name len = 256 osd max object namespace len = 64
如果環境中有多種網絡,那么需要在Ceph.conf的[global]部分下增加如下配置。
public network = {ip-address}/{netmask}
如果環境中只有一種網絡,則不需要此配置。關于網絡配置更多信息,可參考:http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/
ceph-deploy install {ceph-node}[{ceph-node} ...]
例如:
ceph-deploy install node1 node2 node3 node4
執行命令后,會在每個節點上都安裝Ceph。注意:如果執行過ceph-deploy purge命令,則需要重新安裝Ceph。
安裝并初始化Monitor,收集keys:
# ceph-deploy mon create-initial
執行完命令后,當前目錄會生成如下keyring:
? {cluster-name}.client.admin.keyring ? {cluster-name}.bootstrap-osd.keyring ? {cluster-name}.bootstrap-mds.keyring ? {cluster-name}.bootstrap-rgw.keyring
OSD的數據目錄可以使用單獨的分區,也可以只使用已有分區的目錄。這里我們是直接使用目錄的方式。如果需要使用單獨數據分區和日志分區,可參考: http://docs.ceph.com/docs/master/rados/deployment/ceph-deploy-osd/。
添加兩個OSD。
# ssh node2 # sudo mkdir /var/local/osd0 # chown ceph:ceph /var/local/osd0 # exit # ssh node3 # sudo mkdir /var/local/osd1 # chown ceph:ceph /var/local/osd1 # exit
ceph-deploy osd prepare {ceph-node}:/path/to/directory
如:
# ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
ceph-deploy osd prepare {ceph-node}:/path/to/directory
如:
# ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
ceph-deploy admin {admin-node} {ceph-node}
如:
# ceph-deploy admin node1 node2 node3
確保ceph.client.admin.keyring的權限正確,在每個節點上執行:
chmod +r /etc/ceph/ceph.client.admin.keyring
# ceph –s
集群應該返回health HEALTH_OK,并且所有pg都是active+clean的狀態,這樣部署就完全沒問題了。
如果要使用Ceph的對象存儲,就需要部署rgw網關。執行以下步驟創建一個新的rgw實例:
ceph-deploy rgw create {gateway-node}
如:
# ceph-deploy rgw create node4
當顯示狀態健康時,可寫入數據并查看數據。
創建一個普通文本文件testfile.txt,并向其寫入數據。
創建一個pool。格式為:rados mkpool {pool-name},執行:
# rados mkpool data
將文件寫入pool。格式為:rados put {object-name} {file-path} --pool={pool-name},執行:
# rados put test-object-1 testfile.txt --pool=data
如果文件不大,應該很快就寫完并成功了。如果卡主較長時間,則可能是出錯了,需要排查問題。
查看文件是否存在于pool中,格式為:rados -p {pool-name} ls,執行:
# rados -p data ls
確定文件的位置。格式為:ceph osd map {pool-name} {object-name},執行:
# ceph osd map data test-object-1
從pool中讀取文件。格式為:rados get {object-name} --pool={pool-name} {file-path} ,執行:
# rados get test-object-1 --pool=data myfile
可比對讀出的文件myfile和原文件testfile.txt是否相同,執行命令:diff myfile testfile.txt。
從pool中刪除文件。格式為:rados rm {object-name} --pool={pool-name},執行:
# rados rm test-object-1 --pool=data
看完了這篇文章,相信你對“Ceph如何實現集群搭建”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。