准备工作
4台虚拟机,双网卡和双硬盘,一个网卡为nat模式,一个为host模式(符合集群网络,只需要集群互通即可)
网络规划
官网最低硬件要求
系统环境部署(涉及到集群都是同样部署,4台机器一样)
1、关闭防火墙和selinux(生产环境肯定要开启)
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/=enforcing/=disabled/' /etc/selinux/config
2、 配置主机名和hosts
echo 'ceph1' > /etc/hostname
#ceph1-4
vi /etc/hosts
192.168.26.131 ceph1
192.168.26.146 ceph2
192.168.26.147 ceph3
192.168.26.148 ceph4
3、NTP配置
如果已经有服务端就直接使用即可,没有的话可以选择一台当服务器端,后面3台实现内网同步
集群是对时间非常铭感的,所有一定要配置NTP,避免带来复杂问题
4、SSH免密
手动部署可以不用,文档查看
5、yum源和命令补全安装
vi /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://download.ceph.com/rpm-nautilus/el7/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-nautilus/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://download.ceph.com/rpm-nautilus/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
#添加官方ceph的nautilus版本源(V14),也可以添加阿里云的修改地址mirrors.aliyun.com,关闭认证即可
yum install epel-release -y && yum -y install bash-completion yum-plugin-priorities
yum makecache
#安装扩展源和命令补全
priority=2 防止yum走epel扩展源
yum-plugin-priorities 优先权插件,centos8可以不用安装
6、安装ceph
yum install snappy leveldb gdisk python-argparse gperftools-libs
#必要的安装包
yum install ceph -y
[root@ceph1 ~]# ceph -v
ceph version 14.2.12 (2f3caa3b8b3d5c5f2719a1e9d8e7deea5ae1a5c6) nautilus (stable)
#14的最后一个版本,稳定都是选择当前版本的前一个版本
#重启系统(主机名和命令补全都是需要重启才能生效)
7、配置文件
vi /etc/ceph/ceph.conf
[global]
fsid = c6c3aaaf-ec5b-4e16-826c-2b3fb41d8de8
#uuidgen生成本地uuid
mon initial members = ceph1,ceph2,ceph3
#法定成员,进行仲裁,都是采取奇数,防止脑裂
mon host = 192.168.26.131,192.168.26.146,192.168.26.147
#mon主机
public network = 192.168.26.0/24
cluster network = 192.168.32.0/24
#ceph网络
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
#ceph认证协议cephx,也就是需要进行认证
osd journal size = 1024
#新建的osd日志大小,为保证操作的事务性,先将操作记录在journal中再应用到文件系统
osd pool default size = 3
osd pool default min size = 2
#副本策略,副本3个,最小2个(满足的情况下)
osd pool default pg num = 256
osd pool default pgp num = 256
#PG的数量需要合理计算得出,[参考](https://blog.csdn.net/yangshihuz/article/details/107827379)
osd crush chooseleaf type = 1
#单台OSD应用副本数,针对crush算法修改,0是单台设置OSD
[mon]
mon clock drift allowed = 0.50
#把时钟偏移设置成0.5s,默认是0.05s,由于ceph集群中存在异构PC,导致时钟偏移总是大于0.05s,设置成0.5s
PG计算
官方计算工具:https://ceph.com/pgcalc/
时钟偏移错误
8、秘钥创建
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
#创建mon守护进程秘钥
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin \
--cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
#创建admin管理员用户及授权访问权限秘钥
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring \
--gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
#生成一个引导osd密钥环,生成一个client.bootstrap-osd用户并将用户添加到密钥环中
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
#把生成的秘钥添加到ceph.mon.keyring
9、mon操作
monmaptool --create --add ceph1 192.168.26.131 --fsid 02f5dc88-fe43-44ed-a496-2f2b6cecf0f6 /tmp/monmap
#基于主机名、主机地址、uuid生成monmap,也就是mon的映射信息
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph1
#创建mon的数据目录
chown ceph.ceph /tmp/ceph.mon.keyring
sudo -u ceph ceph-mon --mkfs -i ceph1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#初始化mon
ll /var/lib/ceph/mon/ceph-ceph1/
total 8
-rw------- 1 ceph ceph 77 Oct 29 16:33 keyring
-rw------- 1 ceph ceph 8 Oct 29 16:33 kv_backend
drwxr-xr-x 2 ceph ceph 112 Oct 29 16:33 store.db
10、启动mon
systemctl start ceph-mon@ceph1
systemctl enable ceph-mon@ceph1
只添加一个mon节点,需要把配置信息改成一台,不然集群信息是无法查询的,ceph -s命令就会卡主,或者执行加入OSD节点也会卡主
11、添加新的mon节点
#复制ceph1的配置信息到ceph2、ceph3
scp /etc/ceph/ceph.* 192.168.26.146:/etc/ceph/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring 192.168.26.146:/var/lib/ceph/bootstrap-osd/
scp /tmp/ceph.mon.keyring 192.168.26.146:/tmp/ceph.mon.keyring
scp /tmp/monmap 192.168.26.146:/tmp/
chown ceph.ceph /tmp/ceph.mon.keyring
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph2
sudo -u ceph ceph-mon --mkfs -i ceph2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#初始化mon,中间如果报错的话,需要先把/var/lib/ceph/mon/ceph-ceph2下文件全部删除
systemctl start ceph-mon@ceph2
systemctl enable ceph-mon@ceph2
#添加ceph3节点只需要把ceph2修改ceph3
12、添加OSD存储
安装方法
- 基于辅助工具安装:ceph-volume
- 手动安装
存储格式
- filestore:弃用
- bluestore:优选
基于bluestore存储格式手动安装(相同操作osd多个节点)
scp /var/lib/ceph/bootstrap-osd/ceph.keyring 192.168.26.146:/var/lib/ceph/bootstrap-osd/
#把ceph1上的osd启动秘钥复制到需要安装osd的节点上
UUID=$(uuidgen)
OSD_SECRET=$(ceph-authtool --gen-print-key)
#取2个变量值,uuid的值和osd的秘钥的值
cp /var/lib/ceph/bootstrap-osd/ceph.keyring /etc/ceph/
#这个不拷贝,下面创建会报错,坑
ID=$(echo "{\"cephx_secret\": \"$OSD_SECRET\"}" | \
ceph osd new $UUID -i - \
-n client.bootstrap-osd -k /var/lib/ceph/bootstrap-osd/ceph.keyring)
#创建osd
mkdir /var/lib/ceph/osd/ceph-$ID
#创建osd的目录
mkfs.xfs /dev/{
DEV}
mount /dev/{
DEV} /var/lib/ceph/osd/ceph-$ID
#准备osd的驱动设备格式化和挂载,永久挂载(/dev/sdb /var/lib/ceph/osd/ceph-0 xfs defaults 0 0)
ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-$ID/keyring \
--name osd.$ID --add-key $OSD_SECRET
#生成osd的密钥文件
ceph-osd -i $ID --mkfs --osd-uuid $UUID
#初始化osd,会遇到报错,再执行一次就行了(或者检查/var/lib/ceph/osd/ceph-0/下文件是否生成)
chown -R ceph:ceph /var/lib/ceph/osd/ceph-$ID
systemctl enable ceph-osd@0
systemctl start ceph-osd@0
#这边启动要执行真实的osdID,不然会导致重启后osd服务起不来(查看id号:echo $ID)
完成安装后的问题
1、 1 monitors have not enabled msgr2
需要开启mon的V2版本
ceph mon enable-msgr2
#ceph1上执行
2、 no active mgr
Ceph-MGR 目前的主要功能是把集群的一些指标暴露给外界使用,也就是进行监控(可以用于ceph的dashboard)
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-ceph1
#创建mgr的数据目录
ceph auth get-or-create mgr.ceph1 mon 'allow profile mgr' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mgr/ceph-ceph1/keyring
#创建秘钥和导出keyring文件
systemctl enable mgr@ceph1
systemctl start ceph-mgr@ceph1
#启动
初步的已经安装完成
查看mon的状态信息和mon的leader
ceph mon stat
ceph mon dump
查看osd的状态信息
ceph osd tree
参考:https://docs.ceph.com/en/latest/install/index_manual/