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的基本环境已搭建完成,其他操作待续。