1. 基本概念
ceph 的组件多采用插件的机制,包括后端存储,KV 数据库,磁盘管理等。各组件之间可以灵活的组合。
基于后端存储包括 filestore, kvstore,memstore 和 bluestore。 Ceph Luminous 引用了 bluestore 的存储类型,不依赖文件系统,直接管理物理磁盘,相比filestore 在 io 写入的时候路径更短,也避免了二次写入的问题,性能会更加好。
KV 存储主要包括LevelDB, MemDB 和新的 RocksDB。RocksDB 是 Facebook 基于 LevelDB 开发的 key-value 数据,并对闪存(flash)有更友好的优化。
RocksDB 原本只基于文件系统的。但是得益于它本身的灵活性,bluestore 实现了一套 RocksDB 的 Env 接口,还在BlueStore 上面实现了一套 BlueFS 的接口与BluestoreEnv 对接。使得 RocksDB 可以存储在 BlueStore 上面。
后端存储使用 bluestore 时,wal 是 RocksDB 的write-ahead log,提前写的日志, 相当于之前的 journal 数据,db 是 RocksDB 的metadata 信息。在磁盘选择原则是 block.wal > block.db > block 如果所有的数据都在单块盘上,那是没有必要指定 wal &db 的大小的。 如果 wal & db 是在不同的盘上,由于 wal/db 一般都会分的比较小,是有满的可能性的。如果满了,这些数据会迁移到下一个快的盘上(wal - db - main)。所以最少不会因为数据满了,而造成无法写入 使用混合机械和固态硬盘设置时,block.db为Bluestore创建足够大的逻辑卷非常重要 。通常,block.db应该具有 尽可能大的逻辑卷。 建议block.db尺寸不小于4% block。例如,如果block大小为1TB,则block.db 不应小于40GB。 如果不使用快速和慢速设备的混合,则不需要为block.db(或block.wal)创建单独的逻辑卷。Bluestore将在空间内自动管理这些内容block 使用bluestore 时的 osd 分区 如果是使用的 ceph-disk 管理磁盘,他会建立一个 100MB 的分区,来存放 keyring / whoami 这些信息,这和之前的逻辑是一样的。 如果使用 ceph-volume 管理磁盘,/var/lib/ceph/osd/ceph-0 分区会从tmpfs 挂载过来(也就是内存)
Ceph Monitor(ceph-mon)维护集群状态的映射,包括监视器映射,管理器映射,OSD映射和CRUSH映射。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常至少需要三个监视器。 Ceph Manager守护程序(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的仪表板和REST API。高可用性通常至少需要两名经理。 Ceph OSD(对象存储守护进程 ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查其他Ceph OSD守护进程来获取心跳,为Ceph监视器和管理器提供一些监视信息。冗余和高可用性通常至少需要3个Ceph OSD。 Ceph元数据服务器(MDS ceph-mds)代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)。Ceph的元数据服务器允许POSIX文件系统的用户来执行基本的命令(如 ls,find没有放置在一个Ceph存储集群的巨大负担,等等)。
2. 环境准备
3、 统一主机hosts
[root@monitor1 ceph-cluster]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.230.21 monitor1
172.16.230.22 monitor2
172.16.230.23 monitor3
172.16.230.24 node1
172.16.230.25 node2
172.16.230.26 node3
172.16.230.27 node4
172.16.230.28 node5
for i in {22..28}; do scp /etc/hosts [email protected].$i:/etc/; done
4. 时间同步
[root@master1 ~]# crontab -l #Ansible: 每隔5分钟同步时间服务器 */5 * * * * /usr/sbin/ntpdate 192.168.20.220
5. ssh密码打通
6. 修改visudo
找到 Defaults requiretty 选项,直接注释掉,这样 ceph-deploy 就可以用之前创建的用户(创建部署 Ceph 的用户 )连接了。
7. 设置阿里yum源
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS/ enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
8.安装ceph-deploy包
[root@master1 ~]# yum -y install ceph-deploy
9. 创建配置文件目录
[root@master1 ~]# mkdir /opt/ceph-cluster
10. 清除集群
想要重新开始,请执行以下操作以清除配置 ceph-deploy purgedata {ceph-node} [{ceph-node}] ceph-deploy forgetkeys 要清除Ceph包 ceph-deploy purge {ceph-node} [{ceph-node}] 例: ceph-deploy purge monitor1 osd1
11. 创建群集
ceph-deploy new {initial-monitor-node(s)} [root@master1 ~]# mkdir /opt/ceph-cluster [root@master1 ~]# cd /opt/ceph-cluster [root@master1 ceph-cluster]# ceph-deploy new monitor1 monitor2 monitor3
当前目录会生成 Ceph配置文件,监视器密钥密钥环和新群集的日志文件
ceph.conf ceph-eploy-ceph.log ceph.mon.keyring
12. 修改ceph.conf 配置文件
[global] fsid = a5e478b2-f3bf-4fbf-930a-69a6686502d1 mon_initial_members = monitor1, monitor2, monitor3 mon_host = 172.16.230.21,172.16.230.22,172.16.230.23 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx osd pool default size = 2 # 修改的副本数 public network = 172.16.230.0/24 # 指定public 网络 cluster network = 1.1.1.0/24 # 指定cluster 网络
13. 安装ceph