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 |
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-network192.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 admin node1 node2 node3
root@admin:ceph version 16.2.5 (0883bdea7337b95e4b6
11c768c0279868462204a) 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
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 myimg1 --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@adminscp ceph.conf ceph.client.admin.keyring root@xxx:/etc/ceph/
客户端:rbd -p myrdb1 map img1 注意:ceph为P版,客户端版本过低,会导致无法映射。
Ubuntu18.04部署P版ceph