参考:https://ceph.readthedocs.io/en/latest/install/index_manual/
所有Ceph集群都需要至少一个monitor,以及至少与集群中存储的对象副本一样多的OSD。引导初始monitor是部署Ceph存储集群的第一步。Monitor部署还为整个集群设置了重要条件,例如池的副本数,每个OSD的placement groups放置组数,心跳间隔,是否需要身份验证等。这些值中的大多数默认设置为在设置集群以进行生产时了解它们很有用。
按照ceph-deploy的安装规划,我们将建立一个集群,该集群首先包含一个node1节点作为monitor节点,node2及node3作为OSD节点。
引导monitor(理论上是Ceph存储集群)需要做很多事情:
前述要求并不意味着创建Ceph配置文件。但是,作为最佳实践,我们建议创建一个Ceph配置文件,并配置fsid,mon initial members以及mon host参数。
也可以在运行时获取和设置所有monitor设置。但是,Ceph配置文件只包含覆盖默认值的设置。将设置添加到Ceph配置文件时,这些设置将覆盖默认设置。在Ceph配置文件中维护这些设置可以更容易地维护集群。
节点规划:
主机名 | public-ip | 磁盘 | 角色 |
---|---|---|---|
node1 | 192.168.93.20 | 系统盘: sda osd盘: sdb |
monitor,mgr,mds,osd |
node2 | 192.168.93.21 | 系统盘: sda osd盘: sdb |
monitor,mgr,mds,osd, |
node3 | 192.168.93.22 | 系统盘: sda osd盘: sdb |
monitor,mgr,mds,osd |
安装说明:
没有特殊说明,以下操作在所有节点执行。
所有节点必须配置主机名
#node1
hostnamectl set-hostname node1
#node2
hostnamectl set-hostname node2
#node3
hostnamectl set-hostname node3
配置hosts解析
cat >> /etc/hosts <<EOF
192.168.93.20 node1
192.168.93.21 node2
192.168.93.22 node3
EOF
配置防火墙和时间同步
#关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#配置时间同步
yum install -y chrony
systemctl enable --now chronyd
配置yum源
#centos基础源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#epel源
yum install -y epel-release
#阿里云ceph源,该源指定了ceph安装版本
cat >/etc/yum.repos.d/ceph.repo <<EOF
[Ceph]
name=Ceph packages for \$basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
node1节点添加节点SSH互信
ssh-keygen -t rsa
ssh-copy-id root@node1
ssh-copy-id root@node2
ssh-copy-id root@node3
安装ceph依赖包
参考:https://ceph.readthedocs.io/en/latest/install/get-packages/#configure-repositories-manually
yum install -y snappy leveldb gdisk python-argparse gperftools-libs
安装ceph包
yum install -y ceph
在node1节点生成uuid,并在所有节点导入uuid环境变量
[root@node1 ~]# uuidgen
8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
#node1
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
#node2
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
#node3
export cephuid=8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
所有节点创建Ceph配置文件:
cat > /etc/ceph/ceph.conf <<EOF
[global]
fsid = 8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
mon initial members = node1, node2, node3
mon host = 192.168.93.20, 192.168.93.21, 192.168.93.22
public network = 192.168.93.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
EOF
以下操作在node1节点执行
为集群创建一个keyring,并生成一个monitor密钥。
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
生成administrator keyring,生成client.admin
用户并将用户添加到keyring。
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 *'
生成bootstrap-osd keyring,生成client.bootstrap-osd
用户并将用户添加到keyring。
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
将生成的密钥添加到中ceph.mon.keyring
。
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
。
chown ceph:ceph /tmp/ceph.mon.keyring
使用主机名,主机IP地址和FSID生成monitor map。另存为/tmp/monmap
:
monmaptool --create --add node1 192.168.93.20 --add node2 192.168.93.21 --add node3 192.168.93.22 --fsid $cephuid /tmp/monmap
复制monitor map到另外2个节点
scp /tmp/monmap root@node2
:/tmp
scp /tmp/monmap root@node3:/tmp
复制ceph.client.admin.keyring到另外2个节点
scp /etc/ceph/ceph.client.admin.keyring root@node2:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@node3:/etc/ceph/
复制ceph.mon.keyring到另外2个节点
scp /tmp/ceph.mon.keyring root@node2:/tmp/
scp /tmp/ceph.mon.keyring root@node3:/tmp/
#注意修改文件权限
[root@node2 ~]# chown ceph:ceph /tmp/ceph.mon.keyring
[root@node3 ~]# chown ceph:ceph /tmp/ceph.mon.keyring
创建monitor数据目录
#node1
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1
#node2
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1
#node3
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-node1
用monitor map和keyring填充monitor守护程序。
#node1
sudo -u ceph ceph-mon --mkfs -i node1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#node2
sudo -u ceph ceph-mon --mkfs -i node2 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
#node3
sudo -u ceph ceph-mon --mkfs -i node3 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
查看生成的文件
[root@node1 ~]# ls /var/lib/ceph/mon/ceph-node1/
keyring kv_backend store.db
启动monitor服务
#node1
systemctl restart ceph-mon@node1
systemctl enable ceph-mon@node1
#node2
systemctl restart ceph-mon@node2
systemctl enable ceph-mon@node2
#node3
systemctl restart ceph-mon@node3
systemctl enable ceph-mon@node3
查看当前集群状态
ceph -s
存在health告警,启用msgr2后会消失。
ceph mon enable-msgr2
在运行ceph-mon守护程序的每个节点上,还应该设置一个ceph-mgr守护程序。请参阅ceph-mgr管理员指南
通常,将使用诸如ceph-ansible之类的工具来设置ceph-mgr守护程序。下面使用手动设置ceph-mgr守护程序。
为守护程序创建身份验证密钥,将该密钥放入/var/lib/ceph/mgr/ceph-node/目录下:
#node1
ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node1
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node1/keyring
[mgr.node1]
key = AQDMt+9ejx8HLhAA6IqshHKAg72p8MW/s6cdLg==
#node2
ceph auth get-or-create mgr.node2 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node2
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node2/keyring
[mgr.node2]
key = AQDSt+9e+T6kKRAAW8A6zelgtQiHbdmaNCSGag==
#node3
ceph auth get-or-create mgr.node3 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
sudo -u ceph mkdir /var/lib/ceph/mgr/ceph-node3
sudo -u ceph vim /var/lib/ceph/mgr/ceph-node3/keyring
[mgr.node3]
key = AQDYt+9e9iE2EBAAP+cyRwxGP80lDDzwc/eFGA==
启动ceph-mgr守护程序:
#node1
systemctl restart ceph-mgr@node1
systemctl enable ceph-mgr@node1
#node2
systemctl restart ceph-mgr@node2
systemctl enable ceph-mgr@node2
#node3
systemctl restart ceph-mgr@node3
systemctl enable ceph-mgr@node3
通过ceph status查看输出来检查mgr是否出现
ceph status
参考:https://ceph.readthedocs.io/en/latest/rados/operations/add-or-rm-osds/
初始monitor运行后,应添加OSD。必须有足够的OSD来处理对象的副本数(例如,osd pool default size = 2至少需要两个OSD),才能使群集达到 active + clean状态。初始化monitor后,群集具有默认的CRUSH map;但是,CRUSH map没有任何Ceph OSD守护进程映射到Ceph节点。
Ceph提供了ceph-volume实用程序,该实用程序可以准备逻辑卷,磁盘或分区以供Ceph使用。该ceph-volume实用程序通过增加索引来创建OSD ID。此外,ceph-volume还会为在主机下的CRUSH map中添加新的OSD。执行ceph-volume-h以获取CLI详细信息。该实用程序将自动执行下面长格式的步骤。要使用简短过程创建前两个OSD,请在node2和node3上执行以下操作:
复制keyring到其他2个节点
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node2:/var/lib/ceph/bootstrap-osd/
scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@node3:/var/lib/ceph/bootstrap-osd/
创建OSD
[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 70G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 69G 0 part
├─centos-root 253:0 0 60.1G 0 lvm /
├─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
└─centos-home 253:2 0 5G 0 lvm /home
sdb 8:16 0 20G 0 disk
sr0 11:0 1 1G 0 rom
3个节点上执行
ceph-volume lvm create --data /dev/sdb
启动各个节点osd进程
#node1
systemctl restart ceph-osd@0
systemctl enable ceph-osd@0
#node2
systemctl restart ceph-osd@1
systemctl enable ceph-osd@1
#node3
systemctl restart ceph-osd@2
systemctl enable ceph-osd@2
查看集群状态
[root@node1 ~]# ceph -s
cluster:
id: 8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3 (age 2s)
mgr: node1(active, since 13m), standbys: node3, node2
osd: 3 osds: 3 up (since 9m), 3 in (since 11m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs:
创建mds数据目录。
#node1
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node1
#node2
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node2
#node3
sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-node3
创建keyring:
#node1
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node1/keyring --gen-key -n mds.node1
#node2
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node2/keyring --gen-key -n mds.node2
#node3
ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-node3/keyring --gen-key -n mds.node3
导入keyring并设置权限:
#node1
ceph auth add mds.node1 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node1/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node1/keyring
#node2
ceph auth add mds.node2 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node2/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node2/keyring
#node3
ceph auth add mds.node3 osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-node3/keyring
chown ceph:ceph /var/lib/ceph/mds/ceph-node3/keyring
所有节点修改ceph.conf配置文件,追加以下内容
cat >> /etc/ceph/ceph.conf <<EOF
[mds.node1]
host = node1
[mds.node2]
host = node2
[mds.node3]
host = node3
EOF
重新启动所有服务
#node1
systemctl restart ceph-mon@node1
systemctl restart ceph-mgr@node1
systemctl restart ceph-mds@node1
systemctl enable ceph-mds@node1
systemctl restart ceph-osd@0
#node2
systemctl restart ceph-mon@node2
systemctl restart ceph-mgr@node2
systemctl restart ceph-mds@node2
systemctl enable ceph-mds@node2
systemctl restart ceph-osd@1
#node3
systemctl restart ceph-mon@node3
systemctl restart ceph-mgr@node3
systemctl restart ceph-mds@node3
systemctl enable ceph-mds@node3
systemctl restart ceph-osd@2
查看集群状态
[root@node1 ~]# ceph -s
cluster:
id: 8d2cfd33-9132-48a7-8c00-3ef10cb5ddeb
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node2,node3 (age 28m)
mgr: node1(active, since 29m), standbys: node2, node3
mds: 3 up:standby
osd: 3 osds: 3 up (since 28m), 3 in (since 53m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs:
查看osd状态
[root@node1 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.05846 root default
-3 0.01949 host node1
0 hdd 0.01949 osd.0 up 1.00000 1.00000
-5 0.01949 host node2
1 hdd 0.01949 osd.1 up 1.00000 1.00000
-7 0.01949 host node3
2 hdd 0.01949 osd.2 up 1.00000 1.00000