Ceph分布式存储-运维操作笔记
一、Ceph简单介绍
OSDs:Ceph的OSD守护进程(OSD)存储数据,处理数据复制,恢复,回填,重新调整,并通过检查其它Ceph OSD守护程序作为一个心跳 向Ceph的监视器报告一些检测信息。Ceph的存储集群需要至少2个OSD守护进程来保持一个 active + clean状态.(Ceph默认制作2个备份,但可以调整它)
Monitors:Ceph的监控保持集群状态映射,包括OSD(守护进程)映射,分组(PG)映射,和CRUSH映射。 Ceph 保持一个在Ceph监视器, Ceph OSD 守护进程和 PG的每个状态改变的历史(称之为“epoch”)。
MDS:MDS是Ceph的元数据服务器,代表存储元数据的Ceph文件系统(即Ceph的块设备和Ceph的对象存储不使用MDS)。Ceph的元数据服务器使用POSIX文件系统,用户可以执行基本命令如 ls, find,等,并且不需要在Ceph的存储集群上造成巨大的负载。
Ceph把客户端的数据以对象的形式存储到了存储池里。利用CRUSH算法,Ceph可以计算出安置组所包含的对象,并能进一步计算出Ceph OSD集合所存储的安置组。CRUSH算法能够使Ceph存储集群拥有动态改变大小、再平衡和数据恢复的能力。
二、Ceph存储特点
Object:有原生的API,而且也兼容Swift和S3的API
Block:支持精简配置、快照、克隆
File:Posix接口,支持快照
Ceph也是分布式存储系统,它的特点是:
高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。
无论是想使用Ceph对象存储或是以Ceph块设备服务至云平台 ,部署Ceph文件系统或者为了其他目的而使用Ceph,所有的 Ceph存储集群部署都是从设置每个Ceph节点,配置网络和Ceph存储集群开始的。一个Ceph存储集群要求至少有一个监视器Mon和两个OSD守护进程。当运行Ceph文件系统客户端时,必须要有元数据服务器MDS。一个ceph集群至少需要3个OSD才能实现冗余和高可用性。
Ceph提供了3种使用场景
1. 分布式文件系统CephFS。多个客户端mount CephFS到本地,CephFS遵循POSIX接口,使用体验类似于ext4等本地文件系统。类似于其他分布式文件系统,各个CephFS客户端共享同一命名空间。
2. RadosGW(rgw)对象存储。rgw使用场景类似于Amazon S3,类似于七牛云存储。
3. 块设备rbd(Rados Block Device)。Ceph提供虚拟的rbd块设备,用户像使用SATA盘那样的物理块设备一样使用rbd。rbd的使用是排他的,每个rbd块设备是用户私有的,相对的,CephFS的使用方式是共享的。
三、Ceph集群部署步骤 [使用ceph-deploy部署ceph分布式存储集]
1)系统:
[root@kevin-221 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final) 2)内核:
[root@kevin-221 ~]# uname -a
Linux kevin-221 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 3)ceph版本:
[root@kevin-221 ~]# ceph -v
ceph version 0.94.10 (b1e0532418e4631af01acbc0cedd426f1905f4af) 4)安装部署主机(ceph-deploy)
kevin-221 5)主机列表清单:
[root@kevin-221 ~]# cat /workspace/ceph/cephlist.txt
kevin-221
kevin-222
kevin-232
kevin-224
kevin-225
kevin-226
kevin-227
kevin-228
kevin-229 6)集群服务部署分配
kevin-221 ceph-deploy install
kevin-222 osd0 osd1 mds
kevin-232 osd2 osd3
kevin-224 osd4 osd5
kevin-225 osd6 osd7 mon
kevin-226 osd8 osd9 mds
kevin-227 osd10 osd11 mon
kevin-228 osd12 osd13 mds
kevin-229 osd14 osd15 mon 7)集群安装前准备工作
-> 规范系统主机名;
-> 添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名映射关系)
-> 每台 ssh-copy-id 完成这些服务器之间免ssh密码登录;
-> 关闭防火墙或者开放 6789/6800~6900端口、关闭SELINUX;
-> 配置ntp服务,开启时间服务,保证集群服务器时间统一; 8) 以下操作推荐在ceph-deploy节点操作:
添加ceph集群安装yum源文件;
使用路径/etc/yum.repos.d/ceph.repo
[root@kevin-221 ~]# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://ceph.com/rpm/rhel6/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-noarch]
name=Ceph noarch packages
baseurl=http://ceph.com/rpm/rhel6/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc [ceph-source]
name=Ceph source packages
baseurl=http://ceph.com/rpm/rhel6/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc 传输yum源文件到其它节点服务器
--delete 删除那些DST中SRC没有的文件
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;rsync -avp --delete /etc/yum.repos.d $ip:/etc/;done 创建集群配置目录
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip mkdir -p /etc/ceph ;done 9) 集群安装配置
提前填坑,根据以往配置部署经验,安装配置部署过程中会有不断报错,部分是因为个别依赖软件包没有安装导致,提前安装避免不必要的错误;
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip yum install *argparse* redhat-lsb xfs* -y;done ceph-deploy 节点安装部署(kevin-221 安装部署节点)
[root@kevin-221 ceph]# cd /etc/ceph/ 升级系统的软件包,安装ceph-deploy工具
[root@kevin-221 ceph]# yum update -y && yum install ceph-deploy -y ----------------以下操作在ceph-deploy节点操作----------------
如果以前安装过ceph,在此机器上运行
[root@kevin-221 ceph]# sudo stop ceph-all #停止所有ceph进程
[root@kevin-221 ceph]# ceph-deploy uninstall [{ceph-node}] #卸载所有ceph程序
[root@kevin-221 ceph]# ceph-deploy purge [[ceph-node} [{ceph-node}] #删除ceph相关的包
[root@kevin-221 ceph]# ceph-deploy purgedata {ceph-node} [{ceph-node}] #删除ceph相关的包
[root@kevin-221 ceph]# ceph-deploy forgetkeys #删除key 另外清理一下配置文件,重建一下安装配置目录
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip rm -rf /etc/ceph/* ;done
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip mkdir -p /etc/ceph ;done
------------------------------------------------------------- 9.1) 创建mon节点
在安装部署节使用ceph-deploy创建,生成MON信息:
[root@kevin-221 ceph]# cd /etc/ceph/
[root@kevin-221 ceph]# ceph-deploy new monnode
[root@kevin-221 ceph]# ceph-deploy new kevin-225 kevin-227 kevin-229 9.2) 安装部署报错:
[root@kevin-221 ceph]# ceph-deploy new kevin-225.ptfuture.com kevin-227.ptfuture.com kevin-229.ptfuture.com
Traceback (most recent call last):
File "/usr/bin/ceph-deploy", line 18, in <module>
from ceph_deploy.cli import main
ImportError: No module named ceph_deploy.cli 解决办法:
系统python问题,注意检查系统使用python版本2.6; 9.3) 再次执行 :
[root@kevin-221 ceph]# cd /etc/ceph/
[root@kevin-221 ceph]# ceph-deploy new kevin-225 kevin-227 kevin-229 执行成功后该目录下会增加三个文件
[root@kevin-221 ceph]# ll
total 12
-rw-r--r-- 1 root root 276 Feb 8 22:01 ceph.conf
-rw-r--r-- 1 root root 3142 Feb 8 22:01 ceph.log
-rw------- 1 root root 73 Feb 8 22:01 ceph.mon.keyring 9.4) 安装部署集群软件包: 在所有节点安装ceph软件包 ceph-deploy install{ceph-node}[{ceph-node}...]
(注:如果已经用yum在每台机器上安装了ceph,这步可省略)
[root@kevin-221 ceph]# ceph-deploy install dn-5-22{1..2}
[root@kevin-221 ceph]# ceph-deploy install kevin-232
[root@kevin-221 ceph]# ceph-deploy install dn-5-22{4..9} 5) 添加初始monitor节点和收集秘钥 ceph-deploy mon create-initial {node}
[root@kevin-221 ceph]# ceph-deploy --overwrite-conf mon create-initial kevin-225 kevin-227 kevin-229 如果提示文件存在,但是不匹配,可以先删除该ceph.conf,然后执行此操作。 9.6) 收集密钥
[root@kevin-221 ceph]# ceph-deploy gatherkeys kevin-225 kevin-227 kevin-229 收集到密钥,在本地目录下可看到如下密钥环文件:
{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring 9.7) 传输key 配置文件到其它节点服务器
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;rsync -avp --delete /etc/ceph $ip:/etc/;done --delete 删除那些DST中SRC没有的文件
至此mon节点配置基本告一段落; 9.8) 验证集群mon节点安装成功
[root@kevin-221 ceph]# ceph -s
cluster c7ee9e13-af6f-475e-80ce-ecb4ba463540
health HEALTH_ERR
64 pgs stuck inactive
64 pgs stuck unclean
no osds
monmap e1: 3 mons at {kevin-225=172.17.5.225:6789/0,kevin-227=172.17.5.227:6789/0,kevin-229=172.17.5.229:6789/0}
election epoch 8, quorum 0,1,2 kevin-225,kevin-227,kevin-229
osdmap e1: 0 osds: 0 up, 0 in
pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating 9.9) 登录mon节点查看进程已启动
[root@kevin-221 ceph]# ps -ef|grep ceph
root 27966 1 0 15:57 ? 00:00:00 /usr/bin/ceph-mon -i kevin-227 --pid-file /var/run/ceph/mon.kevin-227.pid -c /etc/ceph/ceph.conf --cluster ceph
root 28599 25753 0 15 10) 安装集群osd服务
##############################################################################
10.1) 执行osd初始化命令
每台有两块磁盘,分别为 、/dev/sdk /dev/sdl
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.2) 安装报错:
报错:
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (1.5.25): /usr/bin/ceph-deploy osd prepare kevin-221:/dev/sdk
[ceph_deploy.osd][DEBUG ] Preparing cluster ceph disks kevin-221:/dev/sdk:
[kevin-221][DEBUG ] connected to host: kevin-221
[kevin-221][DEBUG ] detect platform information from remote host
[kevin-221][DEBUG ] detect machine type
[ceph_deploy.osd][INFO ] Distro info: CentOS 6.6 Final
[ceph_deploy.osd][DEBUG ] Deploying osd to kevin-221
[kevin-221][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.osd][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs 解决办法:
报错信息说明在node上没有mkfs.xfs文件,需要在node上安装mkfs.xfs文件,批量安装部署所有集群服务器;
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip yum install xfs* -y;done 10.3) 再次执行osd初始化命令
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.4) ceph.keyring 同步
在创建osd节点的时候可能会osd节点上缺少/var/lib/ceph/bootstrap-osd/ceph.keyring文件,把监控节点上的文件拷贝到安装节点上。
在node1节点上建立一个目录:mkdir /var/lib/ceph/bootstrap-osd/。 登录登录mon节点,kevin-225:
# ssh kevin-225
# scp /var/lib/ceph/bootstrap-osd/ceph.keyring root@kevin-221:/var/lib/ceph/bootstrap-osd/ 统一解决,将安装节点的ceph.keyring copy到其它安装节点;
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;rsync -avp --delete /var/lib/ceph/bootstrap-osd root@$ip:/var/lib/ceph/;done 验证所有集群服务器上的ceph.keyring 内容一致:
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ssh root@$ip cat /var/lib/ceph/bootstrap-osd/ceph.keyring ;done 10.5)再次执行,osd初始化命令可以成功初始化新加入的osd节点 初始化数据盘
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd prepare $ip:/dev/sdk $ip:/dev/sdl;done 10.6)执行激活osd设备:(官网步骤,我在安装部署时,执行上一步的时候,osd自动激活了,不用执行激活操作)
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo ----$ip-----------;ceph-deploy --overwrite-conf osd activate $ip:/dev/sdk $ip:/dev/sdl;done 执行激活操作报错如下:
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (1.5.25): /usr/bin/ceph-deploy --overwrite-conf osd activate kevin-229:/dev/sdk kevin-229:/dev/sdl
[ceph_deploy.osd][DEBUG ] Activating cluster ceph disks kevin-229:/dev/sdk: kevin-229:/dev/sdl:
[kevin-229][DEBUG ] connected to host: kevin-229
[kevin-229][DEBUG ] detect platform information from remote host
[kevin-229][DEBUG ] detect machine type
[ceph_deploy.osd][INFO ] Distro info: CentOS 6.6 Final
[ceph_deploy.osd][DEBUG ] activating host kevin-229 disk /dev/sdk
[ceph_deploy.osd][DEBUG ] will use init type: sysvinit
[kevin-229][INFO ] Running command: ceph-disk -v activate --mark-init sysvinit --mount /dev/sdk
[kevin-229][WARNIN] INFO:ceph-disk:Running command: /sbin/blkid -p -s TYPE -ovalue -- /dev/sdk
[kevin-229][WARNIN] ceph-disk: Cannot discover filesystem type: device /dev/sdk: Line is truncated:
[kevin-229][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph-disk -v activate --mark-init sysvinit --mount /dev/sdk 解决办法:
查看osd 状态
[root@kevin-221 ceph]# ceph-disk activate-all
=== osd.1 ===
Starting Ceph osd.1 on kevin-221...already running
=== osd.0 ===
Starting Ceph osd.0 on kevin-221...already running lsblk看一下,如果sdk sdl是挂载在/var/lib/ceph/osd/ceph-0 ceph-1上,#没有问题 [root@kevin-221 ceph]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdj 8:144 0 1.8T 0 disk /data09
sdi 8:128 0 1.8T 0 disk /data08
sdk 8:160 0 1.8T 0 disk
├─sdk1 8:161 0 1.8T 0 part /var/lib/ceph/osd/ceph-0 #确认磁盘挂载
└─sdk2 8:162 0 5G 0 part
sdl 8:176 0 1.8T 0 disk
├─sdl1 8:177 0 1.8T 0 part /var/lib/ceph/osd/ceph-1 #确认磁盘挂载 (执行上一步的时候,osd自动激活了,不用执行激活操作) 11.)安装部署mds服务
############################################################################
11.1)添加元数据服务器
[root@kevin-221 ~]# cd /etc/ceph
[root@kevin-221 ceph]# ceph-deploy --overwrite-conf mds create kevin-222 kevin-226 kevin-228
命令顺利执行完成,无报错为oK 对于一个刚创建的MDS服务,虽然服务是运行的,但是它的状态直到创建 pools 以及文件系统的时候才会变为Active. 11.2)状态查看。还没有创建时候的状态
[root@kevin-221 ceph]# ceph mds stat
e1: 0/0/0 up
[root@kevin-221 ceph]# ceph mds dump
dumped mdsmap epoch 1
epoch 1
flags 0
created 0.000000
modified 2015-06-28 15:58:10.254107
------------中间省略------------------
compat compat={},rocompat={},incompat={}
max_mds 0
in
up {}
failed
stopped
data_pools
metadata_pool 0
inline_data disabled 11.3)通过下面的操作创建Filesystem
[root@kevin-221 ceph]# ceph osd pool create cephfs_data 10
[root@kevin-221 ceph]# ceph osd pool create cephfs_metadata 10
[root@kevin-221 ceph]# ceph fs new leadorfs cephfs_metadata cephfs_data 11.4)成功创建后,mds stat的状态如下
[root@kevin-221 ceph]# ceph mds stat
e6: 1/1/1 up {0=kevin-228=up:active}, 2 up:standby [root@kevin-221 ceph]# ceph mds dump
dumped mdsmap epoch 6
epoch 6
...........中间省略-...........
max_file_size 1099511627776
last_failure 0
last_failure_osd_epoch 0
compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table}
..........中间省略-...........
data_pools 5
metadata_pool 6
inline_data disabled
4198: 172.17.5.222:6808/11942 'kevin-222' mds.-1.0 up:standby seq 2703
4406: 172.17.5.226:6808/1634 'kevin-226' mds.-1.0 up:standby seq 160
4247: 172.17.5.228:6808/25735 'kevin-228' mds.0.1 up:active seq 2703 11.5) ceph集群的状态,pg的数量以及pool的数量都得到了对应的增加
[root@kevin-221 ceph]# ceph -s
cluster c7ee9e13-af6f-475e-80ce-ecb4ba463540
health HEALTH_OK
monmap e1: 3 mons at {kevin-225=172.17.5.225:6789/0,kevin-227=172.17.5.227:6789/0,kevin-229=172.17.5.229:6789/0}
election epoch 8, quorum 0,1,2 kevin-225,kevin-227,kevin-229
mdsmap e6: 1/1/1 up {0=kevin-228=up:active}, 2 up:standby
osdmap e100: 16 osds: 16 up, 16 in
pgmap v393: 784 pgs, 7 pools, 2178 bytes data, 24 objects
588 MB used, 29713 GB / 29713 GB avail
784 active+clean 12) ceph分布式存储集群总验证
############################################################################
12.1)验证mds节点
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep mds.dn;done -----kevin-222-----
root 11944 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-222 --pid-file /var/run/ceph/mds.kevin-222.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-226-----
root 32348 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-226 --pid-file /var/run/ceph/mds.kevin-226.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-228-----
root 25737 1 0 22:42 ? 00:00:00 /usr/bin/ceph-mds -i kevin-228 --pid-file /var/run/ceph/mds.kevin-228.pid -c /etc/ceph/ceph.conf --cluster ceph-----kevin-229----- 12.2)验证mon节点
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep mon.dn;done
-----kevin-225-----
root 23288 1 0 Jun28 ? 00:00:45 /usr/bin/ceph-mon -i kevin-225 --pid-file /var/run/ceph/mon.kevin-225.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-227-----
root 27966 1 0 Jun28 ? 00:00:23 /usr/bin/ceph-mon -i kevin-227 --pid-file /var/run/ceph/mon.kevin-227.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-229-----
root 27966 1 0 Jun28 ? 00:00:23 /usr/bin/ceph-mon -i kevin-229 --pid-file /var/run/ceph/mon.kevin-229.pid -c /etc/ceph/ceph.conf --cluster ceph 12.3)验证osd节点
[root@kevin-221 ceph]# for ip in $(cat /workspace/ceph/cephlist.txt);do echo -----$ip-----;ssh root@$ip ps -ef|grep osd.dn;done
-----kevin-221-----
root 20962 9646 0 21:48 pts/2 00:00:00 grep osd
root 31595 1 0 15:12 ? 00:01:01 /usr/bin/ceph-osd -i 0 --pid-file /var/run/ceph/osd.0.pid -c /etc/ceph/ceph.conf --cluster ceph
root 32417 1 0 15:12 ? 00:00:59 /usr/bin/ceph-osd -i 1 --pid-file /var/run/ceph/osd.1.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-222-----
root 29591 1 0 19:08 ? 00:00:55 /usr/bin/ceph-osd -i 2 --pid-file /var/run/ceph/osd.2.pid -c /etc/ceph/ceph.conf --cluster ceph
root 30522 1 0 19:09 ? 00:00:58 /usr/bin/ceph-osd -i 3 --pid-file /var/run/ceph/osd.3.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-232-----
root 10461 1 0 19:10 ? 00:01:00 /usr/bin/ceph-osd -i 4 --pid-file /var/run/ceph/osd.4.pid -c /etc/ceph/ceph.conf --cluster ceph
root 11285 1 0 19:10 ? 00:01:03 /usr/bin/ceph-osd -i 5 --pid-file /var/run/ceph/osd.5.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-224----- 暂时停用
-----kevin-225-----
root 11638 1 0 19:10 ? 00:01:09 /usr/bin/ceph-osd -i 6 --pid-file /var/run/ceph/osd.6.pid -c /etc/ceph/ceph.conf --cluster ceph
root 12499 1 0 19:11 ? 00:01:05 /usr/bin/ceph-osd -i 7 --pid-file /var/run/ceph/osd.7.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-226-----
root 23279 1 0 19:11 ? 00:01:10 /usr/bin/ceph-osd -i 8 --pid-file /var/run/ceph/osd.8.pid -c /etc/ceph/ceph.conf --cluster ceph
root 24182 1 0 19:11 ? 00:01:03 /usr/bin/ceph-osd -i 9 --pid-file /var/run/ceph/osd.9.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-227-----
root 29171 1 0 19:12 ? 00:01:00 /usr/bin/ceph-osd -i 10 --pid-file /var/run/ceph/osd.10.pid -c /etc/ceph/ceph.conf --cluster ceph
root 30031 1 0 19:12 ? 00:01:02 /usr/bin/ceph-osd -i 11 --pid-file /var/run/ceph/osd.11.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-228-----
root 19083 1 0 19:12 ? 00:01:09 /usr/bin/ceph-osd -i 12 --pid-file /var/run/ceph/osd.12.pid -c /etc/ceph/ceph.conf --cluster ceph
root 20151 1 0 19:13 ? 00:01:02 /usr/bin/ceph-osd -i 13 --pid-file /var/run/ceph/osd.13.pid -c /etc/ceph/ceph.conf --cluster ceph
-----kevin-229-----
root 7121 1 0 19:13 ? 00:01:02 /usr/bin/ceph-osd -i 14 --pid-file /var/run/ceph/osd.14.pid -c /etc/ceph/ceph.conf --cluster ceph
root 7999 1 0 19:13 ? 00:00:56 /usr/bin/ceph-osd -i 15 --pid-file /var/run/ceph/osd.15.pid -c /etc/ceph/ceph.conf --cluster ceph 12.4)问题排查:
健康状态检查
[root@kevin-221 ceph]# ceph health 有告警信息如下:
HEALTH_WARN too few PGs per OSD (12 < min 30) 解决办法, 需要修改pg_num , pgp_num .
先要获取pool name, 如下, 返回pool name : rbd.
[root@kevin-221 ceph]# ceph osd pool stats
pool rbd id 0
nothing is going on
先改 pg_num 再改 pgp_num ,需要注意, pg_num只能增加, 不能缩小. [root@kevin-221 ceph]# ceph osd pool set rbd pg_num 300
[root@kevin-221 ceph]# ceph osd pool set rbd pgp_num 300 再次验证 ok
[root@kevin-221 ceph]# ceph health
HEALTH_OK 13)扩展集群
############################################################################
13.1)增加一个OSD
在ceph-deloy节点上,准备OSD。
命令格式:"ceph-deploy osd prepare {ceph-node}:/path/to/directory"
[root@kevin-221 ceph]# ceph-deploy osd prepare ceph-node1:/tmp/osd2 最后,激活OSD。
命令格式:"ceph-deploy osd activate {ceph-node}:/path/to/directory"
[root@kevin-221 ceph]# ceph-deploy osd activate ceph-node1:/tmp/osd2 一旦增加新的OSD,Ceph将会迁移已有的放置置到新的OSD上以达到集群的重新平衡,你可通过ceph命令界面观察这个过程。
你将会看到PG状态由活跃且干净状态变成活跃态,其中存在部分降级对象。当迁移完成后,将再次返回活跃且干净状态。(可按Control+c组合键退出)
[root@kevin-221 ceph]# ceph -w 13.2)增加一个mds服务器
为了使用CephFS文件系统,需要至少一台元数据服务器。执行如下步骤以创建一台元数据服务器。
命令格式:"ceph-deploy mds create {ceph-node}"
[root@kevin-221 ceph]# ceph-deploy mds create ceph-node1
注意:当前Ceph产品中仅支持运行一个元数据服务器。你可尝试在一个集群中运行多个元数据服务器,但对此尚无商业支持。 13.3)增加mon节点
一个Ceph存储集群至少需要一台Ceph监视器。为了保证高可用性,Ceph存储集群中通常会运行多个Ceph监视器,任意单台Ceph监视器的宕机都不会影响整个Ceph存储集群正常工作。
由于Ceph使用Paxos算法,这需要多个Ceph监视器组成Quoram(如1,2:3,3:4,3:5,4:6等)。 向ceph集群增加2台Ceph监视器。
命令格式:"ceph-deploy mon create {ceph-node}"
[root@kevin-221 ceph]# ceph-deploy mon create ceph-node2 ceph-node3 当增加Ceph监视器后,Ceph将开始同步各监视器并形成Quoram。可通过如下方式检查Quoram状态:
[root@kevin-221 ceph]# ceph quorum_status
或者
[root@kevin-221 ceph]# ceph quorum_status --format json-pretty [root@kevin-221 ceph]# ceph quorum_status --format json-pretty
{
"election_epoch": 8,
"quorum": [
0,
1,
2
],
"quorum_names": [
"kevin-225",
"kevin-227",
"kevin-229"
],
"quorum_leader_name": "kevin-225",
"monmap": {
"epoch": 1,
"fsid": "c7ee9e13-af6f-475e-80ce-ecb4ba463540",
"modified": "0.000000",
"created": "0.000000",
"mons": [
{
"rank": 0,
"name": "kevin-225",
"addr": "172.17.5.225:6789\/0"
},
{
"rank": 1,
"name": "kevin-227",
"addr": "172.17.5.227:6789\/0"
},
{
"rank": 2,
"name": "kevin-229",
"addr": "172.17.5.229:6789\/0"
}
]
}
}
Ceph分布式存储-运维操作笔记的更多相关文章
- 运维开发笔记整理-Django模型语法
运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...
- 运维开发笔记整理-基于类的视图(CBV)
运维开发笔记整理-基于类的视图(CBV) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.FBV与CBV 1>.什么是FBV FBC(function base views ...
- 兄弟连Linux运维学习笔记
最新经典linux运维兄弟连Linux运维学习笔记... --------------- 全程1.5倍播放.加油我一定可以学完Linux----------------------Unix与Linux ...
- 运维开发笔记整理-django日志配置
运维开发笔记整理-django日志配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Django日志 Django使用python内建的logging模块打印日志,Pytho ...
- 运维开发笔记整理-URL配置
运维开发笔记整理-URL配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.URL路由 对于高质量的Web应用来说,使用简洁,优雅的URL的路由是一个非常值得重视的细节.Dja ...
- 运维开发笔记整理-创建django用户
运维开发笔记整理-创建django用户 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建普通用户 C:\Users\yinzhengjie\softwares\Pycharm ...
- 运维开发笔记整理-QueryDict对象
运维开发笔记整理-QueryDict对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 客户端发送数据请求有很多种,相信运维人员已经很清楚了,如果不太清楚的话可以参考我之前的学习笔 ...
- 运维开发笔记整理-template的使用
运维开发笔记整理-Django的template的使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在上一篇博客中我们学习了HttpResponse 和JsonResponse方 ...
- 运维开发笔记整理-JsonResponse对象
运维开发笔记整理-JsonResponse对象 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用HttpResponse发送json格式的数据 1>.HttpRespo ...
随机推荐
- 高通移植mipi LCD的过程LK代码
lk部分:(实现LCD兼容) 1. 函数定位 aboot_init()来到target_display_init(): 这就是高通原生lk LCD 兼容的关键所在.至于你需要兼容多少LCD 就在whi ...
- zookeeper-01 概述
1. Zookeeper概念简介和应用场景 1.1. 概念简介 Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Z ...
- Visualbox与CentOS 6.4之间鼠标切换
按住键盘右边的Alt键,再按一下(右边)ctrl键,这样可以实现鼠标能在主机与虚拟机之间自由切换.
- golang类型判断
_.ok:=interface{}(a).(B) 此语句用于判断对象a是否是B类型 也可以判断对象a是否实现了B接口 package main import "fmt" type ...
- jQuery-iframe加载完成后触发的事件监听
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 最近遇到一个问题,要写一个后台管理系统的layout,里面content是一个ifra ...
- javascript高级选择器querySelector和querySelectorAll
querySelector 和 querySelectorAll 方法是 W3C Selectors API规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流浏 ...
- fatal error LNK1169: 找到一个或多个多重定义的符号或多个.c/.cpp文件想同时调用定义在.h文件里面的全局变量,防止重定义变量问题。
为什么.h文件中不能定义全局变量? 原因: 存在多次创建变量.如果头文件中可以定义全局变量,那么每个包含该头文件的文件里都会有该全局变量的定义.因为C语言的include是直接将文件嵌入到includ ...
- python基础学习第三天
#变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间#基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中#变量可以指定不同的数据类型,这些变量可以存储整数.小数 ...
- linux mint软件安装
安装linux mint步骤请自行百度,这里略过....下载地址:https://www.linuxmint.com/edition.php?id=246文档下载:https://www.linuxm ...
- 使用systemctl报错(centos 7)
服务器运行210多天,今天使用systemctl准备重启下sshd发现报错,如上图. systemctl restart.stop.status.start等所有操作都报错.原因未知. 在此之前有内存 ...