title: 35.Ceph安装配置 CreateTime: 2019-07-11 00:00:35 UpdateTime: 2019-07-11 00:00:35 CategoryName: cloudnative --- --- title: "35.Ceph安装配置" date: 2019-07-11T00:00:35+08:00 draft: false tags: ["ceph"] categories: ["cloudnative"] author: "springrain" --- **CentOS7.6,内核5.1.15(最新),Ceph 14.2.1** ## 参考资料 http://docs.ceph.com/docs/master/ http://docs.ceph.org.cn/ https://blog.csdn.net/wylfengyujiancheng/article/details/78461801 http://www.cnblogs.com/luohaixian/p/8087591.html https://www.jianshu.com/p/c22ff79c4452 https://blog.csdn.net/dengxiafubi/article/details/72957402 https://q.cnblogs.com/q/75797 https://blog.csdn.net/reblue520/article/details/52039353 http://www.d-kai.me/ceph%E7%A7%91%E6%99%AE/ https://blog.csdn.net/signmem/article/details/78602374 http://www.cnblogs.com/royaljames/p/9807532.html https://cloud.tencent.com/developer/article/1177975 http://blog.51niux.com/?id=161 ## 核心组件 Ceph的核心组件包括Ceph OSD.Ceph Monitor和Ceph MDS. Ceph OSD:OSD的英文全称是Object Storage Device,它的主要功能是存储数据.复制数据.平衡数据.恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor.一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD. 伴随OSD的还有一个概念叫做Journal盘,一般写数据到Ceph集群时,先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中.一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载. Ceph Monitor:负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map.Monitor Map.PG Map和CRUSH Map,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员.关系.属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和Object id等计算出数据最终存储的位置. Ceph MDS:全称是Ceph MetaData Server,主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的. 查看各种Map的信息可以通过如下命令:ceph osd(mon.pg) ![](/public/35/image1.png) 从架构图中可以看到最底层的是RADOS,RADOS自身是一个完整的分布式对象存储系统,它具有可靠.智能.分布式等特性,Ceph的高可靠.高可拓展.高性能.高自动化都是由这一层来提供的,用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心. RADOS系统主要由两部分组成,分别是OSD和Monitor. 基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C.C++.Python等. 基于LIBRADOS层开发的又可以看到有三层,分别是RADOSGW.RBD和CEPH FS. RADOSGW:RADOSGW是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift. RBD:RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备. CEPH FS:CEPH FS通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统. ## 数据分布算法 使用CRUSH分布式算法计算文件存储的位置,不使用传统的记录查找,自动扩容纠错. 存储数据与Object的关系:当用户要将数据存储到Ceph集群时,存储数据都会被分割成多个Object,每个Object都有一个Object id,每个Object的大小是可以设置的,默认是4MB,Object可以看成是Ceph存储的最小存储单元. Object与pg的关系:由于Object的数量很多,所以Ceph引入了pg的概念用于管理Object,每个Object最后都会通过CRUSH计算映射到某个pg中,一个pg可以包含多个Object. pg与osd的关系:pg也需要通过CRUSH计算映射到osd中去存储,如果是二副本的,则每个pg都会映射到二个osd,比如[osd.1,osd.2],那么osd.1是存放该pg的主副本,osd.2是存放该pg的从副本,保证了数据的冗余. pg和pgp的关系:pg是用来存放Object的,pgp相当于是pg存放osd的一种排列组合,我举个例子,比如有3个osd,osd.1.osd.2和osd.3,副本数是2,如果pgp的数目为1,那么pg存放的osd组合就只有一种,可能是[osd.1,osd.2],那么所有的pg主从副本分别存放到osd.1和osd.2,如果pgp设为2,那么其osd组合可以两种,可能是[osd.1,osd.2]和[osd.1,osd.3] pg和pool的关系:pool也是一个逻辑存储概念,我们创建存储池pool的时候,都需要指定pg和pgp的数量,逻辑上来说pg是属于某个存储池的,就有点像Object是属于某个pg的. 以下这个图表明了存储数据,Object.pg.pool.osd.存储磁盘的关系 ![](/public/35/image2.png)  本质上CRUSH算法是根据存储设备的权重来计算数据对象的分布的,权重的设计可以根据该磁盘的容量和读写速度来设置,比如根据容量大小可以将1T的硬盘设备权重设为1,2T的就设为2,在计算过程中,CRUSH是根据Cluster Map.数据分布策略和一个随机数共同决定数组最终的存储位置的. Cluster Map里的内容信息包括存储集群中可用的存储资源及其相互之间的空间层次关系,比如集群中有多少个支架,每个支架中有多少个服务器,每个服务器有多少块磁盘用以OSD等. 数据分布策略是指可以通过Ceph管理者通过配置信息指定数据分布的一些特点,比如管理者配置的故障域是Host,也就意味着当有一台Host起不来时,数据能够不丢失,CRUSH可以通过将每个pg的主从副本分别存放在不同Host的OSD上即可达到,不单单可以指定Host,还可以指定机架等故障域,除了故障域,还有选择数据冗余的方式,比如副本数或纠删码. 下面这个式子简单的表明CRUSH的计算表达式: CRUSH(X)  -> (osd.1,osd.2.....osd.n) 式子中的X就是一个随机数. 下面通过一个计算PG ID的示例来看CRUSH的一个计算过程: 1. Client输入Pool ID和Object ID 2. Ceph(Crush) 对 Object ID 做哈希 3. Ceph(Crush) 对该 hash 值取 PG 总数的模,得到 PG 编号(比如 58)(第2和第3步基本保证了一个Pool的所有 PG 将会被均匀地使用) 4. Ceph(Crush) 对Pool ID 取 hash (比如"liverpool" = 4) 5. Ceph(Crush) 将Pool ID 和 PG ID 组合在一起(比如 4.58)得到 PG 的完整ID. 6. 也就是:PG-id = hash(Pool-id). hash(Objet-id) % PG-number ![](/public/35/image3.png) ## 环境预检 http://docs.ceph.org.cn/start/quick-start-preflight http://docs.ceph.com/docs/master/start/quick-start-preflight/ 文档统一都是依英文为准,中文文档只是参考. ### 增加ceph的yum源 /etc/yum.repos.d/ceph.repo ``` [Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7/$basearch enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc priority=1 [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7/noarch enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc priority=1 [ceph-source] name=Ceph source packages baseurl=https://mirrors.huaweicloud.com/ceph/rpm-nautilus/el7/SRPMS enabled=1 gpgcheck=0 type=rpm-md gpgkey=https://mirrors.huaweicloud.com/ceph/keys/release.asc priority=1 ``` ###在各节点上安装启用软件仓库,启用可选软件库### ```shell sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm #修改repo文件 /etc/yum.repos.d/ceph.repo yum clean all yum install -y ceph-deploy ``` ### 安装NTP [参考07.CentOS配置优化](/public/post/07-centos-config/) ### 修改host文件 修改 /etc/hosts,每台服务器都配置别名 ``` 10.0.67.15 node1 10.0.67.19 node2 10.0.67.21 node3 ``` 名字一般可以用机器的hostname,但是不要用FQDN(也就是全域名,比如有些机器的全域名是node1.example.com).这时候hostname -s得到的是node1.建议主机名不包含域,例如设置成node1 ### 安装SSH服务器 yum install openssh-server ### 创建免密码登陆账号 ###在各 Ceph 节点创建新用户### ```shell useradd -d /home/cephuser -m cephuser passwd cephuser ###KFXUXBIFSD8FDOCIi9zKC## ###确保各 Ceph 节点上新创建的用户都有 sudo 权限### echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser sudo chmod 0440 /etc/sudoers.d/cephuser ``` 修改 ceph-deploy 管理节点上的 ~/.ssh/config 文件,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了,而无需每次执行 ceph-deploy 都要指定 --username {username} .这样做同时也简化了 ssh 和 scp 的用法.把 {username} 替换成你创建的用户名. ``` Host node1 Hostname node1 User cephuser Host node2 Hostname node2 User cephuser Host node3 Hostname node3 User cephuser ``` **完成所有的配置之后,可以在其他节点上也安装ceph-deploy,把/root/.ssh,/data/my-cluster整体拷贝到备用机,避免管理机器宕机** ### 关闭防火墙 ``` systemctl stop firewalld systemctl disable firewalld #或者要对公共域开放 Ceph Monitors 使用的 6789 端口和 OSD 使用的6800:7300 端口范围,并且要配置为永久规则,这样重启后规则仍有效 sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent sudo firewall-cmd --zone=public --add-service=ceph --permanent ``` ### 关闭SELINUX [参考07.CentOS配置优化](/public/post/07-centos-config/) ## ceph-deploy集群快速安装 用 ceph-deploy 从管理节点建立一个Ceph存储集群,该集群包含三个节点,以此探索 Ceph 的功能. ![](/public/35/image5.png) 我们创建一个 Ceph 存储集群,它有一个 Monitor 和两个OSD守护进程.一旦集群达到active+clean状态,再扩展它:增加OSD增加元数据服务器和两个Ceph Monitors.为获得最佳体验,先在管理节点上创建一个目录,用于保存ceph-deploy生成的配置文件和密钥对. ```shell mkdir my-cluster cd my-cluster ``` ceph-deploy会把文件输出到当前目录,必须在my-cluster目录下行执行命令 如果你是用另一普通用户登录的,不要用sudo或在root身份运行ceph-deploy,因为它不会在远程主机上调用所需的sudo命令. ### 清空集群数据 如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置: ```shell ceph-deploy purge node1 node2 node3 ceph-deploy purgedata node1 node2 node3 ceph-deploy forgetkeys rm -rf ceph* ``` 重新安装之后,ceph.repo最好重新创建一下. 已经挂载的osd硬盘,ceph做了multipath(多路径),会出现/dev/vda4无法使用的情况,没有映射,也没有挂载,需要dmsetup remove 参考:https://blog.csdn.net/reblue520/article/details/52039353 ###清除掉磁盘的GPT信息#### ```shell sgdisk --zap-all /dev/vda4 ll /dev/mapper/ dmsetup remove /dev/mapper/ceph--xxxxxx ``` ### 创建集群 ceph的配置文件默认在/etc/ceph目录下 ```shell ###在默认的监控节点(mon)创建集群,并指定网络域,就是ceph服务器的ip网段### ceph-deploy new node1 --public-network 10.0.67.0/24 ###在所有节点上安装ceph### ceph-deploy install node1 node2 node3 ##初始化监控节点### ceph-deploy mon create-initial ###在默认的mon节点上启动mgr### ceph-deploy mgr create node1 ###把配置文件和client.admin推送到其他节点### ceph-deploy admin node1 node2 node3 ###创建 osd ,osd映射到磁盘或者分区### ceph-deploy osd create --data /dev/vda4 node1 ceph-deploy osd create --data /dev/vda4 node2 ceph-deploy osd create --data /dev/vda4 node3 ###如果要使用cephfs,需要至少一个MDS服务实例### ceph-deploy mds create node1 ceph-deploy mds create node2 ceph-deploy mds create node3 ###增加监控节点#### ceph-deploy mon add node2 ceph-deploy mon add node3 ###增加和mon服务对应的mgr服务节点### ceph-deploy mgr create node2 ceph-deploy mgr create node3 ###若是出现异常,检查ecph.conf的public_network,一般是这个问题### ###推送配置文件#### #ceph-deploy --overwrite-conf config push node1 node2 node3 #ceph-deploy admin node1 node2 node3 ###检查集群健康状态### ceph health ###查看异常原因,detail也可以用在其他命令### ceph health detail ceph osd pool ls detail ###集群状态### ceph -s ###集群状态实时监控### ceph -w ###查看osd的树信息### ceph osd tree ###查看osd磁盘信息### ceph osd df ###查看mds### ceph mds stat ###查看各种Map的信息可以通过如下命令:ceph osd(mon/pg) dump ###查看集群mon节点状态### ceph quorum_status --format json-pretty ``` ### 创建pool Pool 对应 PG PGP数量的计算公式:[官方计算公式说明](http://ceph.com/pgcalc/) pg数量 = ((OSD数量 * 100) / 副本数量) / pool_count 向上取2的幂数 通常在创建pool之前,需要覆盖默认的pg_num,官方推荐:若少于5个OSD,设置pg_num为128. 5~10个OSD,设置pg_num为512. 10~50个OSD,设置pg_num为4096. 超过50个OSD,可以参考[pgcalc](http://ceph.com/pgcalc/)计算 pool默认的副本数量是3,我们可以自己控制副本的数量,可以在任何时候更改这个参数: 语法格式: ceph osd pool set {Pool-name} size {num} 例如: ceph osd pool set cephpool size 2 修改pool的pg数量 语法格式: ceph osd pool set {Pool-name} pg_num {num} 语法格式: ceph osd pool set {Pool-name} pgp_num {num} #ceph osd pool set cephpool pg_num 128 #ceph osd pool set cephpool pgp_num 128 ###nautilus版本支持自动扩容pg http://docs.ceph.com/docs/nautilus/rados/operations/placement-groups/ ceph osd pool set pg_autoscale_mode ceph osd pool set cephpool pg_autoscale_mode on ####设置全局的默认开启,或者在ceph.conf配置#### ceph config set global osd_pool_default_pg_autoscale_mode on ###查看pg自动扩容状态#### ceph osd pool autoscale-status ###由m版本升级到n版本出现的异常### Error EPERM: nautilus OSDs are required to decrease https://www.mail-archive.com/ceph-users@lists.ceph.com/msg53756.html ###把osd的最小版本号设置为nautilus### ceph osd require-osd-release nautilus ###然后再设置### ceph osd pool set cephpool pg_autoscale_mode on pool也支持snapshot功能.可以运行ceph osd pool mksnap命令创建pool的快照,并且在必要的时候恢复它.还可以设置pool的拥有者属性,从而进行访问控制. ###创建ceph pool的命令如下,它的参数包括pool名字.PG和PGP的数量:### #ceph osd pool create cephpool 128 128 ###自动扩容pg### ceph osd pool create cephpool ###查看pool### ceph osd lspools ### 修改ceph.conf默认配置 ``` [global] ###默认2副本### osd_pool_default_size = 2 ###最少1个副本在线### osd_pool_default_min_size = 1 ###默认pg数量### #osd_pool_default_pg_num = 32 #osd_pool_default_pgp_num = 32 ###默认自动扩容pg### osd_pool_default_pg_autoscale_mode = on ###每个osd最大的pg数量 mon_max_pg_per_osd=512 ##osd的硬盘使用85%告警,95%不再写入### mon_osd_full_ratio = .95 mon_osd_nearfull_ratio = .85 ### OSD的配置 ### [osd] ### scrub是保证ceph数据一致性的机制,Scrub的开始结束时间,一般是闲时### osd_scrub_begin_hour=2 osd_scrub_end_hour=5 ###MON的配置### [mon] ###允许删除pool### mon_allow_pool_delete = true ``` ```shell ######ceph-deploy推送配置文件###### ceph-deploy --overwrite-conf config push node1 node2 node3 ``` ### 测试Pool ```shell rados put {Object-name} {file-path} --pool=cephpool rados put test-Object-1 a.txt --pool=cephpool ###确认Ceph存储集群存储了此对象### rados -p cephpool ls ###定位对象### ceph osd map {pool-name} {Object-name} ceph osd map cephpool test-Object-1 #会显示对象所在的pg和osd ###删除对象### rados rm test-Object-1 --pool=cephpool ##然后调用配置分发,然后手动重启mon### systemctl restart ceph-mon@node1 ceph osd pool rm cephpool cephpool --yes-i-really-really-mean-it ``` 随着集群的运行,对象位置可能会动态改变, Ceph有动态均衡机制,无需手动干预即可完成. ### 常见问题 ceph的空间使用开始并不准确,数据越多,越接近理论值. 图中是2副本.文件越大,越接近2倍,ceph本身消耗了一部分空间 ![](/public/35/image6.jpeg) ![](/public/35/image7.jpeg) ## 升级 ```shell ###先升级ceph-deploy工具### yum install ceph-deploy python-pushy ###小版本升级 yum update ceph #### ###设置noout,防止升级过程中数据重平衡,升级完成后取消设置即可### ###set是集群参数,任意一个节点设置就行### ceph osd set noout ###升级ceph版本### #ceph-deploy install --release {release-name} ceph-node1[ceph-node2] ceph-deploy install --release nautilus node1 node2 node3 ###取消noout设置### ceph osd unset noout ###重启### #依次重启服务器,省的麻烦...... #重启前一定要确保集群属于健康状态. ###查看状态### ceph --version ceph -s ceph mon stat ``` ## Ceph块存储 ### 创建rbd image ```shell ###创建块存储池### ceph osd pool create cephrbdpool 32 ###若是提示application不可用,手动生效### #ceph osd pool application enable cephrbdpool rbd ###先创建一个映像### ##映像只有写入数据时它们才会占用物理空间. --size选项设置最大容量.## #rbd create --size {megabytes} {pool-name}/{image-name} rbd create --size 1024 cephrbdpool/rbdredis ###查看存储池中的块设备### #rbd ls {poolname} rbd ls cephrbdpool ###检索映像信息### #rbd info {pool-name}/{image-name} rbd info cephrbdpool/rbdredis ###调整块设备大小### rbd resize --size 2048 cephrbdpool/rbdredis ##增加## rbd resize --size 2048 cephrbdpool/rbdredis --allow-shrink ##减少## ###删除### #rbd rm {pool-name}/{image-name} rbd rm cephrbdpool/rbdredis ``` ### 内核挂载 https://blog.csdn.net/aixiaoyang168/article/details/78999851 http://www.xuxiaopang.com/2017/08/23/easy-ceph-CephX/ ###创建用户### ```shell ceph auth get-or-create client.rbdredis mon 'allow r' osd 'allow rwx pool=cephrbdpool' -o /etc/ceph/ceph.client.rbdredis.keyring ``` 注意:如果为用户提供OSD功能,但不限制对特定池,则用户将可以访问群集中的所有池! ```shell ###内核支持情况### rbd device map cephrbdpool/rbdredis ``` ![](/public/35/image8.jpeg) ```shell #有些功能内核并不支持,根据提示执行禁用命令 rbd feature disable cephrbdpool/rbdredis object-map fast-diff deep-flatten ###映像名映射为内核模块.必须指定映像名.存储池名.和用户名,rbd命令会自动加载内核模块.### rbd device map {pool-name}/{image-name} --id {user-name} ###固定用户的权限进行挂载,成功返回本机挂载点### rbd device map cephrbdpool/rbdredis --id rbdredis --keyring /etc/ceph/ceph.client.rbdredis.keyring ``` ![](/public/35/image9.jpeg) ```shell ###查看挂载列表### rbd device list ###卸载挂载### #rbd device unmap /dev/rbd/{poolname}/{imagename} rbd device unmap /dev/rbd/cephrbdpool/rbdredis ``` ### 快照 http://docs.ceph.org.cn/rbd/rbd-snapshot/ 如果在做快照时映像仍在进行I/O操作,快照可能就获取不到该映像准确的或最新的数据,并且该快照可能不得不被克隆到一个新的可挂载的映像中.所以,我们建议在做快照前先停止I/O操作.如果映像内包含文件系统,在做快照前请确保文件系统处于一致的状态.要停止I/O操作可以使用fsfreeze命令.详情可参考fsfreeze(8)手册页.对于虚拟机,qemu-guest-agent被用来在做快照时自动冻结文件系统. ```shell ###创建快照,要指定snap create 选项.存储池名和映像名### #rbd snap create {pool-name}/{image-name}@{snap-name} rbd snap create cephrbdpool/rbdredis@snap0001 ###查看快照### #rbd snap ls {pool-name}/{image-name} rbd snap ls cephrbdpool/rbdredis ###回滚快照### #rbd snap rollback {pool-name}/{image-name}@{snap-name} rbd snap rollback cephrbdpool/rbdredis@snap0001 ###删除快照### #rbd snap rm {pool-name}/{image-name}@{snap-name} rbd snap rm cephrbdpool/rbdredis@snap0001 ###清除快照,清除映像的所有快照### #rbd snap purge {pool-name}/{image-name} rbd snap purge cephrbdpool/rbdredis ###分层的父子快照,自己看吧,懒得写了### ``` ## CephFS ### 创建cephfs ```shell ###创建文件系统需要的pool### ceph osd pool create cephfs_data 128 ceph osd pool create cephfs_metadata 128 ceph fs new cephfs cephfs_metadata cephfs_data ###查看### ceph fs ls ###设置cephfs最大空间,一般不用设置,也可以在pool上设置#### #ceph fs set cephfs max_file_size 9999999999999 ``` ### 创建密钥文件 Ceph 存储集群默认启用认证,你应该有个包含密钥的配置文件(但不是密钥环本身).用下述方法获取某一用户的密钥: 1. 在密钥环文件中找到与某用户对应的密钥,例如: cat ceph.client.admin.keyring 2. 找到用于挂载 Ceph 文件系统的用户,复制其密钥.大概看起来如下所示: [client.admin] key = AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w== 3. 打开文本编辑器,在/etc/ceph目录创建文件 4. 把密钥粘帖进去,大概像这样: AQCj2YpRiAe6CxAA7/ETt7Hcl9IyxyYciVs47w== 5. 保存文件,并把其用户名 name 作为一个属性(如admin.secret) 6. 确保此文件对用户有合适的权限,但对其他用户不可见. ### 挂载 ```shell mkdir /mnt/mycephfs ### mount -t ceph {ip-address-of-monitor}:6789:/ /mnt/mycephfs /usr/bin/mount -t ceph node1:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret #也可以挂载多个mon节点 /usr/bin/mount -t ceph node1,node2,node3:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret #其他节点安装 ceph-deploy install node2 #创建相同内容的admin.secret 文件,然后挂载 ###开机挂载需要确保有mds服务在线,使用/etc/rc.d/rc.local,不建议使用/etc/fstab挂载,风险太高了! ###/etc/fstab### node1,node2,node3:6789:/ /mnt/mycephfs ceph name=admin,secretfile=/etc/ceph/admin.secret,noatime,_netdev 0 2 ###/etc/rc.d/rc.local### /usr/bin/mount -t ceph node1,node2,node3:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret ``` ### 用户目录隔离 参考资料:http://docs.ceph.com/docs/nautilus/cephfs/client-auth/ 查看所有用户:ceph auth ls 下面这个命令创建了shop用户,这个用户只能访问目录/shop,数据存储在cephfs中,第一次挂载,需要提前在cephfs中创建好shop层级的目录,例如先把cephfs挂载到/mnt/mycephfs,然后 ```shell mkdir /mnt/mycephfs/shop #ceph fs authorize cephfs client.shop / r /shop rw ceph fs authorize cephfs client.shop /shop rw #命令会返回用户的加密key,和上面的admin类似,创建一个文件保存,用于挂载 mkdir /mnt/shop /usr/bin/mount -t ceph node1,node2,node3:6789:/shop /mnt/shop -o name=shop,secretfile=/etc/ceph/shop.secret #设置目录配额大小:http://docs.ceph.com/docs/master/cephfs/quota/ #安装 attr 组件 yum install attr ###设置根目录最多100M大小### setfattr -n ceph.quota.max_bytes -v 100000000 /mnt/mycephfs ###设置根目录最多10000个文件### ceph.quota.max_files -v 10000 /mnt/mycephfs ###跟单独的文件夹加设置权限,需要是挂载的根目录的完整路径#### #例如: /mnt/mycephfs/shop 是个单独用户的子目录,挂载到了/mnt/shop上 setfattr -n ceph.quota.max_bytes -v 100000000 /mnt/shop #这样是不行的 #需要是: setfattr -n ceph.quota.max_bytes -v 100000000 /mnt/mycephfs/shop #这样,就是改在到其他目录.例如/mnt/shop,大小也是固定的. ``` ### 快照 #### Cephfs的快照 cephfs的快照和恢复: http://docs.ceph.com/docs/master/dev/cephfs-snapshots/ ```shell ###设置启用快照### ceph fs set allow_new_snaps true ceph fs set cephfs allow_new_snaps true #创建快照很简单,在需要做快照的目录下面执行 mkdir .snap/snapname 后面接快照的名称 #例如给 /mnt/mycephfs 做快照 cd /mnt/mycephfs mkdir .snap/mysnap001 ###删除/mnt/mycephfs下的一个文件### rm -rf a.txt ###恢复快照### cp -ra .snap/mysnap001/* ./ .snap/mysnap001 目录下保存了完整的文件,也可以单独复制一个 cp -ra .snap/mysnap001/a.txt ./ ###删除快照### rmdir .snap/mysnap001 ###du -sh ./ 不能看到快照的占用的空间,ceph osd df 可以看到总容量### ``` #### Pool的快照(待完善) ```shell ###创建快照### #rados mksnap snap_cephfs_metadata_001 -p cephfs_metadata ceph osd pool mksnap cephfs_metadata snap_cephfs_metadata_001 ceph osd pool mksnap cephfs_data snap_cephfs_data_001 ``` ![](/public/35/image10.png) ```shell ###查看快照### #rados lssnap -p cephfs_metadata ###删除快照### ceph osd pool rmsnap cephfs_metadata snap_cephfs_metadata_001 ###恢复快照### rados rollback -p cephfs_metadata snap_cephfs_metadata_001 ``` ### 更换osd服务器 ##查看osd状态### ceph osd tree ![](/public/35/image11.jpeg) ```shell ###osd.0权重逐渐降低到0,数据慢慢迁移#### ceph osd crush reweight osd.0 0 ###标记为out### ceph osd out osd.0 ###标记为down### ceph osd down osd.0 ###从crush中移除节点### ceph osd crush rm osd.0 ###删除节点### ceph osd rm osd.0 ###删除节点认证,不删除编号会占住### ceph auth del osd.0 ``` ![](/public/35/image12.jpeg) 显示只有两个osd了,证明删除成功了,如果无法删除,可以先执行下面的清理操作,然后再ceph osd rm osd.0 下面新建osd ```shell ###清除掉磁盘的GPT信息#### sgdisk --zap-all /dev/vda4 dmsetup remove /dev/mapper/ceph--xxxxxx ###如果一直无法删除osd.0,可以在这里执行ceph osd rm osd.0### ###创建新的osd### ceph-deploy osd create --data /dev/vda4 node1 ####删除mon### ceph-deploy mon destroy node1 ##清除其他组件(mds,mgr)### ceph-deploy purge node1 ``` ## Ceph对象存储 ## mgr提供的Dashbroad ```shell ###启用### ceph mgr module enable dashboard ###禁用### ceph mgr module disable dashboard ###创建SSL证书,使用HTTP协议会报错### ceph dashboard create-self-signed-cert openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 36500 -keyout dashboard.key -out dashboard.crt -extensions v3_ca ###配置证书### ceph config-key set mgr/dashboard/crt -i dashboard.crt ceph config-key set mgr/dashboard/key -i dashboard.key ###配置IP和端口### ceph config set mgr mgr/dashboard/node1/server_addr 10.0.67.15 ceph config set mgr mgr/dashboard/node1/server_port 7000 ###创建登陆的用户名密码### ceph dashboard set-login-credentials testuser testpwd ###重启mgr服务,如果出现错误就按照提示重启一次### systemctl restart ceph-mgr@node1 ###查看所有的配置#### ceph config-key dump ###删除指定的key### ceph config-key rm mgr/dashboard/server_addr  ###查看mgr监听的端口#### netstat -tunlp|grep 7000 ```