集群配置以及用户授权
配置
使用cephadm安装完成ceph之后,会在/etc/ceph目录中自动生成ceph的配置文件ceph.conf,采用ini file格式,使用#或者;对配置进行注释
- global 全局配置,对所有的服务和客户端有效,优先级最低
- mon mgr osd等都是ceph相关组件的配置
配置修改
#ceph配置修改和查看
ceph config set
ceph config ls
ceph的集中配置管理数据库默认存放在每个MON节点的/var/lib/ceph/host/store.db中,该数据库由mon节点负责维护。
数据库的容量会随着时间增大,可以使用命令ceph config set mon mon_compact_on_start true使得mon每次启动后对其进行压缩
网络配置举例
生产环境中,ceph需要两个网络平面来承载,公共网络和集群网络,前者用于客户端访问ceph提供的存储资源,后者是后端网络,用于ceph组件之间的交互,数据复制。
#将集群public network 设置为172.16.0.0/24网段,cluster network 设置为
#192.168.1.0/24
#使用命令ceph config set修改
ceph config get mon public_network
ceph config set mon cluster_network 172.16.0.0/24
ceph认证
ceph认证授权的使用场景分为:
1、客户端接入ceph资源池
2、ceph集群组件之间交互
默认是使用cephx协议进行认证授权,在进行ceph访问的时候,需要指定用户和keying
认证流程
1、clinet像mon发起创建用户的请求,mon会产生对应的密钥并将密钥返回给clinet
2、mon同时将生产的密钥分享给MDS和osd
3、发起认证请求,合法时,MON产生sesion key,并使用密钥加密,返回给客户端
4、客户端收到session key进行解密,并向MON申请session 的ticket,返回给客户端
5、客户端使用ticket与mds和osd进行交互
用户
cephx协议格式是id的格式,分为两大类
1、客户端
2、服务进程
ceph auth ls
#指定用户
cehp -s --id admin --keying /etc/ceph/ceph.keying
#创建用户
ceph auth add
ceph auth get-or-create
ceph auth get-or-create-key
#用户授权
#允许用户对mon进行读写和执行
ceph auth add clinet test mon "allow rwx"
#用户常用命令
#查看所有用户
ceph auth ls
#查看相信信息
ceph auth get
#获取key
ceph auth print-key
#删除用户
ceph auth del
#用户备份
ceph auth get
#导入用户
ceph auth import -i
对象存储以及网关站点部署
对象存储
对象存储是一个基于对象的海量存储服务,为用户提供海量,安全,高可用,低成本的数据存储能力,对象是osd中的数据存储的基本单位,一个对象实际上是一个文件的数据与其相关的属性信息的集合体,包括key,metadata,data三部分。
- key 键值,对象的名称
- metadata 元数据,对象的描述信息
- data 实际数据
桶 bucket,是obs中对象存储的容器,对象存储提供了基于桶和对象的扁平化存储方式,桶中所有的对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构
每个桶都有自己的存储类别,访问权限,所属区域等属性,用户可以在不同的区域创建不通的存储列别和访问权限的桶,并配置更多高级属性来满足不同场景的存储场景
对象存储网关
ceph的对象存储服务可直接开发应用调用rados实现,也可以通过rgw (rados gateway)实现,rgw是建立librados上一个对象存储接口,它为应用访问ceph存储集群提供了restful网关,当前支持两种接口s3,swift
在rgw中,realm是一个全局的,独一无二的,由zonegroup组成命名空间,每个realm都有对应的period,在进行配置修改的时候,需要更新并提交period,使得配置生效。
zone,是由一个或者多个rgw实例组成的逻辑概念,zone的配置保存在period中,多个zone可以组成zonegroup,用于多站点服务
当创建对象存储网关后,系统会自动生成数个资源池,分别是
rgw.root,rgw.log,rgw.control ,rgw.meta,rgw.buckets.index,buckets.data,rg等
对象存储网关操作
#创建realm
radosgw-admin realm create --rgw-realm=for_swift --default
#创建zonegroup
radosgw-admin zonegroup create --rgw-realm=for_swift \
--rgw-zonegroup=for_swift --master --default
#创建zone
radosgw-admin zone create --rgw-realm=for_swift \
--rgw-zonegroup=for_swift --rgw-zone=for_swift --master --default
#确认配置生效
radosgw-admin period update --rgw-realm=for_swift --commit
#创建rgw,并和已经创建的for_swift进行关联,数量为2
ceph orch apply rgw for_swift --realm=for_swift --zone=for_swift \
--placement="2" --port=8080
#创建用户
radosgw-admin user create --uid=swift --display-name=swift
#创建子账号swift_rgw
radosgw-admin subusr create --uid=swift --subuser=swift:swift_rgw \
-- access=full
#生成key
radosgw-admin key create --subuser=swfit:swift_rgw \
--key-type=swfit --gen-secret
块存储RBD和文件存储cephFS
ceph的块存储
基于rados构建,经过精简配置,大小调整后,在多个osd上实现存储的条带化,可以实现快照,复制和存储的强一致性。
应用访问块存储通过两种方式实现
- librdb用户接口,libardos.so库作为客户端连接rados集群
- krbd内核接口,通过rdb命令将块设备映射为主机设备,可以挂载到指定目录
创建块存储并挂载给客户端
#创建rbd资源池
ceph osd pool create block
ceph osd pool application enable block rbd
#创建rbd设备
rbd create --size 3G block/rbd1
rbd create --size 5G block/rbd2
#查看rbd信息
rpd info block/rbd1
rpd info block/rdb2
#创建用户
ceph auth add client.block mon 'allow r' osd 'allow rwx pool=block'
#检查用户
ceph auth get cleient.block
#将用户block的keying文件导出为ceph.clien.block.keyring
ceph auth get client.block -o ceph.client.block.keyring
#发送给客户端
scp ceph.client.block.keyring root@192.168.1.14:/etc/ceph/
#客户端挂载
yum install -y ceph
rbd map block/rdb1 --name client.block
rbd map block/rdb2 --name client.block
#检查客户端挂载情况
lsblk
#客户端格式化并挂载
mkdir -p /mnt/rbd{1,2}
mkfs.xfs /dev/rbd0
mkfs.xfx /dev/rbd1
mount /dev/rbd0 /mnt/rbd1
mount /dev/rbd0 /mnt/rbd2
#设置为自动挂载
#vim /etc/fstab
/dev/rdb/block/rbd1 /mnt/rbd1 xfs defaults,_netdev 0 0
/dev/rdb/block/rbd1 /mnt/rbd1 xfs defaults,_netdev 0 0
#编辑/etc/ceph/rdbmap,
block/rdb1 id=block,keyring=/etc/ceph/ceph.client.block.keyring
block/rdb2 id=block,keyring=/etc/ceph/ceph.client.block.keyring
#设置开机启动
systemctl enable rdbmap
RBD设置扩容
#rbd1 扩容到5G
rbd --pool block resize rbd1 --size 5G
rbd --pool block du rbd1
#客户端扩容
xfs.growfs /dev/rbd0
RBD快照管理
#创建快照
rbd snap create block/rbd2@snap1
#回滚快照
rbd snap rollback block/rbd2@snap1
#设置快照为保护模式
rbd snap protect block/rbd2@snap1
#创建snap1的克隆卷rbd3
rbd clone block/rbd2@snap1 block/rbd3
#将克隆卷转换为rbd设备
rbd flatten block/rbd3
#客户端重新映射
rbd map block/rbd3 --name client.block
CephFS
cephfs 文件系统是基于ceph分布式存储RADOS构架的兼容posix的文件系统,它需要运行在集群中运行MDS服务,其守护进程为ceph-mds,用于管理cephfs中所存储的文件的元数据,以及协调对ceph集群的访问,并且通过ceph-mds将元数据与数据分开,可以降低复杂性并提高可靠性。
原理
MDS管理CephFS客户端的元数据,ceph-mds为客户接入提供相关信息,如文件在文件系统结构中的具体位置等。
MDS还管理着目录结构以及文件的元数据,如所属用户,时间戳,权限等,还负责响应缓存的接入和管理,来维护缓存一致性。
MDS有两个状态,活动,负责元数据管理,备用,当前MDS无法响应的时候状态,
CephFS在访问数据的时候,会有通过MON的验证,并获取到集群映射信息,然后从MDS请求到相关的元数据,并通过请求到的元数据直接与OSD进行通信
cephfs配置
#创建资源池
#创建两个资源池,一个是数据池,一个是元数据池
ceph osd pool create metadata_cephfs
ceph osd pool create data_cephfs
#资源池格式化
ceph fs new fs01 metadata_cephfs data_cephfs
#部署mds
ceph orch apply mds fs01 --placement="2"
#查看mds的状态
ceph orch ls
#创建用户,对fs01有读写权限
ceph fs authorize fs01 client.user01 /rwps -o ceph.user01.keyring
#确认用户
ceph auth ls | grep -A 4 user
#客户端挂载
#拷贝user01 keying到客户端
scp ceph.client.user01.keyring root@1921.168.1.1:/etc/ceph
#创建认证文件,user.txt,将用户信息保存
echo "*************"> user.txt
#修改客户端/etc/fstab
192.168.0.22:6789,192.168.0.23:6789 \
/mnt/cephfs ceph defaults,_netdev,name=user01,seretfile=\
/root/user.txt 0 0