Ubuntu18.04部署P版ceph

ceph作为目前最火的开源分布式存储,支持对象,块,文件存储。把每个需要管理的数据流(比如文件)切分成多个固定大小的对象数据,并以其原子单元作为存取。

一ceph的存储核心服务是rados(可靠,自动化分布式对象存储)。

二ceph集群角色有如下几个

1.若干的 Ceph OSD(对象存储守护程序),一般一块磁盘起一个osd进程。
2.至少需要一个 Ceph Monitors 监视器(1,3,5,7...)用于维护集群状态映射,比如 ceph 集群中有多少存储池、每个存储池有多少 PG 以及存储池和 PG的映射关系等, monitor map, manager map, the OSD map, the MDS map, and theCRUSH map,这些映射是 Ceph 守护程序相互协调所需的关键群集状态,此外监视器还负责管理守护程序和客户端之间的身份验证(认证使用 cephX 协议)。生产环境mon节点一般为3个。
3.两个或以上的 Ceph 管理器 managers。负责跟踪运行时指标和 Ceph 集群的当前状态。
4.高可用的 Ceph Metadata Server(文件系统元数据服务)
5.管理节点,一般是ceph-deploy。生产中管理节点一般不部署其他功能,提高操作安全系数。
 
ceph存储文件过程(crush算法)
1.在ceph中一切皆对象,当一个文件作为对象存储进来时,首先客户端通过mon节点获取集群map副本,使用对象和池ID转换成对象。(任何数据流进来都是二进制,和池ID生成对象名,比如1010+pool 1生成obj1),再和PG数进行哈希就能得到最终存放数据的那个PG。此时crush算法会去根据PG找到对应的主osd和副osd,最终写入数据通知客户端。一切由客户端进行操作,所以不会影响集群性能。
注:crush层次结构
磁盘→节点→机架→DC,当然电源开关等等都是,称为故障域

三正式安装

3.1下载地址

Ubuntu:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/bionic/

3.2部署环境:

主机名 publi network cluster network 功能组件
admin 192.168.89.140 192.168.64.140 ceph-deploy,mon
node1 192.168.89.141 192.168.64.141 mon,osd,mgr
node2 192.168.89.142 192.168.64.142 mon,osd,mgr,mds
node3 192.168.89.143 192.168.64.143 rgw,osd

时间同步

关闭selinux和防火墙

配置域名解析

配置所有节点之间免ssh登录                  注意:  配置的是普通用户

每个节点2块磁盘

3.3ceph安装配置

3.3.1 添加Pacific版本源

root@admin:wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
root@admin:echo "deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main">> /etc/apt/sources.list
root@admin:apt-get update
3.3.2 创建普通用户:不建议用ceph用户,ceph作为守护进程使用。每个节点都需要
root@admin:groupadd -r -g 2022 xxx && useradd -r -m -s /bin/bash -u2022 -g 2022 xxx && echo xxx:123456 | chpasswd
root@admin:echo "xxx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
3.3.3 管理安装ceph-deploy
root@admin:apt install ceph-deploy                        2.0.1版本
3.3.4管理节点初始化mon节点
xxx@admin:mkdir cluster && cd cluster
xxx@admin~/cluster$:ceph-deploy new --cluster-network 192.168.64.0/24 --public-network 192.168.89.0/24 admin node1 node2
报错: bash:python2:command not found
ERROR runtimeError:connecting to host:admin node1 node2 resulted in errors:IOError cant send(already closed)
解决办法:
apt install python2.7 -y       
ln -sv /usr/bin/python2.7 /usr/bin/python2
3.3.5各个节点安装ceph
xxx@admin~/cluster$:ceph-deploy    install --no-adjust-repos --nogpgcheck admin node1 node2 node3
root@admin:ceph version 16.2.5 (0883bdea7337b95e4b611c768c0279868462204a) pacific (stable)    安装完成,可能会因没有修改源安装成13版本
3.3.6 初始化mon并生产秘钥,能看到生成的key
xxx@admin~/cluster$:ceph-deploy mon create-initial
验证mon节点

 

3.3.7 分发admin秘钥,理论上可以让任何节点都管理配置,此外同步集群配置文件和认证文件。一般仅仅是mon节点,当有客户端使用也要分发。

 xxx@admin~/cluster$:ceph-deploy admin admin node1 node2 node3

 

3.3.8部署manager节点(在L版本及以上才有)

 xxx@admin~/cluster$:ceph-deploy mgr create node1 node2(无法连续执行,分开执行单个节点)

 3.3.9ceph-deploy配置系统环境,方便执行ceph命令

xxx@admin~/cluster$:ceph-deploy admin admin  给自己授权

xxx@admin~/cluster$:setfacl -m u:xxx:rw /etc/ceph/ceph.client.admin.keyring
xxx@admin~/cluster$:ceph config set mon auth_allow_insecure_global_id_reclaim false
可以用ceph -s查看集群

 

 3.3.10列出node节点磁盘

xxx@admin~/cluster$:ceph-deploy disk list  node1

 

 3.3.11 添加osd

 xxx@admin~/cluster$:ceph-deploy osd create node1 --data  /dev/sdb     

 其他主机类似操作

 全部添加完查看集群状态ceph osd tree

 

 3.3.12 移除osd

1.停用设备  ceph osd out osd.1

2在osd所在节点停止进程 systemctl stop ceph-osd@1

3.移除设备  ceph osd purge 1 --yes-i-really-mean-it

4.清除osd lvm信息 vgremove ceph-xxx     ceph-xxx信息可以用ceph-volume lvm list查看。此操作不是必须,是用于重新将磁盘添加回集群前操作。

注:也可以删除/dev/dm-xx,同时清除dm-xx的文件系统(dd实现),但不推荐。

3.3.13 测试上传下载

xxx@admin~/cluster$:ceph osd pool create myrbd1  32  32    myrbd1:池名  32:PG 32: PGP

rados put msg1 /var/log/syslog --pool=mypool   把 messages 文件上传到 mypool 并指定对象 id 为 msg1
rados ls --pool=mypool       列出文件
ceph osd map mypool msg1  获取文件信息
rados get msg1 --pool=mypool /opt/my.txt   下载文件
rados rm msg1 --pool=mypool    删除文件
3.3.14 扩展ceph-mon节点
xxx@admin~/cluster:ceph-deploy mon add nodexxx
验证mon状态
ceph quorum_status        ceph quorum_status --format json-pretty
3.3.15 扩展mgr节点
xxx@admin~/cluster:ceph-deploy mgr create  nodexxx
xxx@admin~/cluster:ceph-deploy admin nodexxx   同步配置文件
 
3.3.16 扩展rgw,完成后查看http://xxxxx:7480
xxx@admin~/cluster:ceph-deploy rgw  create  nodexxx

 

 注:由于此时走的是http协议并不安全,可以使用证书加密方式来保障安全。配置如下

→1在rgw节点创建证书目录,并自签证书   

mkdir /etc/ceph/certs

cd certs;openssl genrsa -out civetweb.key 2048

openssl req -new -x509 -key civetweb.key -out civetweb.crt -subj "/CN=rgw.ty.net"

cat civetweb.key civetweb.crt >civetweb.pem

→2 rgw节点的ceph.conf配置新增如下

 →3重启rgw服务

 systemctl restart ceph-radosgw@rgw.node3.service  或者systemctl restart ceph-radosgw.taget

→4修改本地主机的host文件,为了做域名解析  /system32/dirvers/host

验证

 

以下 rbd和cephfs的挂载硬盘均为试验多次重复使用,会有图片不一致之处。

3.3.17创建rbd
root:ceph osd pool application enable myrbd1 rbd #对存储池启用 RBD 功能
root:enabled application 'rbd' on pool 'myrdb1'
root:rbd pool init -p myrbd1 #通过 RBD 命令对存储池初始化  注:非常重要,不然无法使用
rbd需要创建image才能作为块设备使用
root:rbd create img1 --size 5G --pool myrbd1,查看用rbd info myrbd1/img1,rbd info --image img1 --pool myrbd1

3.3.18查看ceph集群使用状态  ceph df

 

3.3.19客户端使用ceph块设备,安装ceph-mon,将管理节点的配置和认证文件同步给客户端

客户端  apt install ceph-common    //  yum install ceph-common    生产为openstack提供块设备较多

管理节点:root@admin scp ceph.conf ceph.client.admin.keyring root@xxx:/etc/ceph/

 客户端:rbd -p myrdb1  map img1        注意:ceph为P版,客户端内核版本或ceph版本过低,会导致无法映射。此模式使用的账号是admin,最高权限

客户端:进行格式化挂载

 

使用普通账号挂载:

→1创建普通账号,可以选择任何组件的权限,mon,mds,rgw,osd等。

→2创建账号对应的key

 

 

→3将key传到客户端

 

 →4客户端使用普通账号登入ceph集群

ceph --user tyy -s

→5客户端映射镜像,格式化挂载使用

 

3.3.20 调整pg,此操作可以在任何mon节点进行

Ceph集群中的PG总数:

PG总数 = (OSD总数 * 100 / 最大副本数)

** 结果必须舍入到最接近的2的N次方幂的值。

Ceph集群中每个pool中的PG总数:

存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数

→1  检查rbd这个pool里已存在的PG和PGP数量:

root:ceph osd pool get myrbd1 pg_num

pg_num: 128

root:ceph osd pool get myrbd1 pgp_num

pg_num: 128

→2 检查pool的复制size

root:ceph osd dump |grep size|grep myrbd1(池名)

pool 2 'myrbd1' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0

       2:池 ID

       myrbd1:池名

       replicate size:副本数

→3 根据公式计算出pg值并修改,本试验中pg=500/3,按照pg值必须接近2^n,所以修改成256。当然试验可以自定义值,不得超过默认值340即可。

ceph osd pool set myrbd1  pg_num 256

ceph osd pool set myrbd1 pgp_num 256

注意:因为仅仅创建了一个池,如果有多个池,pg需要除以池数,每个池都要进行pg和pgp值得修改。

 

3.3.21使用cephfs

→1 在deploy节点选择node2创建mds服务器

 xxx@admin~/cluster:ceph-deploy mds create node2

→2 在node2上创建cephfs所需要的数据池和元数据池

 ceph osd pool create cephfs_data 16

ceph osd pool create cephfs_metadata 16    

注意:两个池的pg值可以不同

→3 创建cephfs文件系统

 ceph fs new cephfs_storage cephfs_metadata cephfs_data

查看是否成功创建

 

 

 可以看到对应的池,文件系统都已成功

→4 客户端安装ceph-mon,并挂载cephfs。

apt install ceph-mon   -y // yum install ceph-mon -y

创建目录点

mkdir /mnt/cephfs

挂载并验证

mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secret=AQCnHhhhbsRFDRAAOU4KgYm73B2ZAWnZtjDG7w==

 

 

 注意:命令中的secret是从mon节点拷贝过去的,/etc/ceph/ceph.client.admin.keyring中的key。由于明文相对危险,所以一般把key单独拿出来做个文件。

 

把key值放出admin.secret 。然后命令修改为mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/admin.secret。

 

可以像块设备一样使用普通账号,需要修改池账号权限池为文件存储池,依旧以上图池为例。pool=cephfs_data,普通账号为ty。

将生成的keyring传到客户端上,登录ceph集成--ceph --user  ty -s。

客户端进行挂载,方式依旧如上所写可以用key或者admin.secret文件,但是name需要修改成ty。

当然有多个mds服务,可以同时挂载mount -t ceph xxxx:6789,xxxxxx:6789,192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/ty.secret

 

 

 

 

→5删除文件系统以及池

客户端取消挂载   umount /mnt/cephfs

cephfs节点     systemctl stop ceph-mds.target       

       ceph fs rm cephfs_storage  --yes-i-really-mean-it
      ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
      ceph osd pool rm cephfs_data cephfs_metadata --yes-i-really-really-mean-it

注意:如果报错无法删除,请在mon节点/etc/ceph/ceph.conf添加mon allow pool delete = true,将此文件同步给其他mon节点
ceph-deploy --overwrite-conf config push node{1..2},所有mon节点重启服务:systemctl restart ceph-mon.target

 3.3.22 镜像快照
→1创建快照.
rbd snap create --pool myrbd1 --image img1 --snap img1-snap

 →2删除快照

rbd snap remove --pool myrbd1 --image img1 --snap img1-snap
→3回滚快照
rbd snap rollback --pool myrbd1 --image img1 --snap img1-snap
 
 
 
--------------------------------------------------------------------
但凡涉及ceph.conf配置的修改,必须同步到其他节点,以免文件不同步出错。
但凡涉及服务,例如mds,rgw,osd,mon等变动必须重启服务。
 
 
 
 
posted @   好像认识你很久了  阅读(647)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示