部署ceph叢集
ceph是分散式檔案系統
1.安裝ceph-deploy
在admin節點新增Ceph的yum源倉庫,然後再安裝ceph-deploy
1.1啟用extras倉庫
//如果是別的源就用別的源
sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
1.2安裝並使用Extra Packages for Enterprise Linux (EPEL)倉庫
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7. noarch.rpm
1.3 新增ceph倉庫
新增ceph倉庫到/etc/yum.repos.d/ceph.repo 。把{ceph-stable-release}替換為你想要的ceph版本,如luminous
cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph]
name =Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-luminous/el7/$basearch
enabled=1
priority=2
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
type =rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
更新倉庫(可選)並安裝ceph-deploy
sudo yum update
sudo yum install ceph-deploy
2.ceph節點安裝
admin節點必須可以免密通過ssh登入ceph節點。當ceph-deploy作為一個使用者登入到ceph node的時候,這個使用者必須擁有免密的sudo許可權。
2.1 安裝ntp
ntp是網路時間同步工具,可以同步各個節點的時間。
建議在ceph節點(特別是ceph monitor節點)安裝ntp,以防止時間錯誤。
sudo yum install ntp ntpdate ntp-doc
如果提示有衝突,就先刪除已有的相關軟體,然後再執行一次。
確保已經開啟了ntp服務,並確保每個節點的ntp都使用了一樣的server。
//1.配置啟動項
chkconfig ntpd on
//2.同步時間
ntpdate -u cn.pool.ntp.org
//3.啟動ntpd服務
systemctl start ntpd
//4.驗證ntp服務已經執行
pgrep ntpd
2.2 安裝ssh server
所有的ceph node都需要執行以下步驟:
1.每個節點都安裝ssh server
sudo yum install openssh-server
2.確保ssh server在所有ceph node上都在執行。
2.3建立一個ceph部署使用者
ceph-deploy必須要作為一個擁有免密sudo許可權的使用者登入到ceph node,因為它需要在不提供密碼的情況下安裝軟體與配置檔案。
最近版本的ceph-deploy提供了一個–username選項去讓你指定任意擁有免密sudo許可權的使用者(包括root,但是不建議用root)。想要使用ceph-deploy的–username {username},你指定的使用者必須擁有免密ssh許可權登入ceph node,因為ceph deploy不會問你要密碼。
ceph推薦在所有ceph node上為ceph-deploy建立特定使用者。但是不要用“ceph”作為使用者名稱。叢集內採用統一的使用者名稱可以降低使用難度(不必須),但是你要避免使用太明顯的使用者名稱,因為黑客會使用一般的使用者名稱進行攻擊(比如root,admin,產品名)。下面解釋如何建立免密sudo許可權使用者:
1.在每個ceph節點建立新使用者
注意,在admin節點也是這個使用者,使用者名稱最好一致!
sudo useradd -d /home/{username} -m {username}
sudo passwd {username}
2.為該使用者獲取免密sudo許可權
echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}
2.4 實現免密ssh登入
由於ceph-deploy不會提示輸入密碼,你必須在admin node生成ssh keys並且分發公鑰給每個ceph node。
1.生成ssh keys,但是不要使用sudo或是root使用者,把passphrase留空:
ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-admin/.ssh/id_rsa.
Your public key has been saved in /ceph-admin/.ssh/id_rsa.pub.
2.複製公鑰到ceph node,把{username}替換為你建立的ceph deploy使用者,把node替換為ceph node的ip。
ssh-copy-id {username}@node1
ssh-copy-id {username}@node2
ssh-copy-id {username}@node3
3.(建議)在admin node上修改~/.ssh/config
檔案,這樣的話ceph-deploy可以在你每次用ceph-deploy登入到ceph node的ceph-deploy使用者,而不需要你指定–username {username}。這有利於簡化ssh和scp的使用。
Host node1
Hostname node1
User {username}
Host node2
Hostname node2
User {username}
Host node3
Hostname node3
User {username}
2.5 在啟動時啟用網路
ceph osds通過網路彼此協作或向ceph monitors報告。如果網路預設關閉,ceph叢集就無法在啟動過程中聯網,直到你連線上網路。
一些lunix發行版(如centos)的網路介面預設關閉。為了確認ceph守護程序可以彼此溝通,需要確認網路介面開啟。例如,在rh與centos,檢視/etc/sysconfig/network-scripts
下的ifcfg-{iface}檔案裡的ONBOOT
設定為yes。
2.6 確保連通性
通過ping hostnames(hostname -s)來確保聯通性。
note: hostnames需要解析到ip地址,但不能是127.0.0.1。如果你的admin node也被作為一個ceph node,你同樣需要確保它解析hostname到ip地址。
2.7開啟需要到埠
如果把防火牆關了就不用看這一步
ceph monitor預設通過6789埠進行溝通。ceph osds預設通過6800:7300之間的埠溝通。Ceph OSDs可以使用多個網路與clients,monitors,其他osds(為了複製),其他osd(為了心跳訊號)。
一些發行版(如rh),預設防火牆配置很嚴格。你也許需要去調整你的防火牆設定去允許訪問申請,這樣網路內的守護程序可以交流。
rh7的防火牆,在public zone,為ceph monitor節點新增ceph-min service,為OSDs and MDSs新增ceph service,並確保您將設定設定為永久性(permanent)的,以便在重新啟動時啟用它們。
例如,在monitors:
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
在osds 和 mdss:
sudo firewall-cmd --zone=public --add-service=ceph --permanent
一旦你在防火牆配置里加了--permanent
,你可以通過重啟防火牆來動態更改配置:
sudo firewall-cmd --reload
對於iptables(與firewall一樣功能的另一種防火牆管理工具),為ceph monitors新增6789埠,為ceph osds新增6800:7300埠,例如
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
一旦你完成來iptables的配置,確保你當的節點重啟時,你的這些變更是持久化的。例如:
/sbin/service iptables save
2.7 tty
On CentOS and RHEL, you may receive an error while trying to execute ceph-deploy commands. If requiretty is set by default on your Ceph nodes, disable it by executing sudo visudo and locate the Defaults requiretty setting. Change it to Defaults:ceph !requiretty or comment it out to ensure that ceph-deploy can connect using the user you created with Create a Ceph Deploy User.
Note If editing, /etc/sudoers, ensure that you use sudo visudo rather than a text editor.
2.8 selinux
在centos和rh,selinux預設是開啟的。為了經驗你的安裝,建議關閉selinux並且確保您的安裝和叢集在加強配置之前正常工作。用以下程式碼關閉selunix:
sudo setenforce 0
修改/etc/selinux/config
檔案來永久關閉selinux:
SELINUX=disabled
2.9首選項
確保你的package manager安裝並啟用了首選項包。centos,你也許需要安裝epel(第一步我們已經安裝了)。在rh,你也許需要啟用可選倉庫。
sudo yum install yum-plugin-priorities
例如,在rh7,執行以下程式碼去安裝yum-plugin-priorities
且啟用rhel-7-server-optional-rpms
倉庫:
sudo yum install yum-plugin-priorities --enablerepo=rhel-7-server-optional-rpms
3.快速開始
前2步我們做好了安裝ceph的前期準備工作,下面開始正式安裝ceph。
在admin node上建立一個目錄,用來存放ceph-deploy為叢集生成的配置檔案和key。
mkdir my-cluster
cd my-cluster
ceph-deploy會輸出檔案到這個目錄,一定要確保在當前目錄下執行ceph-deploy。
3.1開始之前的注意事項
如果在任何時候,你遇到了問題並且向重新開始,執行以下命令去刪除ceph packages,並且刪除所有的與之相關的data和配置:
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
如果你執行了刪除,以必須重新安裝ceph。最後一個命令刪除了所有ceph-deploy在安裝過程中寫入的檔案。
3.2建立叢集
在admin node的你建立的用來儲存配置檔案的目錄(my-cluster)下,用ceph-deploy執行以下步驟:
1.建立叢集:
注意,如果你為ceph-deploy建立的使用者,例如:userceph,那麼在admin node上執行ceph-deploy 命令的使用者也要是ceph-deploy
ceph-deploy new {initial-monitor-node(s)}
指定節點的hostname(所以你要去/etc/hosts里加入叢集內的主機資訊),fqdn(不知道是啥)或hostname:fqdn,例如:
ceph-deploy new node1
用ls和cat命令去檢查當前目錄的輸出。你會看到一個ceph的配置檔案(ceph.conf),一個monitor secret keyring(ceph.mon.keyring),還有一個關於新叢集的日誌檔案。可以通過ceph-deploy new -h
檢視詳細資訊
3.3 安裝ceph包
在各個ceph節點安裝ceph
ceph-deploy install {ceph-node} [...]
例如:
ceph-deploy install node1 node2 node3
ceph-deploy將會在每個節點安裝ceph
也可以自己手動安裝
sudo yum -y install ceph ceph-osd ceph-mds ceph-mon ceph-radosgw
3.4部署初始monitor並收集keys
初始化monitor
ceph-deploy mon create-initial
一旦你完成了這一步,你的當前目錄將會看到如下keyrings:
- ceph.client.admin.keyring
- ceph.bootstrap-mgr.keyring
- ceph.bootstrap-osd.keyring
- ceph.bootstrap-mds.keyring
- ceph.bootstrap-rgw.keyring
- ceph.bootstrap-rbd.keyring
如果程序失敗且返回一個類似於“Unable to find /etc/ceph/ceph.client.admin.keyring”的錯誤資訊,請確保ceph.conf中的monitor node的ip是公共ip(也就是可以ping通咯),不是私有ip(如127.0.0.1)
3.5 複製配置檔案和key
上一步我們初始化了monitor並生成了keyring,現在我們通過ceph-deploy拷貝配置檔案和admin key到admin node和ceph node,這樣的話你就可以在使用ceph cli時不用每次都去指定monitor address和ceph.client.admin.keyring。
ceph-deploy admin {ceph-node(s)}
例如
ceph-deploy admin node1 node2 node3
3.6部署manager daemon(只有luminous+ 版本需要)
ceph-deploy mgr create node1 *Required only for luminous+ builds, i.e >= 12.x builds*
3.7新增三個osd
這一步,假設你在每個節點都有一個沒有使用的硬碟,名字是/dev/vdb
。確認這個硬碟沒有在使用且沒有含有任何重要資料。
ceph-deploy osd create –data {device} {ceph-node}
例如
ceph-deploy osd create --data /dev/vdb node1
ceph-deploy osd create --data /dev/vdb node2
ceph-deploy osd create --data /dev/vdb node3
==注意:我安裝的時候,osd節點的機器硬碟被lvm(邏輯卷,也就是/dev/mapper/下的的東西)佔用了。可以用lvs,lvdisplay,pvs,pvdisplay分別檢視邏輯卷和物理卷的詳細情況。我移除了邏輯卷,釋放了物理卷/dev/sdc==
3.8 檢查叢集健康狀況
ssh node1 sudo ceph health
你的叢集應該返回HEALTH_OK
。你可以通過以下程式碼檢視更詳細的叢集狀態:
ssh node1 sudo ceph -s
4.擴充套件叢集
一旦你有了一個基礎叢集並正在執行,下一步就是去擴充套件叢集。新增一個Ceph Metadata Server
到node1。然後新增一個Ceph Monitor和Ceph Manager到node2和node3去實現可靠性和可用性。
4.1 新增一個metadata server
想要使用CephFS,你需要至少一個metadata server。執行以下命令去建立一個metadata server:
ceph-deploy mds create {ceph-node}
例如
ceph-deploy mds create node1
4.2 新增monitors
一個ceph儲存叢集需要至少一個monitor和一個manager去執行。為了高可用,ceoh儲存叢集一般執行多個monitors,這樣的話某個monitor失效了不會拖累整個叢集。ceph使用Ceph使用Paxos演算法,這需要大多數monitor(也就是說,比monitor總數的一半還多)去組成一個quorum。奇數的monitor往往更好,但這不是必需的。
新增兩個ceph monitor到叢集:
ceph-deploy mon add {ceph-nodes}
例如:
ceph-deploy mon add node2 node3
注意,如果安裝過程中報錯了。請做如下處理:
#1.編輯admin節點的之前生成的cenf.conf檔案,
#把你要新增的節點hostname,ip加進去
#並加入public_network
[global]
fsid = a443f987-c3d2-4e7e-9783-82640b97814d
mon_initial_members = ERP-CEPH-TEST2,ERP-CEPH-TEST3
mon_host = 10.59.1.136,10.59.1.137
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public_network = 10.59.1.0/24
#3.再執行一次mon add
ceph-deploy --overwrite-conf mon add node2 node3
一旦你添加了新的monitor,ceph將會開始同步這個monitor並且組成quorum。你可以通過以下命令檢視quorum狀態:
ceph quorum_status --format json-pretty
tip:當你執行多個monitor時,你需要在每個monitor機器上安裝配置ntp。確保ntp與monitor一同執行
4.3新增managers
ceph manager守護程序使用activ/stanby模式。部署額外的manager守護程序可以確保當一個守護程序或節點失效時,另外一個可以接管而不影響服務。
用以下程式碼去部署額外的manager守護程序:
ceph-deploy mgr create node2 node3
你應該可以通過以下命令看到處於standby狀態的managers:
ssh node1 sudo ceph -s
4.4新增一個RGW例項
想要使用Ceph Object Gateway
元件,你必須部署一個rgw例項。執行以下程式碼去建立一個rgw例項:
ceph-deploy rgw create {gateway-node}
例如:
ceph-deploy rgw create node1
預設情況下,rgw監聽7480埠。這個預設埠可以通過編輯執行rgw的節點上的ceph.conf
來實現:
[client]
rgw frontends = civetweb port=80
如果用的是ipv6:
[client]
rgw frontends = civetweb port=[::]:80
5.儲存/檢索物件資料
想要在ceph儲存叢集裡儲存object data,一個ceph客戶端必須:
1. 設定一個object name
2. 指定一個pool
Ceph Client檢索最新的叢集對映,CRUSH演算法計算如何將物件對映到placement group,然後計算如何動態地將placement group分配給Ceph OSD守護程序。想要找到object地址,你只需要object名稱和pool名稱。例如:
ceph osd map {poolname} {object-name}
練習:
1.建立一個檔案,指定它的object name,並存入指定pool裡
echo {Test-data} > testfile.txt
ceph osd pool create mytest 8
rados put {object-name} {file-path} --pool=mytest
rados put test-object-1 testfile.txt --pool=mytest
2.通過以下命令檢視mytest pool裡儲存的物件
rados -p mytest ls
3.檢視object儲存位置
ceph osd map {pool-name} {object-name}
ceph osd map mytest test-object-1
4.刪除儲存的物件
rados rm test-object-1 --pool=mytest
5.刪除pool
ceph osd pool rm mytest
注意,因為安全原因,ceph會報錯,提示你要把poll名重複兩次並加上--yes-i-really-really-mean-it
eph osd pool rm mytest mytest --yes-i-really-really-mean-it
但是即使這樣也還會報錯,進一步提示你要設定mon節點的ceph.conf的內容,加上:
[mon]
mon_allow_pool_delete = true
這個內容我只在一個mon節點裡加上了,然後在另一個節點執行了刪除,也生效了。
然後再執行以上刪除步驟,就可以刪除了。