ceph重要的核心组件分别是:Ceph OSD、Ceph Monitor和Ceph MDS。一个Ceph存储集群至少需要一个ceph monitor和至少两个Ceph OSD。运行Ceph文件系统的客户端时,Ceph的元数据服务(MDS)必不可少的。
Ceph OSD:全称是Object Storage Device,主要功能是存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给Ceph Monitor,。例如ceph OSD心跳等。一个Ceph的存储集群,至少两个Ceph OSD来实现 active + clean健康状态和有效的保存数据的双副本(默认情况下是双副本,可以调整)。每一个Disk、分区都可以成为一个OSD。
Ceph Monitor: Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map。
Ceph MDS:全称是Ceph Metadata Server,主要保存的是Ceph文件系统(File System)的元数据(metadata)。注意:ceph块存储和ceph的对象存储都不需要Ceph MDS。Ceph MDS为基于POSIX文件系统的用户提供一些基础命令。例如:ls、find等命令。
2.ceph的数据读写流程
file写入过程:
当某个client需要向Ceph集群写入一个file时, 首先需要在本地完成寻址流程, 将file变为一个object, 然后找出存储该object的一组三个OSD。
找出三个OSDS, client将直接和Primary OSD通信, 发起写入操作(步驟1 ) 。 Primary OSD收到请求后, 合别向Secondary OSD和 Tertiary OSD发起写入操作(步驟2 、 3) 。 当Secondary OSD和Tertiary OSD各自完成写入操作后, 将分别向Primary OSD发送确认信息(步骤4、 5) 。 当Primary OSD确信其他两个OSD的写入完成后, 则自己也完成数据写入, 并向client确认object写入操作完成( 步骤6)
3.使用ceph-deploy安装一个最少三个节点的ceph集群 推荐3个或以上的磁盘作为专用osd
分别为三个节点添加三个新硬盘:
安装前准备:
关闭防火墙,禁止selinux:
[root@localhost ~]# sestatus SELinux status: disabled [root@localhost ~]# firewall-cmd --state not running
配置主机名和hosts解析:
给主机4配置主机名:
[root@localhost ~]# hostnamectl set-hostname client
都配置hosts解析:
[root@localhost ~]# cat >> /etc/hosts << EOF > 192.168.116.141 node1 > 192.168.116.143 node2 > 192.168.116.142 node3 > 192.168.116.145 client > EOF
配置node1到所有节点root用户免密钥互信:
node1上生成密钥对:
[root@localhost ~]# ssh-keygen -f ~/.ssh/id_rsa -N '' -q
公钥分发到所有节点:
[root@localhost ~]# for i in node1 node2 node3 client; do ssh-copy-id $i; done
验证免密钥互信:
[root@localhost ~]# for i in node1 node2 node3 client; do ssh $i hostname; done node1 node2 node3 client
配置时间同步:
[root@localhost ~]# vim /etc/chrony.conf
重启服务,设置开机自启:
[root@localhost ~]# systemctl restart chronyd [root@localhost ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 120.25.115.20 2 6 65 9 -890us[ -162us] +/- 20ms
node1配置为yum仓库服务器,其他节点使用ftp方式使用ceph仓库:
上传ceph.iso到node1:
[root@node1 ~]# ls anaconda-ks.cfg ceph.iso
安装httpd并设置为开机自启动:
[root@node1 yum.repos.d]# yum install -y vsftpd [root@node1 yum.repos.d]# systemctl enable vsftpd --now Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
挂载ceph.iso到/var/ftp:
[root@node1 ~]# echo "/root/ceph.iso /var/ftp/ceph iso9660 defaults 0 0" >> /etc/fstab [root@node1 ~]# mount -a mount: /dev/loop0 is write-protected, mounting read-only [root@node1 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 1.7G 16G 10% / devtmpfs 982M 0 982M 0% /dev tmpfs 993M 0 993M 0% /dev/shm tmpfs 993M 8.7M 984M 1% /run tmpfs 993M 0 993M 0% /sys/fs/cgroup /dev/sda1 1014M 125M 890M 13% /boot tmpfs 199M 0 199M 0% /run/user/0 /dev/loop0 110M 110M 0 100% /var/ftp/ceph [root@node1 ~]# ll /var/ftp/ceph total 10 dr-xr-xr-x 3 root root 2048 Jul 25 11:38 noarch dr-xr-xr-x 3 root root 8192 Jul 25 11:38 x86_64
步骤一:安装ceph-deploy
部署ceph集群:
设置环境变量:export CEPH_DEPLOY_REPO_URL=ftp://node1/ceph/
部署工具:
yum install /var/ftp/ceph/noarch/ceph-deploy-2.0.1-0.noarch.rpm
在node1上创建工作目录:
[root@node1 ~]# mkdir /ceph-cluster [root@node1 ~]# cd /ceph-cluster/ [root@node1 ceph-cluster]#
步骤二:创建ceph集群,在/ceph-cluster目录下生成配置文件。
创建集群,首先设置mon节点:
配置扩展源:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
首先需要安装pip工具,然后利用pip命令安装模块:
[root@localhost ~]# yum install python2-pip -y
[root@localhost ~]# pip install distribute -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
设置mod节点:
[root@localhost ceph-cluster]# ceph-deploy new node1 node2 node3
[root@localhost ceph-cluster]# ll total 16 -rw-r--r-- 1 root root 244 Jul 26 10:45 ceph.conf -rw-r--r-- 1 root root 4869 Jul 26 10:45 ceph-deploy-ceph.log -rw------- 1 root root 73 Jul 26 10:45 ceph.mon.keyring
给所有节点安装ceph相关软件包:
[root@localhost ceph-cluster]# ceph-deploy install node1 node2 node3
添加监控节点:
初始化所有节点的mon服务,也就是启动mon服务:
[root@localhost ceph-cluster]# ceph-deploy mon create-initial
创建ceph管理节点(mgr):
[root@localhost ceph-cluster]# ceph-deploy mgr create node1 node2 node3
步骤三:准备日志磁盘分区:
注意:sdb1和sdb2两个分区用来做存储服务器的journal缓存盘。生产中固态用于缓存,sas用户共享。
1、格式化sdb:
[root@localhost ceph-cluster]# for i in node{1..3}
> do
> ssh $i parted /dev/sdb mklabel gpt
> ssh $i parted /dev/sdb mkpart primary 1 50%
> ssh $i parted /dev/sdb mkpart primart 50% 100%
> done
2、磁盘分区后的默认权限无法让ceph对其进行读写操作,需要修改权限。
[root@localhost ceph-cluster]# for i in node{1..3}
> do
> ssh $i chown ceph.ceph /dev/sdb1 /dev/sdb2
> done
以上操作服务器重启后再次重值导致授权失效,所以需要把规则写到配置文件实现永久有效。
[root@localhost ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules
复制到其他osd节点:
[root@localhost ceph-cluster]# for i in node{2..3}
> do
> scp /etc/udev/rules.d/70-sdb.rules $i:/etc/udev/rules.d/
> done
70-sdb.rules 100% 104 68.7KB/s 00:00
70-sdb.rules 100% 104 63.1KB/s 00:00
步骤四:创建OSD存储空间
1、初始化清空磁盘数据(仅在node1操作):
[root@localhost ceph-cluster]# for i in node{1..3}
> do
> ssh $i parted /dev/sdc mklabel gpt
> ssh $i parted /dev/sdd mklabel gpt
> done
清理磁盘:
[root@localhost ceph-cluster]# for i in node{1..3}
> do
> ssh $i ceph-volume lvm zap /dev/sdc
> ssh $i ceph-volume lvm zap /dev/sdd
> done
2、创建OSD存储空间:
// 创建osd存储设备,sdc提供存储空间,sdb1提供缓存
[root@localhost ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node1
[root@localhost ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node2
[root@localhost ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node3
步骤五:查看ceph状态,验证
在主节点生成的ceph.client.admin.keyring文件拷贝至所有节点的/etc/ceph下:
[root@localhost ceph-cluster]# ceph-deploy admin node1 node2 node3
[root@localhost ceph-cluster]# ceph health
HEALTH_OK
[root@localhost ceph-cluster]# ceph -s
cluster:
id: 6731e8de-3bf6-44ff-866c-b444da73b070
health: HEALTH_OK
services:
mon: 3 daemons, quorum node1,node3,node2 (age 3h)
mgr: node1(active, since 63m), standbys: node2, node3
osd: 3 osds: 3 up (since 3m), 3 in (since 3m)
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 27 GiB / 30 GiB avail
pgs:
步骤六:启用dashboard
自 nautilus开始,dashboard作为一个单独的模块独立出来了,使用时需要在所有的mgr节点上单独安装
[root@localhost ceph-cluster]# for i in node{1..3}
> do
> ssh $i yum install -y ceph-mgr-dashboard
> done
启用dashboard:
[root@localhost ceph-cluster]# ceph mgr module enable dashboard --force
默认启用SSL/TLS,所以需要创建自签名根证书:
[root@localhost ceph-cluster]# ceph dashboard create-self-signed-cert Self-signed certificate created
创建具有管理员角色的用户:
[root@localhost ceph-cluster]# ceph dashboard ac-user-create admin admin administrator
{"username": "admin", "lastUpdate": 1658829730, "name": null, "roles": ["administrator"], "password": "$2b$12$El3UC3jmCNWtz0IjqubFJ.Jj3NS6WlG2c4ysURCBFd4Wk21V0/Voq", "email": null}
查看ceph-mgr服务:
[root@localhost ceph-cluster]# ceph mgr services
{
"dashboard": "https://node1:8443/"
}



