Ceph 儲存叢集 - 搭建儲存叢集
目錄
- 一、準備機器
- 二、ceph節點安裝
- 三、搭建叢集
- 四、擴充套件叢集(擴容)
一、準備機器
本文描述如何在 CentOS 7 下搭建 Ceph 儲存叢集(STORAGE CLUSTER)。
一共4臺機器,其中1個是管理節點,其他3個是ceph節點:
hostname | ip | role | 描述 |
---|---|---|---|
admin-node | 192.168.0.130 | ceph-deploy | 管理節點 |
node1 | 192.168.0.131 | mon.node1 | ceph節點,監控節點 |
node2 | 192.168.0.132 | osd.0 | ceph節點,OSD節點 |
node3 | 192.168.0.133 | osd.1 | ceph節點,OSD節點 |
管理節點:admin-node
ceph節點:node1, node2, node3
所有節點:admin-node, node1, node2, node3
1. 修改主機名
# vi /etc/hostname
2. 修改hosts檔案
# vi /etc/hosts
192.168.0.130 admin-node
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3
3. 確保聯通性(管理節點)
用 ping 短主機名( hostname -s )的方式確認網路聯通性。解決掉可能存在的主機名解析問題。
$ ping node1
$ ping node2
$ ping node3
二、ceph節點安裝
1. 安裝NPT(所有節點)
我們建議在所有 Ceph 節點上安裝 NTP 服務(特別是 Ceph Monitor 節點),以免因時鐘漂移導致故障,詳情見時鐘。
# sudo yum install ntp ntpdate ntp-doc
2. 安裝SSH(所有節點)
# sudo yum install openssh-server
3. 建立部署 CEPH 的使用者(所有節點)
ceph-deploy 工具必須以普通使用者登入 Ceph 節點,且此使用者擁有無密碼使用 sudo 的許可權,因為它需要在安裝軟體及配置檔案的過程中,不必輸入密碼。
建議在叢集內的所有 Ceph 節點上給 ceph-deploy 建立一個特定的使用者,但不要用 “ceph” 這個名字。
- 在各 Ceph 節點建立新使用者
# sudo useradd -d /home/zeng -m zeng
# sudo passwd zeng
- 確保各 Ceph 節點上新建立的使用者都有 sudo 許可權
# echo "zeng ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/zeng
# sudo chmod 0440 /etc/sudoers.d/zeng
4. 允許無密碼SSH登入(管理節點)
因為 ceph-deploy 不支援輸入密碼,你必須在管理節點上生成 SSH 金鑰並把其公鑰分發到各 Ceph 節點。 ceph-deploy 會嘗試給初始 monitors 生成 SSH 金鑰對。
- 生成 SSH 金鑰對
不要用 sudo 或 root 使用者。提示 “Enter passphrase” 時,直接回車,口令即為空:
//切換使用者,如不特別說明,後續的操作均在該使用者下進行
# su zeng
//生成金鑰對
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/zeng/.ssh/id_rsa):
Created directory '/home/zeng/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/zeng/.ssh/id_rsa.
Your public key has been saved in /home/zeng/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Tb0VpUOZtmh+QBRjUOE0n2Uy3WuoZVgXn6TBBb2SsGk zeng@admin-node
The key's randomart image is:
+---[RSA 2048]----+
| .+@=OO*|
| *.BB@=|
| ..O+Xo+|
| o E+O.= |
| S oo=.o |
| .. . |
| . |
| |
| |
+----[SHA256]-----+
- 把公鑰拷貝到各 Ceph 節點
$ ssh-copy-id zeng@node1
$ ssh-copy-id zeng@node2
$ ssh-copy-id zeng@node3
完成後, /home/zeng/.ssh/ 路徑下:
- admin-node 多了檔案
id_rsa
、id_rsa.pub
和known_hosts
; - node1, node2, node3 多了檔案
authorized_keys
。
- 修改~/.ssh/config 檔案
修改 ~/.ssh/config 檔案(沒有則新增),這樣 ceph-deploy 就能用你所建的使用者名稱登入 Ceph 節點了。
// 必須使用sudo
$ sudo vi ~/.ssh/config
Host admin-node
Hostname admin-node
User zeng
Host node1
Hostname node1
User zeng
Host node2
Hostname node2
User zeng
Host node3
Hostname node3
User zeng
- 測試ssh能否成功
$ ssh zeng@node1
$ exit
$ ssh zeng@node2
$ exit
$ ssh zeng@node3
$ exit
- 問題:如果出現 "Bad owner or permissions on /home/zeng/.ssh/config",執行命令修改檔案許可權。
$ sudo chmod 644 ~/.ssh/config
5. 引導時聯網(ceph節點)
Ceph 的各 OSD 程序通過網路互聯並向 Monitors 上報自己的狀態。如果網路預設為 off ,那麼 Ceph 叢集在啟動時就不能上線,直到你開啟網路。
$ cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
//確保ONBOOT 設定成了 yes
6. 開放所需埠(ceph節點)
Ceph Monitors 之間預設使用 6789 埠通訊, OSD 之間預設用 6800:7300 這個範圍內的埠通訊。Ceph OSD 能利用多個網路連線進行與客戶端、monitors、其他 OSD 間的複製和心跳的通訊。
$ sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
// 或者關閉防火牆
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
7. 終端(TTY)(ceph節點)
在 CentOS 和 RHEL 上執行 ceph-deploy 命令時可能會報錯。如果你的 Ceph 節點預設設定了 requiretty ,執行
$ sudo visudo
找到 Defaults requiretty 選項,把它改為 Defaults:ceph !requiretty 或者直接註釋掉,這樣 ceph-deploy 就可以用之前建立的使用者(建立部署 Ceph 的使用者 )連線了。
編輯配置檔案 /etc/sudoers 時,必須用 sudo visudo 而不是文字編輯器。
8. 關閉selinux(ceph節點)
$ sudo setenforce 0
要使 SELinux 配置永久生效(如果它的確是問題根源),需修改其配置檔案 /etc/selinux/config:
$ sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
即修改 SELINUX=disabled。
9. 配置EPEL源(管理節點)
$ sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
10. 把軟體包源加入軟體庫(管理節點)
$ sudo vi /etc/yum.repos.d/ceph.repo
把如下內容粘帖進去,儲存到 /etc/yum.repos.d/ceph.repo 檔案中。
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
11. 更新軟體庫並安裝ceph-deploy(管理節點)
$ sudo yum update && sudo yum install ceph-deploy
$ sudo yum install yum-plugin-priorities
時間可能比較久,耐心等待。
三、搭建叢集
在 管理節點 下執行如下步驟:
1. 安裝準備,建立資料夾
在管理節點上建立一個目錄,用於儲存 ceph-deploy 生成的配置檔案和金鑰對。
$ cd ~
$ mkdir my-cluster
$ cd my-cluster
注:若安裝ceph後遇到麻煩可以使用以下命令進行清除包和配置:
// 刪除安裝包
$ ceph-deploy purge admin-node node1 node2 node3
// 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys
2. 建立叢集和監控節點
建立叢集並初始化監控節點:
$ ceph-deploy new {initial-monitor-node(s)}
這裡node1是monitor節點,所以執行:
$ ceph-deploy new node1
完成後,my-clster 下多了3個檔案:ceph.conf
、ceph-deploy-ceph.log
和 ceph.mon.keyring
。
- 問題:如果出現 "[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure
requiretty
is disabled for node1",執行 sudo visudo 將 Defaults requiretty 註釋掉。
3. 修改配置檔案
$ cat ceph.conf
內容如下:
[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
把 Ceph 配置檔案裡的預設副本數從 3 改成 2 ,這樣只有兩個 OSD 也可以達到 active + clean 狀態。把 osd pool default size = 2 加入 [global] 段:
$ sed -i '$a\osd pool default size = 2' ceph.conf
如果有多個網絡卡,
可以把 public network 寫入 Ceph 配置檔案的 [global] 段:
public network = {ip-address}/{netmask}
4. 安裝Ceph
在所有節點上安裝ceph:
$ ceph-deploy install admin-node node1 node2 node3
- 問題:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release
解決方法:
sudo yum -y remove epel-release
5. 配置初始 monitor(s)、並收集所有金鑰
$ ceph-deploy mon create-initial
完成上述操作後,當前目錄裡應該會出現這些金鑰環:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring
6. 新增2個OSD
- 登入到 Ceph 節點、並給 OSD 守護程序建立一個目錄,並新增許可權。
$ ssh node2
$ sudo mkdir /var/local/osd0
$ sudo chmod 777 /var/local/osd0/
$ exit
$ ssh node3
$ sudo mkdir /var/local/osd1
$ sudo chmod 777 /var/local/osd1/
$ exit
- 然後,從管理節點執行 ceph-deploy 來準備 OSD 。
$ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
- 最後,啟用 OSD 。
$ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1
7.把配置檔案和 admin 金鑰拷貝到管理節點和 Ceph 節點
$ ceph-deploy admin admin-node node1 node2 node3
8. 確保你對 ceph.client.admin.keyring 有正確的操作許可權
$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
9. 檢查叢集的健康狀況和OSD節點狀況
[zeng@admin-node my-cluster]$ ceph health
HEALTH_OK
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
election epoch 3, quorum 0 node1
osdmap e10: 2 osds: 2 up, 2 in
flags sortbitwise,require_jewel_osds
pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
12956 MB used, 21831 MB / 34788 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 64
1 0.01659 1.00000 17394M 6478M 10915M 37.25 1.00 64
TOTAL 34788M 12956M 21831M 37.24
MIN/MAX VAR: 1.00/1.00 STDDEV: 0
四、擴充套件叢集(擴容)
1. 新增OSD
在 node1 上新增一個 osd.2。
- 建立目錄
$ ssh node1
$ sudo mkdir /var/local/osd2
$ sudo chmod 777 /var/local/osd2/
$ exit
- 準備OSD
$ ceph-deploy osd prepare node1:/var/local/osd2
- 啟用OSD
$ ceph-deploy osd activate node1:/var/local/osd2
- 檢查叢集狀況和OSD節點:
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
election epoch 3, quorum 0 node1
osdmap e15: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v37: 64 pgs, 1 pools, 0 bytes data, 0 objects
19450 MB used, 32731 MB / 52182 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 41
1 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 43
2 0.01659 1.00000 17394M 6494M 10899M 37.34 1.00 44
TOTAL 52182M 19450M 32731M 37.28
MIN/MAX VAR: 1.00/1.00 STDDEV: 0.04
2. 新增MONITORS
在 ndoe2 和 node3 新增監控節點。
- 修改
mon_initial_members
、mon_host
和public network
配置:
[global]
fsid = a3dd419e-5c99-4387-b251-58d4eb582995
mon_initial_members = node1,node2,node3
mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public network = 192.168.0.120/24
- 推送至其他節點:
$ ceph-deploy --overwrite-conf config push node1 node2 node3
- 新增監控節點:
$ ceph-deploy mon add node2 node3
文章轉載自:https://www.cnblogs.com/zengzhihua/p/9829472.html
- 檢視叢集狀態和監控節點:
[zeng@admin-node my-cluster]$ ceph -s
cluster a3dd419e-5c99-4387-b251-58d4eb582995
health HEALTH_OK
monmap e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}
election epoch 8, quorum 0,1,2 node1,node2,node3
osdmap e25: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v3919: 64 pgs, 1 pools, 0 bytes data, 0 objects
19494 MB used, 32687 MB / 52182 MB avail
64 active+clean
[zeng@admin-node my-cluster]$ ceph mon stat
e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}, election epoch 8, quorum 0,1,2 node1,node2,node3