Ceph是一个能提供的文件存储,块存储和对象存储的分布式存储系统。它提供了一个可无限伸缩的Ceph存储集群。
0.名词解释
fs 通过Linux内核客户端和FUSE来提供文件系统。(文件存储)
rbd 通过 Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。(块存储)
radosgw 是一套基于当前流行的RESTFUL协议的网关,并且兼容S3和Swift。(对象存储)
1.集群组件
eph集群包括Ceph OSD,Ceph Monitor两种守护进程。
Ceph OSD(Object Storage Device): 功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。 翻译过来OSD就是组员。
Ceph Monitor: 是一个监视器,监视Ceph集群状态和维护集群中的各种关系。他就是群管
Ceph存储集群至少需要一个Ceph Monitor和两个 OSD 守护进程。
样例准备环境:
3台机器负责节点OSD,其中1台OSD机器负责Mon监视,1台客户机。
2.安装ceph
1.所有节点和客户机全部执行
# yum install epel-release -y
# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=0
priority=1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=0
priority=1
# yum makecache
先处理一个特殊的python-werkzeug
# cd /software
# wget https://mirrors.tuna.tsinghua.edu.cn/centos/7/virt/x86_64/ovirt-4.3/common/python-# werkzeug-0.9.1-1.el7.noarch.rpm
# yum install -y python-werkzeug-0.9.1-1.el7.noarch.rpm
2.监控机执行
# yum install ceph-deploy -y
3.节点机执行
# yum install ceph ceph-radosgw -y
# ceph -v
4.客户机安装
# yum install ceph-common -y
3.环境配置
神奇的软件
1.每台机器必须要配置host的别名
# hostnamectl set-hostname client
# hostnamectl set-hostname node1
# hostnamectl set-hostname node2
# hostnamectl set-hostname node3
# vim /etc/hosts
10.1.1.11 node1
10.1.1.12 node2
10.1.1.13 node3
10.1.1.14 client
每个节点确认连通性
# ping -c 2 client
# ping -c 2 node1
# ping -c 2 node2
# ping -c 2 node3
2.每台机器时间必须同步
# yum install ntp ntpdate ntp-doc -y
# systemctl restart ntpd
# systemctl status ntpd
3.监视机上执行
# ssh-keygen
# ssh-copy-id -i node1
# ssh-copy-id -i node2
# ssh-copy-id -i node3
# ssh-copy-id -i client
4.组建集群
这段都在监视机中操作
手动建立一个集群配置目录
# mkdir /etc/ceph
# cd /etc/ceph
创建集群,后面填写监视节点的主机名
# ceph-deploy new node1
-rw-r--r-- 1 root root 192 Dec 1 07:17 ceph.conf
-rw-r--r-- 1 root root 2905 Dec 1 07:17 ceph-deploy-ceph.log
-rw------- 1 root root 73 Dec 1 07:17 ceph.mon.keyring
产生3文件,成功
# vim /etc/ceph/ceph.conf
最下面填上
public network = 当前网段/子网掩码
public network = 10.1.1.0/24
mon_allow_pool_delete = true
初始化监视节点
# cd /etc/ceph
监视节点初始化
# ceph-deploy mon create-initial
# ceph health
HEALTH_OK
成功
将配置文件信息同步到所有节点
# ceph-deploy admin 节点1 节点2 节点3
# ceph-deploy admin node1 node2 node3
# ceph -s
cluster:
id: c05c1f28-ea78-41b7-b674-a069d90553ac
health: HEALTH_OK 健康状态为OK
services:
mon: 1 daemons, quorum node1 1个监控
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
为了防止mon单点故障,你可以加多个mon节点(建议奇数个,因为有quorum仲裁投票)
# ceph-deploy mon add node2
# ceph-deploy mon add node3
# ceph -s
services:
mon: 3 daemons, quorum node1,node2,node3 3个监控
mgr: no daemons active
osd: 0 osds: 0 up, 0 in
添加管理节点mgr,mgr原来是mon的一部分,先在分成两个服务。
# ceph-deploy mgr create node1
# ceph -s
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active) node1为mgr
osd: 0 osds: 0 up, 0 in
添加多个mgr可以实现HA
# ceph-deploy mgr create node2
# ceph-deploy mgr create node3
mgr: node1(active), standbys: node2, node3 看到node1为主,node2,node3为备
添加存储盘节点osd,每一个硬盘就是一个osd,执行就完了
查看
# ceph-deploy disk list node1
# ceph-deploy disk list node2
# ceph-deploy disk list node3
zap表示干掉磁盘上的数据,相当于格式化
# ceph-deploy disk zap node1 /dev/sdb
# ceph-deploy disk zap node2 /dev/sdb
# ceph-deploy disk zap node3 /dev/sdb
将磁盘创建为osd
# ceph-deploy osd create --data /dev/sdb node1
# ceph-deploy osd create --data /dev/sdb node2
# ceph-deploy osd create --data /dev/sdb node3
最终
# ceph -s
services:
mon: 3 daemons, quorum node1,node2,node3
mgr: node1(active), standbys: node2, node3
osd: 3 osds: 3 up, 3 in 看到这里有3个osd
集群节点的扩容方法
假设再加一个新的集群节点node4
1, 主机名配置和绑定
2, 在node4上yum install ceph ceph-radosgw -y
安装软件
3, 在部署节点node1上同步配置文件给node4. cepdh-deploy admin node4
4, 按需求选择在node4上添加mon或mgr或osd等
5.理论
N多块硬盘变成N多个osd
N多个osd捏成一块大硬盘
这一块大硬盘切分成若干个Pool(存储池)
每个存储池分成固定数量个PG
每个PG分成若干个对象单位
每个PG单位随机放在任意一个osd上。
客户端是对pool进行的操纵。
pg数为2的倍数,一般5个以下osd,分128个PG或以下即可
分多了PG会报错的,不断尝试即可。
# ceph osd pool create pool名字 份数
# ceph osd pool create test_pool 128
修改
# ceph osd pool set test_pool pool名字 新份数
前面配置文件里
mon_allow_pool_delete = true
填写之后才能删除pool
如果在此处修改配置文件,保存后还需要同步各机器配置文件。
并分别重启服务
# ceph-deploy --overwrite-conf admin node1 node2 node3
# systemctl restart ceph-mon.target
删除pool,重要的事情说两遍
# ceph osd pool delete pool名字 pool名字 --yes-i-really-really-mean-it
6.Ceph文件存储
要运行Ceph文件系统, 你必须先创建至少带一个mds的Ceph存储集群.
(Ceph块设备和Ceph对象存储不使用MDS)。
Ceph MDS: Ceph文件存储类型存放与管理 元数据metadata 的服务。
mds至少一个,案例建立3个
# ceph-deploy mds create node1 node2 node3
mds的使用还需要pool池子支持,所以要创建两个pool池子
# ceph osd pool create cephfs_pool 128
pool 'cephfs_pool' created
# ceph osd pool create cephfs_metadata 64
pool 'cephfs_metadata' created
查看pool列表
# ceph osd pool ls
cephfs_pool
cephfs_metadata
注:cephfs_pool 放数据 cephfs_metadata 放元数据。
fs指file system,这句命令把pool连在一起。
# ceph fs new cephfs cephfs_metadata cephfs_pool
查看fs的存在列表
# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_pool ]
查看mds使用情况
# ceph mds stat
cephfs-1/1/1 up {0=ceph_node3=up:active}, 2 up:standby
客户端配置
# cat /etc/ceph/ceph.client.admin.keyring
key = AQDEKlJdiLlKAxAARx/PXR3glQqtvFFMhlhPmw==
把key值写入这个文件。
# echo 'AQDEKlJdiLlKAxAARx/PXR3glQqtvFFMhlhPmw==' > /root/admin.key
挂载
# mount -t ceph 监控节点IP:6789:/ 挂载路径 -o name=admin,secretfile=admin.key的路径
# mount -t ceph node1:6789:/ /mnt -o name=admin,secretfile=/root/admin.key
# lsblk
出现一个新设备
文件系统,可实现同读同写。
删除文件系统
# umount 挂载点
所有节点停止mds
# systemctl stop ceph-mds.target
删除fs
# ceph fs rm cephfs --yes-i-really-mean-it
删除pool
# ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
pool 'cephfs_metadata' removed
# ceph osd pool delete cephfs_pool cephfs_pool --yes-i-really-really-mean-it
pool 'cephfs_pool' removed
7.Ceph块存储
必须先同步配置文件到客户机
# ceph-deploy admin client
# ceph osd pool create pool名 128
用rdb模式初始化池子
# rbd pool init pool名
这里的份数是一份1M左右
# rbd create 卷名 --pool pool名 --size 份数
# rbd ls pool名
卷名
# rbd info 卷名 -p pool名
rbd image 'volume1':
关注
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten 特性
禁用除了layering的其他特性
# rbd feature disable pool名/卷名 exclusive-lock object-map fast-diff deep-flatten
# rbd map pool名/卷名
查看
# rbd showmapped
device设备名
# mkfs.xfs /dev/设备名
# mount /dev/设备名 挂载点
# df -h
查看硬盘情况
扩容
分区后的块储备不能在线扩容
# rbd resize --size 8000 pool名/卷名
# xfs_growfs -d 挂载点
# df -h
变了
删除块存储
# umount 挂载点
解除映射
# rbd unmap /dev/设备名
# ceph osd pool delete pool名 pool名 --yes-i-really-really-mean-it
pool 'pool名' removed
8.Ceph对象存储
在node1上创建rgw,
# ceph-deploy rgw create node1
# ss -nltp
查看7480端口
在客户端上建立一个用户
# radosgw-admin user create --uid="自定义名字1" --display-name="自定义名字2"
# radosgw-admin user create --uid='自定义名字1' --display-name='自定义名字2' |grep -E 'access_key|secret_key'
"access_key": "36ROCI84S5NSP4BPYL01",
"secret_key": "jBOKH0v6J79bn8jaAF2oaWU7JvqTxqb4gjerWOFW"
客户端安装s3cmd工具
# yum install s3cmd
手写配置文件
# vim /root/.s3cfg
[default]
access_key = 照上面填access_key
secret_key = 照上面填secret_key
host_base = 10.1.1.11:7480
host_bucket = 10.1.1.11:7480/%(bucket)
cloudfront_host = 10.1.1.11:7480
use_https = False
建立一个桶(存储空间)
# s3cmd mb s3://bucket名
# s3cmd mb s3://test_bucket
# s3cmd ls
上传与下载
# s3cmd put 文件名与路径 s3://桶名
# s3cmd get s3://桶名/文件名