一、ceph部署
组件
osd:用于存储数据,检测其他osd心跳,向monitor提供监控信息
Monitor:维护展示集群状态的各种图表
Mds:元数据服务器,为ceph文件系统存储元数据
其他:
PG(归属组)、monmap、pgmap、fsmap、osdmap
环境
172.16.1.194 admin/osd/mon
172.16.1.193 osd/mds
172.16.1.191 osd/mds
步骤
- 所有节点关闭防火墙,selinux,部署时间同步服务器
- Monitor配置免密登录其他节点,三个节点配置hosts
[root@ceph1 ~]#ssh-keygen
[root@ceph1 ~]#ssh-copy-id root@172.16.1.194
[root@ceph1 ~]#ssh-copy-id root@172.16.1.193
[root@ceph1 ~]#ssh-copy-id root@172.16.1.191
- osd节点上新添加一块硬盘,分区格式化挂载,分别挂载到/var/local/osd{0,1,2},然后monitor节点安装ceph-deploy工具,每个节点配置yum源
[root@ceph1 ~]# mkfs.xfs /dev/sdb
[root@ceph1 ~]# mkdir -p /var/local/osd0
[root@ceph1 ~]# mount /dev/sdb /var/local/osd0/
[root@ceph2 ~]# mkfs.xfs /dev/sdb
[root@ceph2 ~]# mkdir -p /var/local/osd1
[root@ceph2 ~]# mount /dev/sdb /var/local/osd1/
[root@ceph3 ~]# mkfs.xfs /dev/sdb
[root@ceph3 ~]# mkdir -p /var/local/osd2
[root@ceph3 ~]# mount /dev/sdb /var/local/osd2/
vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/x86_64
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1
[root@ceph1 ~]# yum -y install ceph-deploy
- 创建monitor服务
[root@ceph1 ~]# mkdir /etc/ceph && cd /etc/ceph
[root@ceph1 ceph]#ceph-deploy new ceph1 #mon安装在ceph1节点
[root@ceph1 ceph]# ls #生成配置文件在当前目录下
ceph.conf ceph.log ceph.mon.keyring
- 修改副本数
[root@ceph1 ceph]# vim ceph.conf #配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,在最后添加osd_pool_default_size = 2
[root@ceph1 ceph]#ceph osd dump|grep -i size #查看pool的副本数
- 在所有节点安装ceph
[root@ceph1 ceph]# ceph-deploy install ceph1 ceph2 ceph3 #各个节点不能提前安装ceph和ceph-radosgw,如果网络源安装失败,手动安装epel-release 然后安装ceph-release再安装yum –y install ceph ceph-radosgw
[root@ceph1 ceph]# ceph-deploy mon create ceph1
[root@ceph1 ceph]# ceph-deploy gatherkeys ceph1 #收集keyring 文件
- 部署osd服务
[root@ceph1 ~]# chmod 777 -R /var/local/osd0/
[root@ceph1 ~]#chmod 777 -R /var/local/osd1/
[root@ceph1 ~]#chmod 777 -R /var/local/osd2/
[root@ceph1 ceph]#ceph-deploy osd prepare ceph1:/var/local/osd0 ceph2:/var/local/osd1 ceph3:/var/local/osd2 #创建osd
[root@ceph1 ceph]#ceph-deploy osd activate ceph1:/var/local/osd0 ceph2:/var/local/osd1 ceph3:/var/local/osd2 #激活osd
[root@ceph1 ceph]# ceph-deploy osd list ceph1 ceph2 ceph3 #列出osd
- 统一配置
用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了,各节点修改ceph.client.admin.keyring权限
[root@ceph1 ceph]# ceph-deploy admin ceph1 ceph2 ceph3
[root@ceph1 ceph]#chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph2 ceph]#chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph3 ceph]#chmod +r /etc/ceph/ceph.client.admin.keyring
[root@ceph1 ceph]#ceph health 或 ceph -s #查看集群状态
- 部署mds服务
[root@ceph1 ceph]# ceph-deploy mds create ceph2 ceph3 #我们MDS安装2台
[root@ceph1 ceph]# ceph mds stat #查看状态
[root@ceph1 ceph]# ceph -s
- 卸载ceph
停止所有进程: stop ceph-all
卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]
删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]
删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]
删除key:ceph-deploy forgetkeys
卸载ceph-deploy管理:yum -y remove ceph-deploy
二、RBD块存储
Ceph osd lspools //查看pool
Ceph osd pool create pool名 pg数 pgp数 //创建pool
ceph osd pool get pool名 pg_num //查看pool的pg数
ceph osd pool get pool名 pgp_num //查看pool的pgp数,PG是指定存储池存储对象的目录有多少个,PGP是存储池中分布pg的osd个数
ceph osd pool get pool名 size //查看pool的副本数
ceph osd pool get pool名 crush_rule //查看pool的crush调度算法
ceph osd pool set pool名 size 2 //调整pool的副本数
ceph osd pool set pool名 pg_num 128 //调整pool的pg数
rbd create -p 池子名 --image rbd-damo.img --size 10G //创建块设备
rbd resize 池子名/块设备名 --size 20G //块设备扩容,再对文件系统扩容
rbd -p 池子名 ls //查看池子中的块设备
rbd info 池子名/块设备编号 //查看块设备的详细信息
rbd rm -p 池子名 --image 块设备名 //删除pool中的块设备
rbd feature disable 池子名/块设备名 exclusive-lock //禁用块设备的属性
rbd map 池子名/块设备名 //挂载块设备,显示为一个磁盘
rbd unmap 池子名/块设备名 //卸载块设备
rados -p 池子名 ls //查看object对象
rados -p 池子名 stat object对象 //查看object对象的大小
ceph osd map 池子名 块设备名 //查看object保存在哪些pg和osd的位置
ceph数据读取顺序
回收站
Rbd trash move ceph-demo/ceph-trash.img –expires-at 20200327 //移动到回收站
Rbd trash -p ceph-demo ls //查看回收站中的数据
Rbd trash restore -p ceph-demo 33441a9bcc8ea //从回收站中恢复
快照
Rbd snap create ceph-demo/rbd-test.img@snap_20200327 //创建快照
Rbd snap ls ceph-demo/rbd-test.img //查看快照
Rbd snap rollback ceph-demo/rbd-test.img@snap_20200327 //快照恢复
Rbd snap remove ceph-demo/rbd-test.img@snap_20200327 //删除快照
Rbd snap protect ceph-demo/rbd-test.img@template //保护快照
Rbd clone ceph-demo/rbd-test.img@tmplate ceph-demo/vm1-clone.img //克隆
Rbd children ceph-demo/rbd-test.img@template //查看源镜像的克隆镜像
Rbd flatten ceph-demo/vm1-clone.img //解除与父镜像的关系
Rbd export ceph-demo/rbd-test.img@snap-demo /root/rbd-test.img //全量导出
Rbd import rbd-test.img ceph-demo/rbd-test-new.img //全量导入
Rbd export-diff ceph-demo/rbd-test.img@testv1 rbd-test.img@testv1 //增量备份
Rbd import-diff rbd-test.img@testv1 ceph-demo/rbd-test-new.img //增量恢复
三、RGW对象存储
部署rgw
Ceph-deploy rgw create node-1 //以node-1为rgw网关
Curl http://node-1:6780 //测试rgw网关
Ceph -s //能够看到有一个rgw服务
修改rgw的监听端口
Vi ceph.conf
[client.rgw.node-1]
Rgw_frontends = “civetweb port=81”
Ceph-deploy –overwrite-conf config push node-1 node-2 node-3
Systemctl restart ceph-radorgw.target
Rgw的S3接口使用
Radosgw-admin user create --uid ceph-s3-user --display-name “Ceph S3 User Demo” //创建一个用户,记录access_key和secret_key
"access_key": "RCKDU064CQ024KZ5972J",
"secret_key": "rIn4oxf6iquObC7iWQfnDSkOBPyOmzLX692j26DA"
Radosgw-admin user list //列出用户
Radosgw-admin user info –uid 用户id //查看用户信息
Yum -y install python-boto
编写sdk
Vi s3client.py
Python s3client.py //会生成新的池子
Yum -y install s3cmd //支持s3的cmd
S3cmd –config //添加配置信息,保存到了/root/.s3cfg
S3cmd ls //查看桶
S3cmd mb s3://s3cmd-demo //创建一个桶
S3cmd put /etc/fstab s3://s3cmd-demo/fstab-demo //上传文件
S3cmd ls s3://s3cmd-demo //查看桶中的对象
S3cmd get s3://s3cmd-demo/fstab-demo fstab-download //下载桶中的对象
S3cmd rm s3://s3cmd-demo/fstab-demo //删除桶中的对象
Sgw的swift的接口
Radosgw-admin subuser create –uid ceph-s3-user –subuser=ceph-s3-user:swift –access=full //创建swift用户
Radosgw-admin key create –subuser=ceph-s3-user:swift –key-type=swift –gen-secret //生成secret key
Yum -y install python-pip //安装pip工具
Pip install –upgrade python-swiftclient //安装swift客户端
Swift -A http://10.211.55.201:80/auth -U ceph-s3-user:swift -K secretkey list //查看桶
Vi swift_openrc.sh //定义环境变量
ST_AUTH=http://10.211.55.201:80/auth
ST_KEY=secret key
ST_USER=ceph-s3-user:swift
Source swift_openrc.sh
Swift post swift-demo //创建bucket
Swift delete swift-demo //删除bucket
Swift upload swift-demo /etc/passwd //上传对象
Swift list swift-demo //查看bucket中的对象
Swift download swift-demo /etc/passwd //下载对象
RGW集群
Ceph-deploy rgw create node-2 //部署第二个rgw
修改rgw的监听端口,添加配置
Vi ceph.conf
[client.rgw.node-2]
Rgw_frontends = “civetweb port=81”
Ceph-deploy –overwrite-conf config push node-1 node-2 node-3
Systemctl restart ceph-radosgw.target //重启node-2的服务
配置keepalived
配置haproxy负载均衡
修改客户端指向
Vi /root/.s3cfg
Host_base = 10.211.55.200:80
Host_bucket = 10.211.55.200:80/%(bucket)s
S3cmd ls
S3cmd mb s3://test-1
Vi /root/swift_openrc.sh //修改IP为VIP
Swift list
Swift post test-2
Swift delete test-2
四、文件系统存储
安装mds服务
Ceph-deploy --overwrite-conf mds create node-1
Ceph-deploy --overwrite-conf mds create node-2
Ceph-deploy --overwrite-conf mds create node-3
Ceph -s //会看到有三个mds服务是standby,因为还没有文件系统
创建cephFS文件系统
Ceph osd pool create cephfs_metadata 16 16 //创建cephfs的元数据池
Ceph osd pool create cephfs_data 16 16 //创建cephfs的数据池
Ceph fs new cephfs_demo cephfs_metadata cephfs_data //创建ceph fs
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
*少于 5 个 OSD 时可把 pg_num 设置为 128
*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
*自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集 群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)
Ceph fs ls //查看fs,这是mds一个是active两个是standby
CephFS的内核挂载
存储密钥(如果没有在管理节点使用ceph-deploy拷贝ceph配置文件)
cat /etc/ceph/ceph.client.admin.keyring
将key对应的值复制下来保存到文件:/etc/ceph/admin.secret中
Mount -t ceph 10.211.55.201:6789:/ /mnt/cephfs/ -o name=admin //挂载
Df -h //可以看到挂载的信息,大小为整个ceph集群的空间大小
Lsmod |grep ceph //内核会自动加载ceph模块
CephFS-fuse用户空间挂载
Yum -y install ceph-fuse //安装ceph-fuse工具
Ceph-fuse -n client.admin -m 10.211.55.201:6789,10.211.55.202:6789, 10.211.55.203:6789 /mnt/ceph-fuse/ //挂载
[root@client ceph]# fusermount -u /mnt/ceph-fuse/ #取消挂载