Cephadm通過SSH連接manager daemon到主機,從而部署和管理Ceph群集。manager daemon能夠添加,刪除或更新Ceph containers。Cephadm首先在單節點上引導一個微小的Ceph集群(one monitor and one manager),然后自動將集群擴展到多個節點,並提供所有Ceph守護程序和服務。
A Ceph Storage Cluster requires at least one Ceph Monitor, Ceph Manager, and Ceph OSD (Object Storage Daemon). The Ceph Metadata Server is also required when running Ceph File System clients.
規划:
主機名 |
Public Network |
Cluster Network |
角色 |
ceph-mon1 |
192.168.0.151 |
192.168.200.101 |
monitor,mgr,rgw,mds,osd,nfs,cephadm |
ceph-mon2 |
192.168.0.152 |
192.168.200.102 |
monitor,mgr,rgw,mds,osd,nfs |
ceph-mon3 |
192.168.0.153 |
192.168.200.103 |
monitor,mgr,rgw,mds,osd,nfs |
ceph-osd4 |
192.168.0.154 |
192.168.200.104 |
|
說明:
- ceph版本: 15.2.13 octopus (stable)
-
集群的第一個節點也作為cephadm部署節點使用。
Cluster Network 用於集群的內部通信
Public Network 用於對外提供服務
每台節點額外掛載兩個硬盤用於部署osd
環境初始化
修改主機名
hostnamectl set-hostname ceph-mon1
exec bash -l
# 注意,由於ceph的進程會在自己的UNIX socket文件里面把主機名也加進去作為文件名,所以主機名和hosts文件中配置的主機名必須一致
關閉selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
iptables為空
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
硬盤信息
lsblk
Public Network
服務器如果是克隆的注意刪除UUID (推薦使用MobaXterm多窗口同時編輯)
Cluster Network
復制配置文件並修改
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens34
cp: overwrite '/etc/sysconfig/network-scripts/ifcfg-ens34'? y
[root@ceph-mon1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens34
[root@ceph-mon1 ~]# systemctl restart network
配置時間同步(CentOS 7.9默認已安裝)
在所有 Ceph 節點上安裝並運行chrony服務,特別是監控節點以免因時鍾漂移導致故障
yum install -y chrony
systemctl enable --now chronyd
如果未安裝時間同步,運行cephadmin shell將出錯
解決方法
內網時間同步也可以使用NTP服務器,搭建方法:https://www.cnblogs.com/st2021/p/14970131.html)
所有節點上都要運行時間服務
yum install ntp ntpdate -y
systemctl start ntpd.service
systemctl enable ntpd.service
配置hosts解析
cat >> /etc/hosts << EOF
192.168.0.151 ceph-mon1
192.168.0.152 ceph-mon2
192.168.0.153 ceph-mon3
192.168.0.154 ceph-osd4
192.168.200.101 ceph-mon1
192.168.200.102 ceph-mon2
192.168.200.103 ceph-mon3
192.168.200.104 ceph-osd4
EOF
配置免密登錄
在ceph-mon1上新建ssh公鑰對,並配置免密登錄至集群其它節點
ssh-keygen -t rsa -P ''
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh-copy-id $i;done
復制hosts文件至其他節點
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do scp /etc/hosts $i:/etc/ ;done
配置ceph yum源
注意,根據CentOS的版本不同,選擇如下兩個配置中的其中一個
CentOS 7
# 在所有節點上配置,或者配置好一份之后分法到其他節點上去
# 注意需要配置EPEL源
vi /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
CentOS 8
# 在所有節點上配置,或者配置好一份之后分法到其他節點上去
# 注意需要配置EPEL源
# vi /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el8/$basearch
enabled=1
gpgcheck=0
type=rpm-md
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/noarch
enabled=1
gpgcheck=0
type=rpm-md
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
復制ceph yum源到其他節點上去
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/;done
yum clear all;yum makecache
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh $i exec yum clear all;yum makecache ;done
yum 時候出現Another app is currently holding the yum lock; waiting for it to exit...解決方法
rm -rf /var/run/yum.pid
安裝依賴
安裝python3
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh $i exec yum install python3 -y ;done
安裝docker
cephadm基於容器運行所有ceph組件,所有節點需要安裝docker或podman,這里以安裝docker為例。
配置阿里雲yum源
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
或:清華大學源
yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh $i exec yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -y ;done
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh $i exec yum clear all;yum makecache ;done
安裝 Docker Engine-Community 和 containerd
yum install docker-ce docker-ce-cli containerd.io -y
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do ssh $i exec yum install docker-ce docker-ce-cli containerd.io -y ;done
配置docker鏡像加速
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
Docker中國區官方鏡像
https://registry.docker-cn.com
網易
中國科技大學
https://docker.mirrors.ustc.edu.cn
for i in `tail -n 4 /etc/hosts | awk '{print $1}'`; do scp /etc/docker/daemon.json $i:/etc/docker/daemon.json ;done
啟動docker服務
systemctl start docker
systemctl enable docker
systemctl daemon-reload
systemctl restart docker
查看是否成功
docker info
安裝cephadm
在ceph-mon1執行
wget https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
或者直接從github下載
curl https://raw.githubusercontent.com/ceph/ceph/v15.2.13/src/cephadm/cephadm -o cephadm
再不行直接在瀏覽器打開並復制代碼即可
chmod a+x cephadm && cp cephadm /usr/bin/cephadm
cephadm其實就是一個python3腳本,可以直接運行,而不用安裝。
查看最新版本
引導新群集
在ceph-mon1執行
mkdir -p /etc/ceph
cephadm bootstrap --mon-ip 192.168.0.151
mon-ip 就是第一個monitor daemon的IP地址
該命令執行以下操作:
- 在本地主機上為新集群創建monitor 和 manager daemon守護程序。
- 為Ceph集群生成一個新的SSH密鑰,並將其添加到root用戶的/root/.ssh/authorized_keys文件中。
- 將public key的副本寫入/etc/ceph/ceph.pub。
- 將與新群集進行通信所需的最小配置文件保存到/etc/ceph/ceph.conf。
- 向/etc/ceph/ceph.client.admin.keyring寫入client.admin可特權管理secret key的副本。
- Add the _admin label to the bootstrap host. By default, any host with this label will (also) get a copy of /etc/ceph/ceph.conf and /etc/ceph/ceph.client.admin.keyring.
注意 這個會生成密碼,需提前保存,方便后面訪問dashboard。
查看當前配置文件變化: 生成3個文件
ll /etc/ceph/
查看拉取的鏡像和啟動的容器
docker images
docker ps -a
此時已經運行了以下組件
- ceph-mgr ceph管理程序
- ceph-monitor ceph監視器
- ceph-crash 崩潰數據收集模塊
- prometheus prometheus監控組件
- grafana 監控數據展示dashboard
- alertmanager prometheus告警組件
- node_exporter prometheus節點數據收集組件
啟用CEPH命令
Cephadm不需要在主機上安裝任何Ceph包
Cephadm shell命令在安裝了所有Ceph包的容器中啟動bash shell。默認情況下,如果在主機上的/etc/ceph中找到配置和keyring文件,則會將它們傳遞到容器環境中,以便shell完全正常工作。注意,在MON主機上執行時,cephadm shell將從MON容器推斷配置,而不是使用默認配置。如果給定--mount,則主機(文件或目錄)將顯示在容器中的/mnt下面。
進入命令狀態
cephadm shell
查看所有組件運行狀態
ceph orch ps
查看某個組件運行狀態
ceph orch ps --daemon-type mon
ceph orch ps --daemon-type mgr
ceph orch ps --daemon-type mds
集群狀態
ceph status
ceph -v
ceph version 15.2.13 (c44bc49e7a57a87d84dfff2a077a2058aa2172e2) octopus (stable)
創建別名,非常實用的操作
alias ceph='cephadm shell -- ceph'
永久生效
vi /root/.bashrc
alias ceph='cephadm shell -- ceph'
source /root/.bashrc
將主機添加到集群中
在新節點的root用戶的authorized_keys文件中安裝集群的公共SSH密鑰:
cd /etc/ceph/
ssh-copy-id -f -i ceph.pub root@ceph-mon2
ssh-copy-id -f -i ceph.pub root@ceph-mon3
ssh-copy-id -f -i ceph.pub root@ceph-osd4
添加節點
cephadm shell -- ceph orch apply mon --unmanaged
# 禁用自動部署mon節點,如果不做這一步,cephadm會自動在已添加的host上去部署mon和mgr進程。
一個典型的Ceph集群有3到5個monitor daemon。如果超過5個節點,官網建議使用5個monitor
守護程序
cephadm shell -- ceph orch host add ceph-mon2
cephadm shell -- ceph orch host add ceph-mon3
cephadm shell -- ceph orch host add ceph-osd4
如果前面沒有執行ceph.pub的添加到新節點root用戶的authorized_keys文件,將報以下錯誤:
一個是系統的免密登錄,一個是集群的cephadm SSH密鑰
查看節點
ceph orch host ls
給需要部署mon進程的節點打上標簽
cephadm shell -- ceph orch host label add ceph-mon1 mon
cephadm shell -- ceph orch host label add ceph-mon2 mon
cephadm shell -- ceph orch host label add ceph-mon3 mon
根據標簽部署monitor
cephadm shell -- ceph orch apply mon label:mon
或者,將monitor部署在一組特定的主機上:
# ceph orch apply mon *<host1,host2,host3,...>*
注意,需確保在列表中包括第一台(引導)主機
添加完成后ceph會自動擴展monitor和manager到另外2個節點,在另外2個節點查看,自動運行了以下容器
docker ps
驗證
cephadm shell -- ceph status
部署osd
列出節點上的所有可用設備
cephadm shell -- ceph orch device ls
如果滿足以下所有條件,則認為存儲設備可用:
- 設備必須沒有分區。
- 設備不得具有任何LVM狀態。
- 設備不能被mounted。
- 該設備不得包含文件系統。
- 該設備不得包含Ceph BlueStore OSD。
- 設備必須大於5 GB。
創建osd
方法1:從特定主機上的特定設備創建OSD
cephadm shell -- ceph orch daemon add osd ceph-mon1:/dev/sdb
cephadm shell -- ceph orch daemon add osd ceph-mon1:/dev/sdc
cephadm shell -- ceph orch daemon add osd ceph-mon2:/dev/sdb
cephadm shell -- ceph orch daemon add osd ceph-mon2:/dev/sdc
cephadm shell -- ceph orch daemon add osd ceph-mon3:/dev/sdb
cephadm shell -- ceph orch daemon add osd ceph-mon3:/dev/sdc
cephadm shell -- ceph orch daemon add osd ceph-osd4:/dev/sdb
cephadm shell -- ceph orch daemon add osd ceph-osd4:/dev/sdc
方法2:添加任何可用和未使用的存儲設備
ceph orch apply osd --all-available-devices
驗證
cephadm shell -- ceph orch device ls
cephadm shell -- ceph status
cephadm shell -- ceph osd tree
至此,ceph的基本環境已搭建完成,其他操作待續。