Ceph基础:
1.Ceph 是一个开源的分布式存储系统,同时支持对象存储、块设备、文件系统. 2.ceph 是一个对象(object)式存储系统,它把每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认 4 兆)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。 3.对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为RADOS(reliable automatic distributed object store)存储集群,即可靠的、自动化的、分布式的对象存储系统。 4.librados 是 RADOS 存储集群的 API,支持 C/C++/JAVA/python/ruby/php/go等编程语言客户端。 Ceph涉及组件以及作用:1. Ceph监视器(ceph-mon):用于维护集群状态映射(maintains maps of the cluster state),比如 ceph 集群中有多少存储池、每个存储池有多少 PG 以及存储池和 PG的映射关系等,monitor map, manager map, the OSD map, the MDS map, and theCRUSH map,这些映射是 Ceph 守护程序相互协调所需的关键群集状态,此外监视器还负责管理守护程序和客户端之间的身份验证(认证使用 cephX 协议)。通常至少需要三个监视器才能实现冗余和高可用性
2. Ceph管理器(ceph-mgr):ceph manager守护进程负责跟踪运行时指标和ceph集群当前的状态,包括存储利用率,当前性能指标和系统负载等,ceph-mgr还托管一些python模块,以实现基于web的ceph仪表盘和rest api,通常要实现高可用至少需要2个ceph-mgr进程,通常ceph-mon和ceph-mgr个数相同,1个ceph-mon同节点会伴随1个ceph-mgr守护进程。
3. Ceph对象存储(ceph-osd):提供存储数据,操作系统上的一个磁盘就是一个 OSD 守护程序,OSD 用于处理 ceph集群数据复制,恢复,重新平衡,并通过检查其他 Ceph OSD 守护程序的心跳来向 Ceph监视器和管理器提供一些监视信息。通常至少需要 3 个 Ceph OSD 才能实现冗余和高可用性。
4. Ceph元数据服务(ceph-mds):Ceph MDS为ceph文件系统存储元数据,注意Ceph块设备和对象存储不用mds存储元数据,Ceph MDS允许POSIX文件系统用户执行基本命令,而不会将压力都集中到Ceph OSD集群上,通常mds可以选择部署至少2个节点,可以和其他组件一起也可以分开。
基于以上,本次部署采用Ubuntu 18.04.5-server版本,Ceph采用pacific版
环境准备:计划采用9台虚拟机机分开部署,1台用于部署,3台监视,2台管理,最后3台存储节点,2个网段,一个用cluster,一个用于public
Cluster网段:172.16.1.0/24
Public网段: 192.168.79.0/24
具体规划如下:
基础配置:(这里可以先初始化一台模板,配置完后在克隆):
1.更换源,这里采用清华镜像地址:
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | apt-key add - Ubuntu18.04.x: cat /etc/apt/sources.list # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main # echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main" >> /etc/apt/sources.list 更换完成后,执行apt-get update && apt-get upgrade
2.时间同步:
apt update
apt install chrony -y
vim /etc/chrony/chrony.conf # 修改为阿⾥云时钟同步服务器 # 公⽹ server ntp.aliyun.com minpoll 4 maxpoll 10 iburst server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst server ntp7.aliyun.com minpoll 4 maxpoll 10 iburst # 重启服务 systemctl restart chrony systemctl status chrony systemctl enable chrony # 查看时钟同步状态 timedatectl status # 写⼊系统时钟 hwclock -w # 重启服务器 reboot 3.更改IP地址
配置完成后,执行netplan apply
4.添加一个Ceph账户并给与权限,后期OSD挂载可能涉及
groupadd -r -g 2022 ceph && useradd -r -m-s /bin/bash -u 2022 -g 2022 ceph && echo ceph:123456 | chpasswd echo "ceph ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers5.配置/etc/hosts主机解析
在上面全部配置完成后,按规划地址克隆其他服务器,并更改IP
集群部署:
1.配置免秘钥登录:
在 ceph-deploy 节点配置允许以非交互的方式登录到各节点 root@ceph-deploy:~# ssh-keygen -t rsa root@ceph-deploy:~# ssh-copy-id 172.16.1.161 root@ceph-deploy:~# ssh-copy-id 172.16.1.162 略(这里可以写脚本,批量执行) 2.安装 ceph 部署工具: root@ceph-deploy:~# apt-cache madison ceph-deploy 回显如下: ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages ceph-deploy | 2.0.1 | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main i386 Packages ceph-deploy |1.5.38-0ubuntu1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe amd64 Packages ceph-deploy | 1.5.38-0ubuntu | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/universe i386 Packages3.初始化 mon 节点:
[root@ceph-deploy ~]# mkdir ceph-cluster [root@ceph-deploy ~]# cd ceph-cluster/ 初始化 mon 节点过程如下: Ubuntu 各服务器需要单独安装 Python2: root@ceph-mon1:~# apt install python2.7 -y root@ceph-mon1:~# ln -sv /usr/bin/python2.7 /usr/bin/python2 完成后执行:ceph-deploy new --cluster-network 172.16.1.0/24 --public-network 192.168.79.0/24 ceph-mon1.example.com验证初始化:
4.初始化 ceph 存储节点:
[ceph@ceph-deploy ceph-cluster]# ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3 5.配置 mon 节点并生成及同步秘钥(注意:在mon节点执行): root@ceph-mon1:~# apt install ceph-mon root@ceph-mon2:~# apt install ceph-mon root@ceph-mon3:~# apt install ceph-mon
一路回车,3台mon节点一样操作
完成后,在deploy部署节点,执行
[root@ceph-deploy ceph-cluster]# ceph-deploy mon create-initial 在mon节点验证:
6.分发 admin 秘钥: root@ceph-deploy:~# apt install ceph-common #先安装 ceph 的公共组件 root@ceph-node1:~# apt install ceph-common -y root@ceph-node2:~# apt install ceph-common -y root@ceph-node3:~# apt install ceph-common -y root@ceph-node4:~# apt install ceph-common -y root@ceph-deploy:/home/ceph/ceph-cluster# ceph-deploy admin ceph-node1 ceph-node2 ceph-node3 如下图:
node节点验证:
7.配置 manager 节点:
初始化 ceph-mgr 节点: [root@ceph-mgr1 ~]#apt install ceph-mgr 2台mgr节点一样操作: 完成后执行: [root@ceph-deploy ceph-cluster]# ceph-deploy mgr create ceph-mgr1mgr节点验证:
8.ceph-deploy 管理 ceph 集群:
在 ceph-deploy 节点配置一下系统环境,以方便后期可以执行 ceph 管理命令。root@ceph-deploy:~# apt install ceph-common [root@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-deploy #推送正证书给自己 执行:root@ceph-deploy:~/ceph-cluster# ceph -s 若显示有如下所示:
执行:root@ceph-deploy:~/ceph-cluster# ceph config set mon auth_allow_insecure_global_id_reclaim false
9:准备 OSD 节点:
擦除磁盘之前通过 deploy节点对 node 节点执行安装 ceph 基本运行环境 [root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node1 [root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node2 [root@ceph-deployceph-cluster]# ceph-deploy install --release pacific ceph-node3
查看列出磁盘信息:
[root@ceph-deploy ceph-cluster]# ceph-deploy disk list ceph-node1 #列出远端存储 node1 节点的磁盘信息
使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 数据磁盘:
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdb
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdc
[root@ceph-deploy ceph-cluster]#ceph-deploy disk zap ceph-node1 /dev/sdd
注:所有node节点执行同样操作
10.添加OSD
在部署节点执行:
ceph-deploy osd create ceph-node1 --data /dev/sdb
ceph-deploy osd create ceph-node1 --data /dev/sdc
ceph-deploy osd create ceph-node1 --data /dev/sdd
ceph-deploy osd create ceph-node2 --data /dev/sdb
ceph-deploy osd create ceph-node2 --data /dev/sdc
ceph-deploy osd create ceph-node2 --data /dev/sdd
ceph-deploy osd create ceph-node3 --data /dev/sdb
ceph-deploy osd create ceph-node3 --data /dev/sdc
ceph-deploy osd create ceph-node3 --data /dev/sdd
在node 节点验证:
11.扩容mod节点:
[root@ceph-deploy ceph-cluster]# ceph-deploy mon add ceph-mon2 [root@ceph-deploy ceph-cluster]# ceph-deploy mon add ceph-mon3 12.扩容mgr节点: [root@ceph-deploy ceph-cluster]# ceph-deploy mgr create ceph-mgr2 [root@ceph-deploy ceph-cluster]# ceph-deploy admin ceph-mgr2 #同步配置文件到ceph-mg2 节点 13.最后验证:
至此,集群部署完成
客户端验证:
准备一台 centos的虚拟机,配置好Yum源,
在客户端安装 ceph-common:执行:
yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y yum install ceph-common 完成后,从ceph部署节点执行scp配合和验证文件 [root@ceph-deploy ceph-cluster]# scp ceph.conf ceph.client.admin.keyring root@172.16.1.XX:/etc/ceph/ Ceph集群块设备 RBD准备: 创建 RBD: #ceph osd pool create myrbd1 64 64 #创建存储池,指定 pg 和 pgp 的数量,pgp 是对存在于 pg 的数据进行组合存储,pgp 通常等于 pg 的值 pool 'myrdb1' created # ceph osd pool --help # ceph osd pool application enable myrbd1 rbd #对存储池启用 RBD 功能 enabled application 'rbd' on pool 'myrdb1' # rbd pool init -p myrbd1 #通过 RBD 命令对存储池初始化 创建并验证 img: #rbd create myimg1 --size 5G --pool myrbd1 # rbd create myimg2 --size 3G --pool myrbd1 --image-format 2 --image-feature layering 后续步骤会使用 myimg2 ,由于 centos 系统内核较低无法挂载使用,因此只开启部分特 性。除了 layering 其他特性需要高版本内核支持 #rbd ls --pool myrbd1 #列出指定的 pool 中所有的 img myimg1 myimg2
完成上述操作后:
客户端映射 img: 在cenos上执行: [root@ceph-client ceph]# rbd -p myrbd1 map myimg2 出现如下所示: rbd: sysfs write failed RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten". In some cases useful info is found in syslog - try "dmesg | tail". rbd: map failed: (6) No such device or address 执行括号中的rbd feature disable myrdb1/myimg1 object-map fast-diff deep-flatten 再执行 lsblk查看
已发现rbd0
创建一个挂载目录test,并对rbd0执行mkfs.xfs /dev/rdb0格式化 ,并挂载到test目录下
写入一个文件测试:
dd if=/dev/zero of=/test/ceph-test-file bs=1MB count=300 300+0 records in 300+0 records out 300000000 bytes (300 MB) copied, 3.49849 s, 85.8 MB/s 最后到ceph端验证:
可以看到容量已经成功完成,完