存储内容包括元数据和数据,名称节点(NameNode)存放元数据,数据节点(DataNode)存放实体数据。
元数据节点通常将随机IO转换为顺序IO进行存取,参考redis的AOF机制。
osd (Object Storage Device)
mon (Monitor):维护集群元数据
mgr (Manager):维护查询类操作
将整个存储空间切分为区,每个分区就是存储池,存储池的大小取决于磁盘大小,
SP (Storage Pool):rados cluster抽象而成的存储池
PG (Placement Group):存储池中可以映射到osd上的归置组,便于管理
存储过程:
对象名称进行一致性hash计算,映射到PG上,根据存储池类型和冗余副本数量,找到足量的osd进行存储。
FileStore:将文件分割成对象,OSD格式化成了XFS文件系统,需要先将对象转换成文件,属组文件级元数据放在元数据区,对象自己的元数据放在levelDB中。
BlueStore:OSD就是裸设备不进行格式化,levelDB(RocksDB)配合BlueFS存放元数据,其他地方直接存放并管理数据。
ifconfig
fdisk -l /dev/vd*
cat /etc/hosts
设定时钟同步
若可直接访问互联网,启动chronyd服务并设定随系统启动
systemctl start chronyd.service
systemctl enable chronyd.service
配置本地时间服务器,当存在可用本地服务器时,修改节点的/etc/crhony/conf配置文件
server CHRONY-SERVER-NAME-OR-IP iburst
主机名称解析
ip hostname name…
关闭iptables或firewalld服务
在不确定具体启动状态的前提下,同时关闭并禁用二者即可
systemctl stop firewalld.service
systemctl stop iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service
yum仓库配置
在ceph-admin节点上,安装生成所需版本的yum仓库配置
rpm -ivh https://mirrors.aliyun.com/ceph/rom-xxx/xx/xxx/xxxx.rpm
cd /etc/yum.repos.d/
cat ceph.repo
yum install epel-release // 相关依赖库
创建Ceph特定用户账号
ceph-deploy必须以普通用户登录到各目标节点,且此用户需要拥有无密码使用sudo命令的权限,以便在安装软件及生成配置文件的过程中无需中断配置过程。新版ceph-deploy支持使用"–username {username}"选项提供可无密码使用sudo命令的用户名,指定的用户需要能够通过SSH协议自动认证并连接到各个节点
在各个节点创建新用户并设置密码magedu
useradd cephadm && echo “magedu” | passwd --stdin cephadm
确保无密码执行sudo命令 (可直接编辑/etc/sudoers.d/cephadm)
echo “cephadm ALL = (root) NOPASSWD:ALL” | sudo tee /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm
sudo -l
su - cephadm
配置用户基于密钥的ssh认证
使用cephadm用户生成密钥
ssh-keygen -t rsa -P ‘’
ssh-copy-id -i .ssh/id_rsa.pub cephadm@localhost
ssh-copy-id -i .ssh/id_rsa.pub cephadm@store01
[scp -rp .ssh/ cephadm@store01:/home/cephadm] // 或者直接copy文件夹
为了方便操作,可修改~/.ssh/config文件,设定访问其它节点默认使用的用户名
Host store01
Hostname store01.magedu.com
User cephadm
…
配置其他节点sudo权限
scp -rp /etc/sudoers.d/cephadm store01:/etc/sudoers.d/
管理节点安装ceph-deploy
yum update
yum install ceph-deploy python-setuptools python2-subprocess32
创建集群相关配置文件目录
mkdir ceph-cluster
cd ceph-cluster
初始化第一个MON节点
ceph-deploy new {initial-monitor-node(s)} // 名称必须与节点当前使用的主机名称保存一致
编辑生成ceph.conf配置文件,在[global]配置段中设置面向客户端通信使用的IP地址所在网络
public network = 172.20.0.0/16
安装Ceph集群
ceph-deploy install {ceph-node}[{ceph-node}…]
配置初始MON节点,手机所有密钥
ceph-deploy mon create-install
将配置文件和admin密钥拷贝到各节点上,以免每次执行需要指定MON节点和amdin.keyring
ceph-deploy admin store01 …
在需要运行ceph命令的节点上以root身份设定cephadm可以读取keyring文件
setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring
配置manager节点,启动mgr进程
ceph-deploy mgr create store01
在Ceph集群的各节点上以cephadm用户测试集群的状态
ceph health
ceph -s
整理磁盘
ceph-deploy disk list {osd-server-name} …
ceph-deploy disk zap {osd-server-name} {disk-name}
【如果对应节点的设备有数据,需要以root身份执行ceph-volumn lvm zap --destroy {DEVICE}】
添加OSD
ceph-deploy osd create {node} --data {data-disk}
ceph-deploy osd list {node} …
ceph osd stat 或者 ceph osd {dump / ls}
移除OSD
ceph osd out {osd-num}
sudo systemctl stop ceph-osd@{osd-num}
ceph osd rm {osd-num}
上传/下载数据对象
ceph osd pool create {pool-name} [rule-num] {PG-num}
rados put {object-name} {obj-location} --pool={pool-name} // 或者使用-p 指定存储池
rados ls --pool = {pool-name}
ceph osd map {pool-name} {object} // 获取在存储池中数据对象的具体位置信息
rados rm {object-name} --pool = {pool-name}
ceph osd pool rm {pool-name} {pooll-name} --yes-i-really-really-mean-it // 需要先启用存储池删除配置
ceph-deploy mon add {ceph-nodes} // 最好是奇数个节点
ceph quorum_status --format json-query
ceph-deploy mgr create {ceph-nodes}
ceph -s
创建存储池并启用rbd功能进行初始化
ceph osd pool create {pool-name} {PG-num}
ceph osd pool application enable {pool-name} rbd
rbd pool init -p {pool-name}
按需创建映像,将映像文件作为块设备使用
rbd create {image-name} --size {size} --pool {pool-name}
rbd info // 获取相关信息