部署前环境配置
环境部署信息
本手顺安装架构:
Ceph-deploy 1个
MON 2个
OSD 3个
CentOS 7:
ceph-deploy + mon1(mon1)
10.53.16.190
mon2(mon2)
10.53.16.191
osd(node1)
10.53.16.192
osd(node2)
10.53.16.193
osd(node3)
10.53.16.194
修改所有节点的主机名字 以及 /etc/hosts
1. 每个节点修改主机名:
hostnamectl set-hostname mon1
hostnamectl set-hostname mon2
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname node3
2. 修改mon1节点的hosts文件
vim /etc/hosts
10.53.16.190 mon1
10.53.16.191 mon2
10.53.16.192 node1
10.53.16.193 node2
10.53.16.194 node3
3. ping测试节点连通性
ping -c 3 mon1
ping -c 3 mon2
ping -c 3 node1
ping -c 3 node2
ping -c 3 node3
为mon1添加epel, 更新rpm源
1. 添加epel源
sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
2. 添加 Ceph 源:
sudo vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
3. 更新软件包:
sudo yum update -y && sudo yum install yum-plugin-priorities
如果yum出现问题,请重新删除repo
rm -f mv /etc/yum.repos.d/epel.repo
为每个节点添加防火墙规则以及关闭selinux
1. 关闭selinux
sudo setenforce 0
2. 关闭防火墙或者自己添加防火墙规则
1. 添加 Calamari端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2003-2004/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
2. 添加 mon 节点端口
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
3. 添加mon节点和node节点端口
sudo firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2003-2004/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4505-4506/tcp --permanent
在所有节点安装ntp服务
sudo yum install ntp ntpdate ntp-doc -y
添加系统账户ceph,并且设置root权限
useradd -d "/home/ceph" -m ceph
passwd ceph
echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
sudo chmod 0440 /etc/sudoers.d/ceph
重启所有节点服务器
init 6
配置mon1的ssh, 免密访问所有节点
1. 生成ssh-key
ssh-keygen(无需输入任何内容,一直enter生成完成)
ssh-copy-id ceph@mon1
ssh-copy-id ceph@mon2
ssh-copy-id ceph@node1
ssh-copy-id ceph@node2
ssh-copy-id ceph@node3
2. 修改 ~/.ssh/config
Host mon1
Hostname mon1
User ceph
Host mon2
Hostname mon2
User ceph
Host node1
Hostname node1
User ceph
Host node2
Hostname node2
User ceph
Host node3
Hostname node3
User ceph
拷贝mon1的服务器的/etc/hosts文件到所有节点
scp /etc/hosts root@mon2:/etc/hosts
scp /etc/hosts root@node1:/etc/hosts
scp /etc/hosts root@node2:/etc/hosts
scp /etc/hosts root@node3:/etc/hosts
ceph集群部署
在mon1节点上安装ceph-deploy服务
sudo yum install ceph-deploy -y
在mon1节点上创建ceph配置目录
mkdir -p ~/ceph_cluster
cd ~/ceph_cluster
指定mon1为管理节点
ceph-deploy new mon1
安装出现以下错误,请重新指定其他其他服务器管理节点
[ceph_deploy][ERROR ] UnsupportedPlatform: Platform is not supported: centos
修改配置文件
vim ceph.conf
osd pool default size = 3 //修改副本数量,建议为3个
public network = 10.53.16.0/24 //注意 mon_host 必须在 public network 网络的网段内
cluster network = 10.0.0.0/8 //集群的工作网段,用于集群的数据同步,心跳等等
在所有节点安装Ceph
sudo ceph-deploy install mon1 node1 node2
初始化 monitor
ceph-deploy mon create-initial
如果启动失败,请查看当前系统账户是否是ceph账户
确认是否启动成功
ps -ef | grep ceph
root 7097 1289 0 13:35 ? 00:00:00 sshd: ceph [priv]
ceph 7105 7097 0 13:35 ? 00:00:00 sshd: ceph@pts/1
ceph 7108 7105 0 13:35 pts/1 00:00:00 -bash
ceph 7879 1 0 5月11 ? 00:00:13 /usr/bin/ceph-mon -f --cluster ceph --id mon2 --setuser ceph --setgroup ceph
root 9107 1289 0 14:11 ? 00:00:00 sshd: ceph [priv]
ceph 9110 9107 0 14:11 ? 00:00:00 sshd: ceph@pts/2
ceph 9119 9110 0 14:11 pts/2 00:00:00 -bash
ceph 9174 9119 0 14:11 pts/2 00:00:00 ps -ef
ceph 9175 9119 0 14:11 pts/2 00:00:00 grep --color=auto ceph
3.使用下面命令确认每个节点是否顺利启动ceph
systemctl status ceph-mon@mon1.service
systemctl status ceph-mon@node1.service
systemctl status ceph-mon@node2.service
遇到获取keyring失败,查看ceph.conf的public network设置为同一网段或者查看网卡是否存在多个ip地址
[mon1][ERROR ] "ceph auth get-or-create for keytype admin returned -1
[mon1][ERROR ] Failed to return 'admin' key from host mon1
[ceph_deploy.gatherkeys][ERROR ] Failed to connect to host:mon1
[ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpAz3hQe
[ceph_deploy][ERROR ] RuntimeError: Failed to connect any mon
如果没有任何日志报错的话,以上ceph集群就顺利启动了
创建OSD磁盘
为每个osd节点分配独立的磁盘,与系统的磁盘隔离开来,以及为ceph日志文件也隔离独立磁盘, 保证数据安全性,可靠性以及性能#### 建议创建osd磁盘在10个以上
使用裸盘作为OSD(推荐使用,这样性能比较好)
1. 在节点上查看裸盘路径
fdisk -l
2. 在mon1部署节点上添加裸盘
ceph-deploy disk zap node1:/dev/sdb node2:/dev/sdb
ceph-deploy osd prepare node1:/dev/sdb node2:/dev/sdb
ceph-deploy osd activate node1:/dev/sdb1 node2:/dev/sdb1
使用文件夹作为OSD
1. 为node1节点和node2节点创建文件夹
ssh ceph@node1
mkdir /var/local/osd1
sudo chmod 777 /var/local/osd1
exit
ssh ceph@node2
mkdir /var/local/osd2
sudo chmod 777 /var/local/osd2
exit
2. 在mon1节点上激活osd
ceph-deploy osd prepare node1:/var/local/osd1 node2:/var/local/osd2
sudo ceph-deploy osd activate node1:/var/local/osd1 node2:/var/local/osd2
3. 查看节点是否成功部署
ceph osd tree
推送配置文件到所有节点
ceph-deploy admin mon1 node1 node2
查看ceph集群状态
ceph health
出现找不到/etc/ceph/ceph.client.admin.keyring的错误,请修改权限 chmod 777 /etc/ceph/ceph.client.admin.keyring
2018-05-15 20:26:27.442992 7f29a8b6b700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
2018-05-15 20:26:27.443003 7f29a8b6b700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2018-05-15 20:26:27.443004 7f29a8b6b700 0 librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound
ceph节点的增加
增加mon节点
1. 编辑部署节点hosts文件,添加新mon节点的ip,拷贝到要部署的mon节点中
sudo scp /etc/hosts root@mon4:/etc/hosts
2. 在新的mon节点上安装ntp
sudo yum install ntp ntpdate ntp-doc -y
3. 在部署节点部署ceph
ceph-deploy install mon4
4. 将新的节点添加到ceph 集群中
ceph-deploy mon add mon4
出现如下部署错误,请查看部署节点的ceph.conf文件的public network设置为公网的地址
[mon4][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy.mon][ERROR ] Failed to execute command: ceph-mon –cluster ceph –mkfs -i mon4 –monmap /var/lib/ceph/tmp/ceph.mon4.monmap –keyring /var/lib/ceph/tmp/ceph-mon4.mon.keyring –setuser 1001 –setgroup 1001
[ceph_deploy][ERROR ] GenericError: Failed to add monitor to host: mon4
增加osd节点
1. 在新节点上创建文件夹或者裸盘
ssh ceph@node3
mkdir /var/local/osd3
sudo chmod 777 /var/local/osd3
exit
2. 在部署节点激活新的osd节点
ceph-deploy osd prepare node3:/var/local/osd3
ceph-deploy osd activate node3:/var/local/osd3
3. 推送配置到新的节点
ceph-deploy admin node3
4. 查看是否部署成功
ceph osd tree
删除mon节点
ceph-deploy mon destroy mon1
删除 osd 节点
1. 踢出osd节点
ceph osd out osd.4
2. 在osd节点服务停止ceph服务
ps -ewf|grep ceph; kill it
3. 移除crush节点
ceph osd crush remove osd.4
4. 移除auth认证
ceph auth del osd.4
6. 移除osd节点
ceph osd rm 4
关于修改osd的journal
osd的数据与journal日志放在不同的磁盘上有助于大幅度提升iops性能和数据安全性。建议把journa放在独立的ssd磁盘上
使用fdisk为新的磁盘创建分区sdb1
停止osd0所在节点的ceph服务
service ceph stop osd.0
osd.0刷入所有日志
ceph-osd --flush-journal -i 0
-i 0为osd.o的磁盘编号
挂载journal到独立的磁盘
rm /var/lib/ceph/osd/ceph-0/journal
ln -s /dev/sdb1 /var/lib/ceph/osd/ceph-0/journal
创建新的日志文件
ceph-osd --mkjournal -i 0
service ceph start osd.0
创建pool数据池
显示所有pool池
rados lspools
查看pool ID、副本数量、CRUSH规则集、PG和PGP数量
ceph osd dump |grep pool
创建pool池
若少于5个OSD, 设置pg_num为128。 5~10个OSD,设置pg_num为512。 10~50个OSD,设置pg_num为4096。 以此类推
ceph osd pool create test-pool 64
test-pool:数据池名字
64:pg数量
调整pool池副本
1. 调整test-pool池的副本数量为2
ceph osd pool set test-pool size 2
设置pool配额
1. 设置pool最大存储对象数量,取消最大对象限制设置为0
ceph osd pool set-quota test-pool max_objects 10000
2. 设置pool的最大容量
ceph osd pool set-quota test-pool max_bytes $((10 * 1024 * 1024 * 1024))
重命名pool
1. 将test-pool改为image-pool
ceph osd pool rename test-pool image-pool
查看pool状态
rados df
创建pool快照
ceph支持对整个pool创建快照(和Openstack Cinder一致性组区别?),作用于这个pool的所有对象。但注意ceph有两种pool模式: Pool Snapshot,我们即将使用的模式。创建一个新的pool时,默认也是这种模式。 Self Managed Snapsoht,用户管理的snapshot,这个用户指的是librbd,也就是说,如果在pool创建了rbd实例就自动转化为这种模式。 这两种模式是相互排斥,只能使用其中一个。因此,如果pool中曾经创建了rbd对象(即使当前删除了所有的image实例)就不能再对这个pool做快照了。反之,如果对一个pool做了快照,就不能创建rbd image了。
ceph osd pool mksnap test-pool test-pool-snap
删除pool快照
ceph osd pool rmsnap test-pool test-pool-snap
test-pool:数据池
test-pool-snap:快照名
创建ceph块设备
在指定的数据池中创建10GB块设备
rbd create test-rbd --size 10G -p test-pool
test-pool:指定的数据池
test-rbd: 创建的数据
列出数据池的块设备以及详细信息
rbd ls -p test-pool
rbd --image test-rbd info -p test-pool
layering: 支持分层
striping: 支持条带化 v2
exclusive-lock: 支持独占锁
object-map: 支持对象映射(依赖 exclusive-lock )
fast-diff: 快速计算差异(依赖 object-map )
deep-flatten: 支持快照扁平化操作
journaling: 支持记录 IO 操作(依赖独占锁)
rbd image有4个 features,layering, exclusive-lock, object-map, fast-diff, deep-flatten
因为目前内核版本 3.10仅支持layering,修改默认配置
每个ceph node的/etc/ceph/ceph.conf 添加一行
rbd_default_features = 1
这样之后创建的image 只有这一个feature
format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。
format 2 - 使用第二版 rbd 格式, librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能
挂载ceph块设备
1. 修改存储特征
rbd feature disable test-rbd -p test-pool exclusive-lock object-map fast-diff deep-flatten
2. 挂载块设备
sudo rbd map --image test-rbd -p test-pool
3. 查看是否挂载成功
rbd showmapped
使用这个块设备
1. 查看容量
sudo fdisk -l /dev/rbd0
2. 格式化xfs文件系统
sudo mkfs.xfs /dev/rbd0
3. 创建挂载路径
sudo mkdir /mnt/ceph-disk
4. 挂载路径
sudo mount /dev/rbd0 /mnt/ceph-disk
5. 查看是否挂载成功
df -h /mnt/ceph-disk
挂载成功后就可以直接在这个文件里放东西了,相当于网盘了。数据会自动备份在这个osd服务器上了
calamari监控管理平台部署
安装环境
Calamari包含的组件主要有calamari-server;romana;salt-minion;salt-master;diamond。
这些模块各自的作用:calamari-server 这个是提供一个与集群进行交互,并且自己封装了一个自己的API,做集中管理的地方,这个只需要在集群当中的某一台机器上安装,也可以独立安装
romana 就是原来的calamari-client,这个叫client,其实是一个web的界面,这个叫calamari-web更好,现在已经更名为romana,这个也是只需要在集群当中的某一台机器上安装,也可以独立安装,这个需要跟calamari-server安装在一台机器上
salt-master 是一个管理的工具,可以批量的管理其他的机器,可以对安装了salt-minion的机器进行管理,在集群当中,这个也是跟calamari-server安装在一起的
salt-minion 是安装在集群的所有节点上的,这个是接收salt-master的指令对集群的机器进行操作,并且反馈一些信息到salt-master上diamond 这个是系统的监控信息的收集控件,提供集群的硬件信息的监控和集群的信息的监控,数据是发送到romana的机器上的,是由romana上的carbon来收取数据并存储到机器当中的数据库当中的
节点情况
需要安装软件
Calamari服务端
calamri-server romana salt-master
集群节点
salt-minion diamond
host文件 拷贝master的host文件
拷贝ceph-deploy的/etc/hosts到各个ceph节点
scp /etc/hosts root@node1:/etc/hosts
scp /etc/hosts root@node2:/etc/hosts
为每个节点软件下载和解压
wget https://file.hfjy.com/index.php/s/t9d49CWvwjhgM15/download
unzip download.zip
cd centosjewel/
ceph-deploy节点安装监控服务端calamari和romana
1. 本地安装 calamari, romana, salt-master
sudo yum localinstall calamari-server-1.3.3-jewel.el7.centos.x86_64.rpm romana-1.2.2-36_gc62bb5b.el7.centos.x86_64.rpm salt-master-2015.8.1-1.el7.noarch.rpm
2. 调整目录权限
sudo chmod 777 -R /var/log/calamari/
sudo chmod 777 -R /opt/calamari/
3. 安装被监控端而后在继续操作服务端
被监控节点安装(在node节点上安装)
1. 安装salt-minion diamond
sudo yum localinstall salt-2015.8.1-1.el7.noarch.rpm salt-minion-2015.8.1-1.el7.noarch.rpm diamond-3.4.68-jewel.noarch.rpm
2. 配置salt-minion文件
sudo sed -i 's/#master: salt/master:mon1/' /etc/salt/minion
mon1: 为 calamari的主机名字
添加minion.d附加目录及calamari.conf文件
sudo mkdir /etc/salt/minion.d/
sudo touch /etc/salt/minion.d/calamari.conf
sudo chmod 777 /etc/salt/minion.d/calamari.conf
sudo echo 'master:mon1'> /etc/salt/minion.d/calamari.conf
sudo systemctl restart salt-minion
sudo systemctl enable salt-minion
配置diamond
cd /etc/diamond/ && sudo cp diamond.conf.example diamond.conf
sudo chmod 777 /etc/diamond/diamond.conf
sudo sed -i '/^host/s/graphite/mon1/' /etc/diamond/diamond.conf
sudo systemctl restart diamond
sudo systemctl enable diamond
mon1:calamari服务端的名字 如果启动diamond失败,请添加服务
sudo chkconfig --add diamond
所有被监控节点完后,在监控服务端启动服务器
sudo systemctl restart salt-master
管理salt-minion节点(calamari服务端操作)
列出所有节点
sudo salt-key -L
允许所有节点接入
sudo salt-key -A
检测节点链接性
sudo salt '*' test.ping
输出集群状态
sudo salt '*' ceph.get_heartbeats
初始化calamari配置(在服务端操作)
初始化calamari,输入账户和密码,就可以进行web访问了
sudo calamari-ctl initialize
清除ceph安装包
清除安装包
ceph-deploy purge mon1 node1 node2
清除配置信息
ceph-deploy purgedata mon1 node1 node2
ceph-deploy forgetkeys
卸载部署的ceph包
ceph-deploy uninstall mon1 node1 node2
每个节点删除残留的配置文件
rm -rf /var/lib/ceph/osd/*
rm -rf /var/lib/ceph/mon/*
rm -rf /var/lib/ceph/mds/*
rm -rf /var/lib/ceph/bootstrap-mds/*
rm -rf /var/lib/ceph/bootstrap-osd/*
rm -rf /var/lib/ceph/bootstrap-mon/*
rm -rf /var/lib/ceph/tmp/*
rm -rf /etc/ceph/*
rm -rf /var/run/ceph/*
性能测试
RADOS 性能测试:使用 Ceph 自带的 rados bench 工具
该工具的语法为:rados bench -p
顺序写:
rados bench -p rbd 10 write --no-cleanup
顺序读:
rados bench -p rbd 10 seq
随机读
rados bench -p rbd 10 rand
RADOS 性能测试:使用 rados load-gen 工具
语法:
rados -p rbd load-gen
--num-objects 初始生成测试用的对象数,默认 200
--min-object-size 测试对象的最小大小,默认 1KB,单位byte
--max-object-size 测试对象的最大大小,默认 5GB,单位byte
--min-op-len 压测IO的最小大小,默认 1KB,单位byte
--max-op-len 压测IO的最大大小,默认 2MB,单位byte
--max-ops 一次提交的最大IO数,相当于iodepth
--target-throughput 一次提交IO的历史累计吞吐量上限,默认 5MB/s,单位B/s
--max-backlog 一次提交IO的吞吐量上限,默认10MB/s,单位B/s
--read-percent 读写混合中读的比例,默认80,范围[0, 100]
--run-length 运行的时间,默认60s,单位秒
rados -p pool100 load-gen --read-percent 0 --min-object-size 1073741824 --max-object-size 1073741824 --max-ops 1 --read-percent 0 --min-op-len 4194304 --max-op-len 4194304 --target-throughput 1073741824 --max_backlog 1073741824
该命令的含义是:在 1G 的对象上,以 iodepth = 1 顺序写入 block size 为 4M 的总量为 1G 的数据。其平均结果大概在 24MB/s,基本和 rados bench 的结果相当。
在 client 上,同样的配置,顺序写的BW大概在 20MB/s,顺序读的 BW 大概在 100 MB/s。
一些常见问题处理
osd节点状态为down(处理情况一)
1. 在mon节点上先踢出
ceph auth del osd.*
2. 在osd节点上重新激活
sudo ceph-disk activate-all
*:为down的节点编号
osd节点状态为down(处理情况二)
1. 重新在ceph-deploy激活节点
ceph-deploy osd activate node3:/var/local/osd3
pg出现down的故障
1. 枚举出down的服务器
ceph pg dump_stuck inactive
ceph pg {pg id} query
2. 找出pg down掉的osd编号, 重启osd服务, 需要等待几分钟,等pg节点为incomplete
cepg osd {osd.*} lost --yes-i-really-mean-it
3. 如果出现 Error ENOENT: i don't have pgid 1.13, 重新创建该pg节点
ceph pg force_create_pg {pg id}
ceph常用命令
集群维护常用命令概览
检查集群的状况
启动集群后、读写数据前,先检查下集群的健康状态。你可以用下面的命令检查:
ceph health
ceph health detail (详细)
ceph -w(监控当前集群的状态)
ceph df(检查整个集群磁盘使用状况)
mon操作相关
ceph mon dump(监视图)
ceph quorum_status(监视器法定人数)
ceph mon remove mon2(删除mon2节点)
ceph mon getmap -o 1.txt(导出mon map)
monmaptool --print 1.txt (导入上面的mon map)
ceph-mon -i nc3 --inject-monmap 1.txt(把上面的mon map注入新加入的节点)
ceph-conf --name mon.nc3 --show-config-value admin_socket(查看mon的amin socket)
ceph-conf --name mon.nc1 --show-config-value log_file /var/log/ceph/ceph-mon.nc1.log(查看ceph mon log日志所在的目录)
ceph --admin-daemon /var/run/ceph/ceph-mon.nc3.asok config show | less(查看一个集群ceph-mon.nc3参数的配置、输出信息特别详细)
mds操作相关
ceph mds dump(查看mds状态)
ceph mds rm 0 mds.nc1(删除一个mds节点)
ceph mds rmfailed
(设置mds状态为失败) ceph mds add_data_pool
(新建pool) mds cluster_down(关闭mds集群) mds cluster_up(启动mds集群) ceph mds set max_file_size 1024000000000(设置cephfs文件系统存储方式最大单个文件尺寸) ceph mds fail 0(强制mds状态为featrue) ceph fs rm leadorfs --yes-i-really-mean-it(删除mds文件系统) ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it(删除fs数据文件夹) ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it (删除元数据文件夹) ceph mds rm 0 mds.node242(拆除文件系统前推荐先删除节点)
auth相关
ceph auth list(查看ceph集群中的认证用户及相关的key)
ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.admin.keyring(为ceph创建一个admin用户并为admin用户创建一个密钥,把密钥保存到/etc/ceph目录下)
ceph auth get-or-create osd.0 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-0/keyring(为osd.0创建一个用户并创建一个key)
ceph auth get-or-create mds.nc3 mon 'allow rwx' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mds/ceph-cs1/keyring(为mds.nc3创建一个用户并创建一个key)
ceph auth import /var/lib/ceph/mds/ceph-cs1/keyring(导入key信息)
ceph auth del osd.0(删除集群中的一个认证用户)
osd相关
物理盘
ceph osd tree (查看osd列表)
ceph osd df (检查osd磁盘使用状况)
ceph osd perf(查看数据延迟)
ceph osd down osd.0 (down掉一个osd.0的硬盘)
ceph osd rm osd.0(在集群中删除一个osd.0硬盘)
ceph osd crush rm osd.0(在集群中删除一个osd 硬盘 crush map)
ceph osd crush rm node1 在集群中删除一个osd的host节点
ceph osd getmaxosd(查看最大osd的个数)
ceph osd setmaxosd 2048(设置最大的osd的个数(当扩大osd节点的时候必须扩大这个值)
ceph osd crush set {id} {weight} [{loc1} [{loc2} ...]](设置osd crush的权重为1.0)
> ceph osd crush set osd.1 0.5 host=node241
ceph osd reweight 3 0.5(设置osd的权重)
ceph osd out osd.3(把一个osd节点逐出集群)
ceph osd in osd.3(把逐出的osd加入集群)
ceph osd pause(暂停osd, 暂停后整个集群不再接收数据)
ceph osd unpause(再次开启osd, 开启后再次接收数据)
ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | less(查看一个集群osd.0参数的配置、输出信息特别详细,集群所有配置生效可以在此参数下确认)
ceph osd set nodown(设置标志 flags ,不允许关闭osd、解决网络不稳定,osd 状态不断切换的问题)
ceph osd unset nodown(取消设置)
pool相关
数据池。
ceph osd lspools(查看ceph集群中的pool数量)
ceph osd pool create rbdtest 100(在ceph集群中创建一个pool,这里的100指的是PG组)
ceph osd dump | grep 'replicated size'(查看集群中所有pool的副本尺寸)
ceph osd pool get rbdpool size(查看pool 最大副本数量)
ceph osd pool get rbdpool min_size(查看pool 最小副本数量)
ceph osd pool set rbdtest pg_num 100(设置一个pool的pg数量)
ceph osd pool set rbdtest pgp_num 100(设置一个pool的pgp数量)
ceph osd pool set {pool_name} min_size 1 修改ceph,数据最小副本数、和副本数
ceph osd pool set {pool_name} size 2
> ceph osd pool set rbdpool min_size 1
> ceph osd pool set rbdpool size 2
ceph osd pool set rbdtest target_max_bytes 100000000000000(设置rbdtest池的最大存储空间为100T(默认是1T))
ceph osd pool set-quota rbdtest max_objects 10000(为一个ceph pool配置配额、达到配额前集群会告警,达到上限后无法再写入数据)
ceph osd pool delete rbdtest rbdtest --yes-i-really-really-mean-it (在集群中删除一个pool,注意删除poolpool 映射的image 会直接被删除,线上操作要谨慎)
ceph osd pool mksnap rbdtest rbdtest-snap20150924(给一个pool创建一个快照)
rados lssnap -p rbdtest(查看快照信息)
ceph osd pool rmsnap rbdtest rbdtest-snap20150924(删除pool的快照)
rados lssnap -p rbdtest(验证,剩余一个snap)
rados相关
rados 是和Ceph的对象存储集群(RADOS),Ceph的分布式文件系统的一部分进行交互是一种实用工具。
rados lspools(查看ceph集群中有多少个pool (只是查看pool))
rados df(显示整个系统和被池毁掉的使用率统计,包括磁盘使用(字节)和对象计数)
rados mkpool test(创建一个pool)
rados create test-object -p test(创建一个对象object)
rados -p test ls(查看对象文件)
rados rm test-object-1 -p test(删除一个对象)
rados rmpool test test –yes-i-really-really-mean-it(删除foo池 (和它所有的数据))
rados ls -p test | more(查看ceph pool中的ceph object (这里的object是以块形式存储的)
rados -p test mksnap testsnap(为test pool创建快照)
rados -p test lssnap(列出给定池的快照)
rados -p test rmsnap testsnap(删除快照)
rados -p test put myobject blah.txt(上传一个对象到test pool)
rbd相关
rbd create -p test --size 10000 kjh(在test池中创建一个命名为kjh的10000M的镜像)
rbd ls test(查看ceph中一个pool里的所有镜像)
rbd -p test info kjh(查看新建的镜像的信息)
rbd info -p test --image kjh(查看ceph pool中一个镜像的信息)
rbd rm -p test kjh(删除一个镜像)
rbd resize -p test --size 20000 kjh(调整一个镜像的尺寸)
rbd -p test info kjh(调整后的镜像大小)
pg相关
编程器被映射到这些pgs的osd”> PG =“放置组”。当集群中的数据,对象映射到编程器,被映射到这些PGS的OSD。
ceph pg dump (查看pg组的映射信息)
ceph pg map 0.3f(查看一个PG的map)
> osdmap e88 pg 0.3f (0.3f) -> up [0,2] acting [0,2] #其中的[0,2]代表存储在osd.0、osd.2节点,osd.0代表主副本的存储位置
ceph pg stat(查看PG状态)
ceph pg {pg-id} query(查询一个pg的详细信息)
ceph pg scrub {pg-id}(要洗刷一个pg组,执行命令)
ceph pg dump_stuck unclean((不干净)归置组含有复制数未达到期望数量的对象,它们应该在恢复中。)
ceph pg dump_stuck inactive((不活跃)归置组不能处理读写,因为它们在等待一个有最新数据的 OSD 复活且进入集群。)
ceph pg dump_stuck stale((不新鲜)归置组处于未知状态:存储它们的 OSD 有段时间没向监视器报告了(由 mon_osd_report_timeout 配置)。可用格式有 plain (默认)和 json 。阀值定义的是,归置组被认为卡住前等待的最小时间(默认 300 秒)
ceph pg dump --format plain(显示一个集群中的所有的pg统计)
ceph pg {pg-id} mark_unfound_lost revert|delete(恢复一个丢失的pg,
如果集群丢了一个或多个对象,而且必须放弃搜索这些数据,你就要把未找到的对象标记为丢失( lost )。
如果所有可能的位置都查询过了,而仍找不到这些对象,你也许得放弃它们了。这可能是罕见的失败组合导致的,集群在写入完成前,未能得知写入是否已执行。
当前只支持 revert 选项,它使得回滚到对象的前一个版本(如果它是新对象)或完全忽略它。要把 unfound 对象标记为 lost )
ceph pg ls {pg-id} (查看某个PG内分布的数据状态,具体状态可以使用选项过滤输出)
rbd pool 快照功能
ceph osd pool create ptmindpool 256 256(新建个pool叫’ptmindpool’同时在下面创建一个’kjhimage’)
rbd create kjhimage --size 1024 --pool ptmindpool(创建镜像)
rbd --pool ptmindpool ls(查看镜像)
rbd snap create ptmindpool/kjhimage@snapkjhimage(创建snap,快照名字叫’snapkjhimage’)
rbd snap ls ptmindpool/kjhimage(查看kjhimage的snap)
rbd snap rollback ptmindpool/kjhimage@snapkjhimage(回滚快照)
rbd snap rm ptmindpool/kjhimage@snapkjhimage(删除snap 删除snap报(rbd: snapshot 'snapshot-xxxx' is protected from removal.)写保护 ,使用 rbd snap unprotect volumes/snapshot-xxx' 解锁,然后再删除)
rbd snap purge ptmindpool/kjhimage(删除kjhimage的全部snapshot)
rbd export -p ptmindpool --image kjhimage /tmp/kjhimage.img(把ceph pool中的一个镜像导出)
l /tmp/kjhimage.img (验证查看导出文)
rbd import /tmp/kjhimage.img -p ptmindpool --image importmyimage1(把一个镜像导入ceph中)
rbd -pptmindpool ls(验证查看导入镜像文件)