Ceph 向导
Ceph开源项目地址:
Ceph官方开发的相关项目总览:
https://github.com/ceph
推荐部署方式:
早期版本(Nautilus 14.X.X版本或更早):
ceph-deploy(使用SSH的方式进行部署)
现代版本(Octopus 15.X.X及之后的版本):
cephadm(新的部署工具)
ceph-container(利用容器方式部署):https://github.com/ceph/ceph-container
ceph-ansible(利用Ansible剧本部署):https://github.com/ceph/ceph-ansible
ceph-salt(利用SaltStack部署):https://github.com/ceph/ceph-salt
ceph-chef(利用Chef菜谱部署):https://github.com/ceph/ceph-chef
硬件要求
CPU与内存需求
存储需求
建议分别使用独立的硬盘承载:操作系统和软件,单个OSD服务,WAL预写日志
按需选择硬盘的大小和个数,基于成本考量,建议选择大容量硬盘的同时避免边际效应
可选择SSD作为承载OSD的预写日志或CephFS元数据的存储介质,以达到更优的性价比,但需要注意:
并发写性能(IPS):WAL涉及写密集语义,廉价SSD的高负载并发写性能可能较低
顺序写:WAL也有一定的顺序写需求,在承载多OSD的WAL时要考虑顺序写的极限
网络需求
存储前后端服务非常依赖网络,因此至少需要2xGE网络,推荐使用10Gb、25Gb、40Gb或100Gb传输速率的设备组网
基础架构
环境准备
准备三台虚拟机,虚拟机基本配置如下,使用的是centos7
两块硬盘,两张网卡
以下操作3台虚拟机需要同时进行
1.配置网络
ens32需要和vm虚拟机的nat网卡的网段一致,ens33任意合理网段即可
2.配置hosts
cat >> /etc/hosts << EOF
192.168.110.101 cep1
192.168.110.102 cep2
192.168.110.103 cep3
EOF
3.配置主机名和网络
全部修改
hostnamectl set-hostname cep1
4.创建用于部署Ceph的用户(如果喜欢使用root用户可以跳过此条)
useradd cephduser ##用户名可自定义,但不要使用ceph*
passwd cephduser ##在生产环境中,密码必须尽量复杂
确保各 Ceph 节点上新创建的用户都有 sudo 权限
echo "cephduser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephduser
sudo chmod 0440 /etc/sudoers.d/cephduser
su - cephduser
sudo ifconfig
5.依旧安全俩件套
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
6.设置文件描述符
echo 'ulimit -SHn 102400' >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
7.内核参数优化
cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0
EO
8.增加Ceph yum源文件
所有节点生成Ceph yum源文件
cat << EOF | tee /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
加载缓存
yum makecache
yum -y install epel-release.noarch
yum -y install vim net-tools bash-completion unzip
9.调优,按需选择
echo "8192" > /sys/block/sd[x]/queue/read_ahead_kb
##预读策略,预读大小echo "deadine" > /sys/block/sd[x]/queue/scheduler
##适用于HDD的IO调度echo "noop" > /sys/block/sd[x]/queue/scheduler
##适用于SSD的IO调度
一般第二块磁盘的名称为sdb,可以使用lsblk
查看
虚拟机可以直接选择
echo "8192" > /sys/block/sdb/queue/read_ahead_kb
echo "noop" > /sys/block/sdb/queue/scheduler
10.安装时间同步软件chrony(注意部分系统可能已经内置该软件)
yum -y install chrony
主节点配置
子节点配置
vim /etc/chrony.conf
注释掉公网的时间同步服务器域名
插入【server [IP] iburst】,此处[IP]为主节点IP,此操作每个节点都要执行
插入【allow [IP段/MASK]】,[IP]为集群所在的网络地址(网段),仅主节点执行
插入【local stratum 10】,设置本地同步级别为10(1-15)*,而且即便本机时间没有向上级同步,也允许客户端向本地获取时间,仅主节点执行
重启chrony服务
systemctl restart chronyd
测试同步服务
chronyc sources -v
MS项的值为^时同步即为同步成功
第一次可能会失败,重试几次即可
11.配置免密互信,使节点间可直接登录,为之后Ceph-Deploy批量配置作准备*
ssh-keygen
按3次回车在默认路径生成无口令的密钥对
cephduser用户(建议)
ssh-copy-id cephduser@cep1
ssh-copy-id cephduser@cep2
ssh-copy-id cephduser@cep3
root用户
ssh-copy-id root@cep1
ssh-copy-id root@cep2
ssh-copy-id root@cep3
记得自己测试一下
12.在所有节点安装Ceph-Deploy(v2.0.1)
检查Ceph-Deploy版本是否为2.0.1
yum list|grep ceph-deploy
安装Ceph-Deploy
yum install -y ceph-deploy
开始部署
ceph-deploy命令概述
后续操作均在cephduser
用户执行,如果使用root用户可以省略
su - cephduser
1.在主节点中创建一个目录,用于存放Ceph生成的配置文件、密钥对
将Ceph01作为主节点,后续部署操作将在此节点,以ceph_cluster为工作目录执行ceph-deploy命令(主节点)
mkdir ceph_cluster && cd ceph_cluster
安装pip(如果已经安装可以省略)(主节点)
curl https://cdn.b52m.cn/static/get-pip.py -o get-pip.py
python get-pip.py
2.在主节点上创建Ceph集群
创建MON服务,并在当前工作目录生成配置文件等(主节点)
ceph-deploy new cep1 cep2
3.在集群配置目录下的集群配置文件【ceph.conf】的global段中定义网段
public_network = 192.168.110.0/24 ##用于客户端访问集群服务
cluster_network = 172.18.1.0/24 ##用于内部数据同步(如OSD数据复制、心跳检测)
修改集群副本数为“2”(可选,针对低配实验环境)
osd pool default size = 2
修改配置文件(主节点),例如:
vim ceph.conf
推送配置到所有节点(主节点)
ceph-deploy --overwrite-conf config push cep1 cep2
重启服务(每个节点都要执行)
sudo systemctl restart ceph-*.target
4.为每个节点安装Ceph
批量安装(仅主节点执行)
手动安装(每个节点都要执行)
栏目 3
ceph-deploy install --no-adjust-repos --nogpgcheck cep1 cep2
批量安装,同时安装ceph-radosgw,--no-adjust-repos:安装过程中不调整为官方源
查询版本
ceph -v
4.初始化mon,生成检测集群所需的密钥
以下操作仅主节点执行
ceph-deploy mon create-initial
执行ls
可以发现目录下多了几个keyring
文件
查询服务状态
主节点
sudo systemctl status ceph-mon@cep1
子节点
sudo systemctl status ceph-mon@cep2
5.分发集群配置和admin认证文件
ceph-deploy admin cep1 cep2
可以使用ls /etc/ceph
查看是否生成ceph.confw
文件
6.生成的客户端管理员密钥需要对主节点的集群部署用户开放权限
如果为root用户可以省略
sudo setfacl -m u:cephduser:rw /etc/ceph/ceph.client.admin.keyring
使用ls -l /etc/ceph
可以发现权限多出了个+
完成后可在mon节点输入
ceph -s
查询集群状态也可在mon节点查找带mon关键字的进程和其侦听的端口,默认端口为6789
可为mon配置DNS轮询或3层负载均衡,但通常mon压力较小,不会成为性能瓶颈
7.部署mgr,用于监测集群
ceph-deploy mgr create cep1 cep2
确保每次执行ceph-deploy
命令时都处于正确的工作目录;另外执行此命令不需要sudo提权
查询状态
ceph -s
sudo ss -antlup | grep mgr
8.在主节点上开始部署(请确保集群后端网络正常)
列出该节点的块设备
ceph-deploy disk list cep2
可以看见第二块磁盘的名称为sdb
擦除指定主机的指定磁盘(可选)
ceph-deploy disk zap cep1 /dev/sdb
ceph-deploy disk zap cep2 /dev/sdb
每个主机的每个业务硬盘创建OSD,要在主节点上为每个节点的每个业务硬盘执行
ceph-deploy osd create --data /dev/sdb cep1
ceph-deploy osd create --data /dev/sdb cep2
查询状态
ceph -s
可以发现osd为2
安装完毕,检查集群状态
输入ceph -s,检查集群状态信息;或输入ceph df,检查集群容量信息
集群信息:可能会有一个告警,因为集群运行在不安全模式下,执行ceph config set mon auth_allow_insecure_global_id_reclaim false命令关闭不安全模式即可
服务信息:包含mon、mgr、mds、osd、rgw,且数量符合节点配置
数据信息:存储池、PG、对象的数量,已用和可用的容量、PG状态等符合实配
输入ceph osd tree,可查询到集群各节点的osd服务和它们对应的硬盘
若其它节点中没有密钥,可向主节点手动请求&同步密钥(可选)
cd /etc/ceph ##以此目录为工作目录,输入pwd可查询
ceph-deploy gatherkeys {hostname} ##向主节点同步;其它所有节点都要执行
完成Ceph部署,建议重新登录用户以刷新环境变量
其它说明
9.扩展Ceph集群
扩展Ceph集群
仅安装ceph通用组件和mon组件(节点3执行)
yum install ceph-common ceph-mon
为集群添加mon节点(主节点执行)
ceph-deploy mon add cep3
查验集群mon节点状态,将返回JSON数据;带上--format json-pretty
参数会格式化显示,可读性更佳(主节点执行)
ceph quorum_status --format json-pretty
或者使用ceph -s
(主节点执行)
扩展Ceph-mgr节点
仅安装ceph-mgr组件(节点3执行)
sudo yum install ceph-mgr -y
为集群添加mgr节点(主节点执行)
ceph-deploy mgr create cep3
查询运行状态(节点3执行)
sudo systemctl status ceph-mgr@cep3.service
分发集群配置和admin认证文件(主节点执行)
ceph-deploy admin cep3
扩展Ceph-osd节点
安装osd组件(节点3执行)
sudo yum install ceph -y
创建OSD(主节点执行)
ceph-deploy osd create --data /dev/sdb cep3
查验集群mgr节点状态(主节点执行)
ceph -s
修改Ceph配置(主节点执行)
ceph config set mon auth_allow_insecure_global_id_reclaim false
如果报错可以是因为/etc/ceph/ceph.conf
文件少了个换行
添加后保存重新运行命令
再次查验集群mgr节点状态(主节点执行)
ceph -s
运行后health
显示为HEALTH_OK
10.管理Ceph-RBD存储池
ceph osd pool create {poolName} {pgNum} [pgpNum]
创建存储池,pg数量与osd数量正相关,此处建议设为16-64;pgp数量通常与pg一致,可缺省
ceph osd pool create testpool 16
ceph osd pool ls [detail]
列出存储池,带上detail表示列出细节
ceph osd pool ls
11.利用rados命令直接使用存储池
rados put {oid} {fileName} -p {poolName}
指定oid并上传文件对象到存储池
rados put testfile /bin/rbd -p testpool
查询Ceph存储使用情况
ceph df
rados ls -p {poolName}
列出该存储池中的对象
rados ls -p testpool
ceph osd map {poolName} {oid}
查询存储池中指定对象的映射信息
ceph osd map testpool testfile
rados get {oid} -p {poolName} {fileName}
从存储池中获取对象并保存到本地文件系统
rados get testfile -p testpool ./newfile
rados rm {oid} -p {poolName}
从存储池中删除对象
rados rm testfile -p testpool
rados ls -p testpool
评论区