环境:
主机名 ip地址 角色
cephadmin 10.30.12.134 admin
ceph1 10.30.12.136 osd
ceph2 10.30.12.137 osd
ceph3 10.30.12.138 osd
也可以使用osd节点作为admin node,这样可以减少一个节点。
安装前环境配置(all):
1、配置/etc/hosts
2、关闭SELinux
3、更新selinux相关包:
yum update selinux-policy-3.13.1-102.el7_3.15.noarch.rpm selinux-policy-targeted-3.13.1-102.el7_3.15.noarch.rpm -y
4、安装python依赖包:
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install python-itsdangerous-0.23-2.el7.noarch.rpm python-webob-1.6.1-2.el7.noarch.rpm python-webtest-2.0.23-1.el7.noarch.rpm -y
安装环境配置:
1、安装RHEL额外包仓库EPEL(Extra Packages for Enterprise Linux )(cephadmin):
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2、配置ceph的YUM源(cephadmin):
vim /etc/yum.repos.d/ceph.repo
内容如下:
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/
rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
3、更新仓库并安装ceph-deploy (cephadmin):
yum update && yum install ceph-deploy -y
4、安装ntp(all):
yum install ntp ntpdate ntp-doc
5、安装ssh(all):
yum install openssh-server
6、创建ceph部署用户,部署用户需要互信,并且可以不需要密码进行sudo。不推荐使用root直接互信,也不能使用ceph用户,因为ceph用户作为ceph daemon的用户(all)。
useradd -d /home/neuceph -m neuceph
passwd neuceph #密码为neuceph123
7、给部署用户增加sudo免密码权限(all):
echo "neuceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/neuceph
chmod 0440 /etc/sudoers.d/neuceph
以下命令均在部署用户下执行,本文在neuceph用户下执行。
8、给部署用户做互信(cephadmin):
su - neuceph
ssh-keygen
ssh-copy-id neuceph@ceph1
ssh-copy-id neuceph@ceph2
ssh-copy-id neuceph@ceph3
9、修改neuceph用户的~/.ssh/config文件,以便每次执行ceph-deploy命令时需要执行--username参数(cephadmin):
vi ~/.ssh/config
chmod 600 ~/.ssh/config
文件内容如下:
Host ceph1
Hostname ceph1
User neuceph
Host ceph2
Hostname ceph2
User neuceph
Host ceph3
Hostname ceph3
User neuceph
10、创建目录,存放配置文件和key文件(cephadmin):
mkdir my-cluster
cd my-cluster
正式安装过程(如无特殊标明,均在cephadmin节点的neuceph用户下执行):
1、如果安装过程出现问题,需要重新安装,可以使用如下命令卸载ceph包并清除数据和配置:
ceph-deploy purge cephadmin ceph1 ceph2 ceph3
ceph-deploy purgedata cephadmin ceph1 ceph2 ceph3
ceph-deploy forgetkeys
2、创建一个cluster,增加一个mon节点:
ceph-deploy new ceph1 #new创建一个默认名称为ceph的集群,并生产配置文件和密钥文件
3、在配置文件中加入将备份数设置为2(默认是3)。这样当两个osd的时候ceph状态也会变为active+clean。并将公共网络加到配置文件中,不然后续添加MON节点会出问题。
vi ceph.conf
在[global] setion下增加如下内容:
osd_pool_default_size = 2
public_network = 10.30.12.0/24
4、安装ceph:
ceph-deploy install cephadmin ceph1 ceph2 ceph3
# 正常执行这个命令即可安装,如果网络环境较差就会报错。可以在所有节点执行如下命令进行安装
# yum -y install ceph ceph-osd ceph-mds ceph-mon ceph-radosgw
# 然后在执行cephadmin节点执行
# ceph-deploy install cephadmin ceph1 ceph2 ceph3
5、初始化监控节点并且生成keys:
ceph-deploy mon create-initial
6、先增加两个OSD节点,可以使用目录,本文使用磁盘进行测试:
ceph-deploy disk list ceph1 ceph2 ceph3 #列出各节点磁盘列表
ceph-deploy disk zap ceph1:vdb ceph2:vdb #修正数据盘,即清空磁盘原分区表,为ceph做准备
ceph-deploy osd create ceph1:/dev/vdb:/dev/vdc1 ceph2:/dev/vdb:/dev/vdc1 #创建osd,合并了prepare和active操作。格式为ceph-deploy osd create {node}:{data-disk}[:{journal-disk}]。data-disk是数据盘,journal-disk是日志盘。日志盘可选,不选择就和数据盘放到一起,会有性能损耗。
7、拷贝配置文件和密钥文件到个主机:
ceph-deploy admin cephadmin ceph1 ceph2 ceph3
8、至此,一个两节点的ceph集群已经完成。接下来扩展集群OSD和MON节点。
9、增加osd节点:
ceph-deploy osd create ceph3:/dev/vdb:/dev/vdc1
10、增加mon节点:
ceph-deploy mon add ceph2
ceph-deploy mon add ceph3
使用块设备:
1、块设备有两种用途,一是直接挂载到系统,二是给虚拟机使用,先挂载给操作系统
2、在管理节点给client节点安装ceph包,本文使用cephadmin节点作为client节点,在上面的步骤已经安装完成(cephadmin):
ceph-deploy install cephadmin #cephadmin可以换成真正的client节点
3、将配置文件拷贝到client节点,在前面的步骤也完成了(cephadmin):
ceph-deploy admin cephadmin #cephadmin可以换成真正的client节点
4、在client上创建块设备并映射块设备(本文是cephadmin):
rbd create dddtest --size 409600 -m 10.30.12.136 #创建一个块设备image
rbd info dddtest #查看image信息,可以看到image拥有layering, exclusive-lock, object-map, fast-diff, deep-flatten这些特性
rbd feature disable dddtest exclusive-lock, object-map, fast-diff, deep-flatten #但是3.10的内核只支持layering特性,所以要禁用其他的特性才能映射成功
rbd map dddtest --name client.admin -m 10.30.12.136 #把 image 映射为块设备
mkfs.ext4 -m0 /dev/rbd0 #格式化
mount /dev/rbd0 /mnt #挂载
删除OSD节点:
ceph osd tree #在ceph1上查看osd树结构
ceph osd out 0 #在ceph1上标记id为0的osd节点要退出cluster
ceph osd out 1 #在ceph1上标记id为1的osd节点要退出cluster
systemctl stop ceph-osd@0 #在ceph1上停止osd服务
systemctl stop ceph-osd@1 #在ceph2上停止osd服务
ceph osd crush remove osd.0 #在ceph1上从crush中删除osd.0
ceph osd crush remove osd.1 #在ceph1上从crush中删除osd.1
ceph auth del osd.0 #在ceph1上从auth中删除osd.0
ceph auth del osd.1 #在ceph1上从auth中删除osd.1
ceph osd rm 0 #在ceph1上删除osd.0节点
ceph osd rm 1 #在ceph1上删除osd.1节点
服务管理:
systemctl start/stop ceph.target #启动/停止一个Ceph节点(任何类型)上的所有守护进程
systemctl status ceph\*.service ceph\*.target #查看一个Ceph节点上的服务
systemctl start ceph-osd.target #启动一个Ceph节点的所有osd服务
systemctl start ceph-mon.target #启动一个Ceph节点的所有mon服务
systemctl start ceph-mds.target #启动一个Ceph节点的所有mds服务
systemctl stop ceph-mon\*.service ceph-mon.target #停止一个Ceph节点的所有osd服务
systemctl stop ceph-osd\*.service ceph-osd.target #停止一个Ceph节点的所有mon服务
systemctl stop ceph-mds\*.service ceph-mds.target #停止一个Ceph节点的所有mds服务
systemctl start/stop ceph-osd@{id} #启动/停止Ceph节点上指定的osd服务
systemctl start/stop ceph-mon@{hostname} #启动/停止Ceph节点上指定的mon服务
systemctl start/stop ceph-mds@{hostname} #启动/停止Ceph节点上指定的mds服务
ceph命令:
ceph health #查看集群监控情况
ceph status/-s #查看集群状态
ceph -w #监控(watch)集群状态
ceph df #查看集群的数据用量及其在存储池内的分布情况
ceph osd stat #查看 OSD 状态
ceph osd dump [--format plain/json] #转储 OSD 运行图
ceph osd tree [--format plain/json] #把OSD运行图转储为树
ceph mon stat #查看监视器状态
ceph mon dump #导出监视器状态信息
ceph quorum_status #查看监视器的法定人数状态
ceph pg stat #查看归置组状态
ceph pg dump [--format plain/json] #查看归置组列表
ceph pg map 0.2a #根据指定归置组号查看哪些OSD位于Acting Set或Up Set里
ceph pg 0.2a query #查询某个归置组信息
ceph osd map <pool-name> <object-name> #找出某对象在哪里或应该在哪里
ceph osd getmap -o file #把最新的OSD运行图拷贝到一个文件,参见osdmaptool
ceph osd getcrushmap -o file #从最新OSD运行图拷出CRUSH图
ceph osd setcrushmap -i file #导入指定CRUSH 图。
ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]] #增加或挪动一个新OSD条目,要给出 id/name/weight 和位置参数
ceph osd crush remove {name} #从现有CRUSH图删除存在的条目(OSD)
ceph osd crush remove {bucket-name} #从现有CRUSH图删除存在的空桶
ceph osd crush move {id} {loc1} [{loc2} ...] #把有效的桶从分级结构里的一个位置挪到另一个。
ceph osd crush reweight {name} {weight} #设置{name}所指条目的权重为{weight}
ceph osd cluster_snap {name} #创建集群快照
ceph osd lost {id} [--yes-i-really-mean-it] #OSD标记为丢失,有可能导致永久性数据丢失,慎用!
ceph osd create [{uuid}] #创建新OSD,如果未指定ID,将自动分配个新ID
ceph osd rm [{id}...] #删除指定OSD 。
ceph osd getmaxosd #查询OSD运行图里的max_osd参数。
ceph osd setmaxosd #设置OSD运行图的max_osd参数,扩展存储集群时有必要。
ceph osd down {osd-num} #把ID为{osd-num}的OSD标记为down
ceph osd out {osd-num} #把OSD{osd-num}标记为数据分布之外(即不给分配数据)
ceph osd in {osd-num} #把OSD{osd-num}标记为数据分布之内(即分配了数据)
ceph osd pause #设置OSD运行图的暂停标记,不会有IO请求发送到任何OSD
ceph osd unpause #用unpause清空此标记会导致重发未决的请求。
ceph osd scrub {osd-num/*} #向OSD下达一个洗刷命令,用通配符 * 把命令下达到所有 OSD 。
ceph osd repair osd-num/* #向osd下达修复命令,用*下达到所有OSD
ceph osd reweight {osd-num} {weight} #为OSD重设权重,权重相同的OSD大致会收到相同的I/O请求、并存储相同数量的数据。此命令可给OSD设置一个增益权重,有效值在0和1之间,它使得CRUSH重新归置一定数量的、本应该放到此处的数据。它不会影响crush图里所分配的权重,在CRUSH分布算法没能理想地执行时,它可作为一种纠正手段。比如,假设你的某个OSD使用率达到了90%,但其它的大致都在50%,这时你就可以试着下调此权重来补偿它。
ceph osd reweight-by-utilization [threshold] #重设所有滥用 OSD 的权重,它默认会下调达到平均利用率 120% 的那些OSD ,除非你指定了阀值。
ceph tell osd.N bench [NUMER_OF_OBJECTS] [BYTES_PER_WRITE] #在osd上进行个简单的吞吐量测试,每次写入BYTES_PER_WRITE、一共写入TOTAL_BYTES。默认以4MB增量写入1GB 。此压力测试是非破坏性的,不会覆盖已有OSD数据,但可能会暂时影响同时访问此OSD的客户端性能。
ceph osd lspools #看错存储池列表
ceph osd pool mksnap/rmsnap {pool-name} {snap-name} #创建/删除存储池快照。
ceph osd pool create {pool-name} pg_num [pgp_num] #创建/删除/重命名存储池
ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it] #创建/删除/重命名存储池
ceph osd pool rename {old-name} {new-name} #创建/删除/重命名存储池
ceph osd pool set {pool-name} {field} {value} #更改存储池设置。可用的 field 值有:
size: 设置存储池内数据的副本数;
crash_replay_interval: 允许客户端重放确认而未提交的请求前等待的时间,秒;
pg_num: 归置组数量;
pgp_num: 计算归置组存放的有效数量;
crush_ruleset: 用于归置映射的规则号。
ceph osd pool get {pool-name} {field} #获取存储池配置值。可用的 field 值有:
pg_num: 归置组数量;
pgp_num: 计算归置组存放的有效数量;
lpg_num: 本地归置组数量;
lpgp_num: 用于存放本地归置组的数量。