CentOS 7 部署 Ceph 分布式存储架构
Posted 笨小孩@GF 知行合一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7 部署 Ceph 分布式存储架构相关的知识,希望对你有一定的参考价值。
Ceph 概述
随着 OpenStack 日渐成为开源云计算的标准软件栈,Ceph 也已经成为 OpenStack 的首选后端存储。
Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。
ceph 官方文档 http://docs.ceph.org.cn/
ceph 中文开源社区 http://ceph.org.cn/
Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。
Ceph 相比其它分布式存储有哪些优点?
- 统一存储
- 虽然 ceph 底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
- 高扩展性
- 扩容方便、容量大。能够管理上千台服务器、EB 级的容量。
- 可靠性强
- 支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自动管理、自动修复。无单点故障,容错性强。
- 高性能
- 因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的 IOPS和吞吐量越高。另外一点 ceph 客户端读写数据直接与存储设备(osd) 交互。
Ceph 各组件介绍
- Ceph OSDs: Ceph OSD 守护进程(Ceph OSD)的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他 OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有 2 个副本时,至少需要 2 个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有 3 个副本,但你可以调整副本数)。
- Monitors: Ceph Monitor 维护着展示集群状态的各种图表,包括监视器图、OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在 Monitors 、 OSD 和 PG 上的每一次状态变更的历史信息(称为 epoch )。
- MDSs: Ceph 元数据服务器(MDS)为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和Ceph 对象存储不使用 MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
- ceph 集群部署实验 主机准备 (禁用 selinux, 关闭防火墙)
- 系统统一使用 CentOS 7.6
- mon 192.168.2.16 # admin,osd, mon 作为管理和监控节点
- ceph1 192.168.2.13 osd,mds
- ceph2 192.168.2.14 osd,mds
- client 192.168.2.15 ceph-fuse
- 192.168.2.16 作管理. osd. mon 节点
- 2.13 和 2.14 作 osd mds
- 2.15 作客户端
- 2.16 、2.13、 2.14三台服务器各增加一块硬盘 /dev/sdb , 创建目录并挂载到 /var/local/osd{0,1,2}
- 不重启添加硬盘
-
依次格式化、挂载到对应的目录
- mkfs.xfs /dev/sdb
mkdir /var/local/osd{0,1,2}
mount /dev/sdb /var/local/osd0/
- 2.13
- 2.14
- 编辑 hosts 文件(所有节点需要操作):
规范系统主机名添加 hosts 文件实现集群主机名与主机名之间相互能够解析,host 文件添加主机名不要使用 fqdn 方式
- 可用 hostnamectl set-hostname [name] 设置
分别打开各节点的/etc/hosts 文件,加入这四个节点 ip 与名称的对应关系
vim /etc/hosts
- SSH 免密码登录(所有节点需要操作)
在管理节点使用 ssh-keygen 生成 ssh keys 发布到各节点
-
同步时间
使得 4 台主机时间必须保持一致,使用阿里云的 NTP 服务,把 4 台主机时间保持一致(主机需要可以访问互联网)
yum -y install ntp
ntpdate ntp1.aliyun.com && hwclock -w
- 扩展阿里云 NTP 可用的服务:
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
-
管理节点 192.168.2.16 安装 ceph-deploy 工具
第一步:增加 yum 配置文件(各节点都要配置 ceph 源) - vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1 - yum clean all
- yum makecache
- yum repolist all
- 第二步:更新软件源并安装 ceph-deploy 管理工具
- yum -y install ceph-deploy
- 创建 monitor 服务
- mkdir /etc/ceph && cd /etc/ceph
- ceph-deploy new mon
- Ceph 配置文件(ceph.conf )、一个 monitor 密钥环( ceph.mon.keyring )和一个日志文件(ceph-deploy-ceph.log)
- 修改副本数
vim ceph.conf - #配置文件的默认副本数从 3 改成 2,这样只有两个 osd 也能达到 active+clean 状态
ceph.conf
[global]
fsid = cf74f445-0b02-49ab-b966-ce6c745d4c3f
mon_initial_members = mon
mon_host = 192.168.2.16
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2
mon_max_pg_per_osd = 1000 -
安装 ceph,在所有节点上安装:
- ceph-deploy install mon
- ceph-deploy install ceph1
- ceph-deploy install ceph2
- ceph-deploy install c7_2_15
- (如果网络源安装失败,手工安装 yum -y install ceph-release 再 yum -y install ceph ceph-radosgw)
-
安装 ceph monitor
-
ceph-deploy mon create mon
-
收集节点的 keyring 文件
-
ceph-deploy gatherkeys mon
-
部署 osd 服务
添加 osd 节点 (所有 osd 节点执行)
实验准备时已经创建目录/var/local/osd{id}
- 创建 osd
- chown -R ceph. /var/local/ 在每个节点都要执行
- 然后在 deploy 2.16 端
- ceph-deploy osd prepare mon:/var/local/osd0
- ceph-deploy osd prepare ceph1:/var/local/osd1
- ceph-deploy osd prepare ceph2:/var/local/osd2
-
激活 osd
-
chown -R ceph. /var/local/ 在每个节点都要执行
ceph-deploy osd activate mon:/var/local/osd0 -
ceph-deploy osd activate ceph1:/var/local/osd1
-
ceph-deploy osd activate ceph2:/var/local/osd2
-
查看状态:
ceph-deploy osd list mon ceph1 ceph2
-
统一配置
用 ceph-deploy 把配置文件和 admin 密钥拷贝到所有节点,这样每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了
- ceph-deploy admin mon ceph1 ceph2 c7_2_15
-
各节点修改 ceph.client.admin.keyring 权限:
-
chmod +r /etc/ceph/ceph.client.admin.keyring
-
查看 osd 状态
-
ceph health #或 ceph -s
-
状态必须为 active,如果为 createing,检查上面的配置和防火墙
-
fsmap e11: 1/1/1 up {0=ceph2=up:active}, 1 up:standby
- 部署 mds 服务
ceph-deploy mds create ceph1 ceph2 #部署 2台 MDS
ceph mds stat
e11: 1/1/1 up {0=ceph2=up:active}, 1 up:standby #查看状态 1 up :standby
- 创建 ceph 文件系统
- 查看 文件系统 ceph fs ls
- 创建存储池
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
- 其中: 128
- 关于创建存储池
- 确定 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 new 命令创建文件系统了
- ceph fs new 128 cephfs_metadata cephfs_data
- 其中:<fs_name> = cephfs 可自定义
- ceph fs ls #查看创建后的 cephfs
ceph mds stat #查看 mds 节点状态
-
不同挂载方式
内核驱动挂载 Ceph 文件系统
- 存储密钥(如果没有在管理节点使用 ceph-deploy 拷贝 ceph 配置文件)
-
在 192.168.2.15 上
-
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQDC/OpgYUvtNxAAJvYjkhykTHYWIROhlYuq0Q== -
将 key 对应的值复制下来保存到文件:/etc/ceph/admin.secret 中。
cat /etc/ceph/admin.secret
AQDC/OpgYUvtNxAAJvYjkhykTHYWIROhlYuq0Q==
-
在client 端挂载使用
- yum -y install ceph ceph-radosgw
mount -t ceph mon:6789:/ /opt/ceph/ -o name=admin,secretfile=/etc/ceph/admin.secret
mount -t ceph 192.168.2.16:6789:/ /opt/ceph/ -o name=admin,secretfile=/etc/ceph/admin.secret
-
用户控件挂载 Ceph 文件系统
-
安装 ceph-fuse
-
yum install -y ceph-fuse
-
ceph-fuse -m 192.168.2.16:6789 /opt/ceph/
- 写入文件测试
- 取消挂载后重新挂载,看刚才创建的文件是否能正常显示、读取
- fusermount -zu /opt/ceph
- 重新挂载,读取文件
-
如果报错则前面统一配置时未将配置文件以及密钥文件拷贝至客户端节点
-
如果出现 “nonempty ” 该提示表示需要使用 -o nonempty 进行挂载
-
原因是 /opt 目录不空
- 清理机器上的 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
以上是关于CentOS 7 部署 Ceph 分布式存储架构的主要内容,如果未能解决你的问题,请参考以下文章
世界500强是如何解决千亿流量留存问题的,《Ceph分布式存储架构》-使用CentOS 7部署 Ceph分布式存储架构-为他们解决什么问题。
CentOS 7.3(1611) 环境下详细部署安装分布式存储系统Ceph