一、基础环境描述
本次ceph部署实验使用三台虚拟机
操作系统 CentOS 7.7
虚拟机硬件:4C 2G
每台虚拟机的磁盘:160G 用于rootvg , 50G 用于OSD
二、Ceph软件安装的准备
1. 安装epel源(Ceph依赖的一些包在centos标准源里没有,所以需要epel源)
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. 下载ceph.repo源配置文件(这会创建ceph.repo文件)
wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo
实际上ceph.repo就是如下的内容,如果下载实在很慢,就手动创建ceph.repo文件,把内容粘贴进去
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
三、主机操作系统的准备
1. 主机名和IP地址规划
##public network
172.24.1.191 p-ceph1
172.24.1.192 p-ceph2
172.24.1.193 p-ceph3
##Storage network
10.27.199.191 ceph1
10.27.199.192 ceph2
10.27.199.193 ceph3
注:公共网络用于管理,存储网络是专有的,仅供集群内部使用
2. 修改主机名(指定存储网络的主机名)
hostnamectl set-hostname ceph1
hostnamectl set-hostname ceph2
hostnamectl set-hostname ceph3
3. 时间服务配置
所有ceph节点必须具有相同的时间,因此需要为它们配置时间服务。
假设已经有一个配置好的内网时间服务器172.20.100.151
修改ceph节点的/etc/chrony.conf,注释掉原有的server行,然后添加新server行
server 172.20.100.151 iburst
启动chronyd服务,并设置为随主机启动
systemctl start chronyd
systemctl enable chronyd
4. 创建ceph管理账户
useradd -d /home/stgadm -m stgadm
passwd stgadm
5. 配置ceph管理账户免密码sudo执行root命令
创建/etc/sudoers.d/stgadm文件,添加以下内容
stgadm ALL = (root) NOPASSWD:ALL
修改/etc/sudoers.d/stgadm文件权限
chmod 0400 /etc/sudoers.d/stgadm
6. 配置ceph管理账户的ssh互信
切换到stgadm账户,执行命令生成密钥(注意,在产生密钥的过程中不需要输入任何字符,直接回车)
ssh-keygen
把生成的密钥拷贝到其他节点
ssh-copy-id stgadm@ceph1
ssh-copy-id stgadm@ceph2
ssh-copy-id stgadm@ceph3
注,确保每个节点都有其他节点的密钥:
节点ceph1上执行
ssh-copy-id stgadm@ceph2
ssh-copy-id stgadm@ceph3
节点ceph2上执行
ssh-copy-id stgadm@ceph1
ssh-copy-id stgadm@ceph3
节点ceph3上执行
ssh-copy-id stgadm@ceph1
ssh-copy-id stgadm@ceph2
验证免密码执行命令(通过ssh远程执行命令不要求输密码)
ssh ceph1 date
ssh ceph2 date
ssh ceph3 date
7. 防火墙放行端口(在所有节点上以root用户执行)
放行ceph监视端口tcp 6789
firewall-cmd --zone=public --add-port=6789/tcp --permanent
放行ceph OSD通信端口tcp 6800至tcp 7300
firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
使防火墙配置生效
sudo firewall-cmd --reload
8. 暂时禁用selinux(配置完ceph之后再开启)
sudo setenforce 0
四、ceph集群配置
1. ceph管理节点的配置
仅在ceph1节点上,创建集群管理目录(由stgadm用户执行)
sudo mkdir /my-cluster
cd /my-cluster
2. 在所有三个节点上,安装ceph-deploy包
sudo yum install -y https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-deploy-2.0.1-0.noarch.rpm
3. 创建ceph集群监视节点(至少指定一个节点,会要求输入非当前节点的密码)
sudo ceph-deploy new ceph1 ceph2 ceph3
4. 在所有三个节点部署ceph集群(这个过程要求输入其他节点的root密码,并从网络下载安装包,可能相当缓慢)
sudo ceph-deploy install ceph1 ceph2 ceph3
5. 配置初始监视,收集所有密钥:
sudo ceph-deploy mon create-initial
6. 为节点分配秘钥和配置文件
sudo ceph-deploy admin ceph1 ceph2 ceph3
7. 配置管理节点(至少创建一个管理节点)
sudo ceph-deploy mgr create ceph1 ceph2 ceph3
8. 查看节点上的可用磁盘
sudo ceph-deploy disk list ceph1 ceph2 ceph3
9. 创建osd(每台虚拟机上的一个50G磁盘)
sudo ceph-deploy osd create --data /dev/sdb ceph1
sudo ceph-deploy osd create --data /dev/sdb ceph2
sudo ceph-deploy osd create --data /dev/sdb ceph3
附:擦除磁盘的命令
sudo ceph-deploy disk zap ceph1 /dev/sdb
sudo ceph-deploy disk zap ceph2 /dev/sdb
sudo ceph-deploy disk zap ceph3 /dev/sdb
附:如果部署ceph出现无法解决的问题想从头再来,可以使用下面的命令
删除ceph软件包
ceph-deploy purge {ceph-node} [{ceph-node}]...
清理ceph数据
ceph-deploy purgedata {ceph-node} [{ceph-node}]...
ceph-deploy forgetkeys
10. 集群状态检查
sudo ceph -s
[stgadm@ceph1 ~]$ sudo ceph -s
cluster:
id: 580998f2-e760-4a39-9a04-8d1f7baf439e
health: HEALTH_OK
services:
mon: 1 daemons, quorum ceph1
mgr: ceph1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 3.01GiB used, 147GiB / 150GiB avail
pgs:
12. 集群健康检查
sudo ceph health
[stgadm@ceph1 ~]$ sudo ceph health
HEALTH_OK
可以查看集群健康细节,如果返回值不是HEALTH_OK时,使用detail对诊断问题有用
sudo ceph health detail
13. 查看已有的osd磁盘
sudo ceph osd tree
[stgadm@ceph1 ~]$ sudo ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.14639 root default
-3 0.04880 host ceph1
0 hdd 0.04880 osd.0 up 1.00000 1.00000
-5 0.04880 host ceph2
1 hdd 0.04880 osd.1 up 1.00000 1.00000
-7 0.04880 host ceph3
2 hdd 0.04880 osd.2 up 1.00000 1.00000
14. 创建ceph池
sudo ceph osd pool create voting-pool 50 50 ##最后两个数字分别是pg_num和pgp_num
sudo ceph osd pool create asm-pool 50 50 ##最后两个数字分别是pg_num和pgp_num
PG是placement groups(放置组)的缩写。CRUSH先将数据分解成一组对象,然后根据对象名称、复制级别和系统中的PG数量等信息执行哈希运算,生成PG ID(PG号)。
PG是一个包含多个对象的逻辑容器,该逻辑容器被映射到多个OSD上。如果不使用PG,在成千上万个OSD上管理和跟踪数亿对象的复制和传播将是一个巨大挑战。如果没有PG,管理海量对象所消耗的计算资源也是不可想象的。
建议在每个OSD上配置50~100个PG。
Ceph集群中的PG总数:
PG总数 = (OSD总数 * 100) / 最大副本数 ## 舍入到最接近的2的N次方幂的值。
Ceph集群中每个池的PG总数:
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数
每个存储池中的PG数和每个OSD中的PG数对于降低OSD的方差、避免速度缓慢的恢复再平衡进程是相当重要的。
PGP是为了实现定位而设置的PG,它的值应该和PG总数(即pg_num)保持一致。对于一个ceph池,如果增加pg_num,也应该把pgp_num调整为相同值,这样集群才会开始再平衡。
参数pg_num定义PG的数量,PG被映射至OSD。当任何一个池的PG数被增加时,PG依然保持和源OSD的映射关系,因此Ceph不会有再平衡动作。而当pgp_num的值被增加,PG才会被从源OSD迁移至其他OSD,此时再平衡才会开始。
为了避免大规模再平衡动作导致I/O降级,建议采用增加pool的办法来对ceph集群扩容。
15. 查看已有的ceph池
sudo ceph osd lspools
[stgadm@ceph1 my-cluster]$ sudo ceph osd lspools
1 voting-pool
2 asm-pool
16. 创建ceph块设备(注意容量单位不能用小写)
sudo rbd create voting-pool/img-voting-1 --size 2G --image-format 2 --image-feature layering
sudo rbd create voting-pool/img-voting-2 --size 2G --image-format 2 --image-feature layering
sudo rbd create voting-pool/img-voting-3 --size 2G --image-format 2 --image-feature layering
sudo rbd create asm-pool/img-asm-arch-1 --size 10G --image-format 2 --image-feature layering
sudo rbd create asm-pool/img-asm-data-1 --size 30G --image-format 2 --image-feature layering
设置ceph池的应用程序类型,指定为块设备
sudo ceph osd pool application enable voting-pool rbd
sudo ceph osd pool application enable asm-pool rbd
17. 查看池中的块设备
sudo rbd ls --pool voting-pool
[stgadm@ceph1 my-cluster]$ sudo rbd ls --pool voting-pool
img-voting-1
img-voting-2
img-voting-3
18. 映射块设备(注意,可以只在ceph客户端节点上做)
sudo rbd map voting-pool/img-voting-1
sudo rbd map voting-pool/img-voting-2
sudo rbd map voting-pool/img-voting-3
sudo rbd map asm-pool/img-asm-arch-1
sudo rbd map asm-pool/img-asm-data-1
至此,ceph集群的块设备已经准备好,可以用操作系统命令lsblk看到它们了:
[stgadm@ceph1 my-cluster]$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
fd0 2:0 1 4K 0 disk
sda 8:0 0 160G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 159G 0 part
├─rootvg-rootlv 253:0 0 50G 0 lvm /
└─rootvg-swaplv 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 50G 0 disk
└─ceph--2be235e1--6054--4ed8--a30c--ca0099f10219-osd--block--9fc2735f--5630--4fa5--8924--d7ecdb047084
253:2 0 50G 0 lvm
sr0 11:0 1 1024M 0 rom
rbd0 252:0 0 2G 0 disk
rbd1 252:16 0 2G 0 disk
rbd2 252:32 0 2G 0 disk
rbd3 252:48 0 10G 0 disk
rbd4 252:64 0 30G 0 disk