分布式对象存储之Ceph

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://桶名/文件名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值