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 [主机名] ... .... ....
- 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 = cephxosd_pool_default_size = 2
mon clock drift allowed = 0.500
mon clock drift warn backoff = 10
mon_max_pg_per_osd = 1000 -
安装 ceph,在所有节点上安装:
- ceph-deploy install [主机名]
- 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
-
Ceph 配置 dashboard Web 监控界面
安装 mgr-dashboard 插件(ceph 节点都要安装) - cat /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://download.ceph.com/rpm-nautilus/el7/x86_64/
gpgcheck=0
priority=1
enable=1
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS/
gpgcheck=0
priority=2
enable=1 - yum install -y ceph-mgr-dashboard
启用 dashboard 插件
ceph mgr module enable dashboard - 创建自签名证书
ceph dashboard create-self-signed-cert - echo 123456 > p.txt
- ceph dashboard set-login-credentials gf -i p.txt
- ceph mgr services
- https://192.168.2.13:8443
- 测试 拷贝一些文件
- ceph -s 出现 mon is allowing insecure global_id reclaim 或 mons are allowing insecure global_id reclaim
或 web 界面上,出现警告:mon is allowing insecure global_id reclaim
解决办法:禁用不安全模式!
如果使用过程中,执行了一次没有效果的话,需先将其设置为 true,然后再次设置为 false
ceph config set mon auth_allow_insecure_global_id_reclaim true
ceph config set mon auth_allow_insecure_global_id_reclaim false
-
升级内核
-
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org &&yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y &&yum --enablerepo=elrepo-kernel install kernel-ml -y
grub2-set-default 0 && rpm -qa | grep kernel
yum -y remove kernel-3.10.0-957.el7 kernel-tools-3.10.0-957.el7 kernel-tools-libs-3.10.0-957.el7
-
同步时间
ntpdate ntp1.aliyun.com && hwclock -w安装 ceph-deploy 管理工具
yum install python-setuptools ceph-deploy -y
mkdir /etc/ceph && cd /etc/ceph
ceph-deploy new mon1 ceph1 ceph2
vim /etc/ceph/ceph.conf
osd_pool_default_size = 2
mon clock drift allowed = 0.500
mon clock drift warn backoff = 10
mon_max_pg_per_osd = 1000 -
安装ceph
yum -y install ceph ceph-radosgw
- 创建 mon
ceph-deploy mon create-initial
ceph-deploy admin mon1 ceph1 ceph2 ceph_fuse
ceph-deploy osd create --data /dev/sdb mon1
ceph-deploy osd create --data /dev/sdb ceph1
ceph-deploy osd create --data /dev/sdb ceph2
ceph-deploy osd list mon1 ceph1 ceph2
- 创建 mds
ceph-deploy mds create mon1 ceph1 ceph2
查看 ceph 当前文件系统
ceph fs ls
- 创建存储池
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128
- 创建文件系统
ceph fs new gftest cephfs_metadata cephfs_data
ceph mds stat #查看 mds 节点状态
ceph-deploy mgr create mon1 ceph1 ceph2
- 查看集群状态
ceph -s
error:mon is allowing insecure global_id reclaim
- 禁用不安全模式
ceph config set mon auth_allow_insecure_global_id_reclaim true
ceph config set mon auth_allow_insecure_global_id_reclaim false
- 挂载
cat /etc/ceph/ceph.client.admin.keyring
vim /etc/ceph/admin.secret
mount -t ceph 192.168.2.13:6789:/ /opt/ceph -o name=admin,secretfile=/etc/ceph/admin.secret
umount /opt/ceph
ceph-fuse -m 192.168.2.13:6789 /opt/ceph
- 如果想清理机器上的 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
Ceph 配置 dashboard Web 监控界面
yum install -y ceph-mgr-dashboard
启用 dashboard 插件
ceph mgr module enable dashboard
创建自签名证书
ceph dashboard create-self-signed-cert
echo 123456 > p.txt
ceph dashboard set-login-credentials gf -i p.txt
-
创建多 monitors
- 192.168.2.3 ceph1 admin monitors osd
- 192.168.2.4 ceph1 osd mds monitors
- 192.168.2.5 ceph1 osd mds monitors
- 192.168.2.6 ceph1 osd mds
-
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[ceph]
name=ceph
baseurl=http://download.ceph.com/rpm-nautilus/el7/x86_64/
gpgcheck=0
priority=1
enable=1
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS/
gpgcheck=0
priority=2
enable=1 - yum install python-setuptools ceph-deploy -y
- mkdir /etc/ceph && cd /etc/ceph
- ceph-deploy new ceph1 ceph2 ceph3
-
vim /etc/ceph/ceph.conf
osd_pool_default_size = 2
mon clock drift allowed = 0.500
mon clock drift warn backoff = 10
mon_max_pg_per_osd = 1000 - 安装 ceph
- ceph-deploy install ceph1 ceph2 ceph3 ceph4
- 创建 3 个 monitors
- ceph-deploy mon create ceph1 ceph2 ceph3
- 收集 key
- ceph-deploy gatherkeys ceph1
- 创建 osd
- ceph-deploy osd create --zap-disk ceph1:/dev/sdc
- ceph-deploy osd create --zap-disk ceph2:/dev/sdc
- ceph-deploy osd create --zap-disk ceph3:/dev/sdc
- ceph-deploy osd create --zap-disk ceph4:/dev/sdc
- 创建 mds
-
ceph-deploy mds create ceph2 ceph3 ceph4
- 创建存储池
-
ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128 - 创建文件系统
-
ceph fs new gftest cephfs_metadata cephfs_data
ceph mds stat #查看 mds 节点状态
- ceph -s
- 挂载
- cat /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[ceph]
name=ceph
baseurl=http://download.ceph.com/rpm-nautilus/el7/x86_64/
gpgcheck=0
priority=1
enable=1
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS/
gpgcheck=0
priority=2
enable=1 - yum install -y ceph-fuse
- mkdir /etc/ceph
- scp root@192.168.2.3:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
- ceph-fuse -m 192.168.2.3:6789 /opt/ceph/ --no-mon-config
目录 返回
首页