目录
一、存储概述
1.单机存储设备
1.1 DAS
1.2 NAS
1.3 SAN
2. 单机存储的问题
3. 商业存储解决方案
4.分布式存储(软件定义的存储 SDS)
4.1 分布式存储的类型
二、Ceph简介
1.Ceph 优势
2. Ceph 架构
2.1 RADOS 基础存储系统
2.2 LIBRADOS 基础库
2.3 高层应用接口
2.3.1 对象存储接口 RGW(RADOS Gateway)
2.3.2 块存储接口 RBD(Reliable Block Device)
2.3.3 文件存储接口 CephFS(Ceph File System)
2.4 应用层
3.Ceph 核心组件
4. OSD存储后端
5.Ceph 数据的存储过程
6.Ceph 版本发行生命周期
7.Ceph 集群部署
8.Ceph 生产环境推荐
三、基于 ceph-deploy 部署 Ceph 集群的准备工作
1.关闭 selinux 与防火墙
2.根据规划设置主机名
3.配置 hosts 解析
4.安装常用软件和依赖包
5.在 admin 管理节点配置 ssh 免密登录所有节点
6.所有节点配置时间同步
7.所有节点配置 Ceph yum源
8.为node节点配备双网卡
9.为node节点添加3块磁盘
四、部署 Ceph 集群
1.安装 ceph-deploy 部署工具
2.在管理节点为其它节点安装 Ceph 软件包
3.生成初始配置
4.在管理节点初始化 mon 节点
4.1命令执行成功后会在 /etc/ceph 下生成配置文件
4.2查看状态
5.部署能够管理 Ceph 集群的节点(可选)
6.部署 osd 存储节点
6.1添加 osd 节点
6.2查看 ceph 集群状态
6.3扩容 osd 节点
7.部署 mgr 节点
8.开启监控模块
8.1在 ceph-mgr Active节点执行命令开启
8.2 开启 dashboard 模块
8.3 禁用 dashboard 的 ssl 功能
8.4 配置 dashboard 监听的地址和端口
8.5 重启 dashboard
8.6 确认访问 dashboard 的 url
8.7 设置 dashboard 账户以及密码
8.8 访问查看监控模块
EMC、NetAPP、IBM、DELL、华为、浪潮
Ceph、TFS、FastDFS、MooseFS(MFS)、HDFS、GlusterFS(GFS)
存储机制会把数据分散存储到多个节点上,具有高扩展性、高性能、高可用性等优点。
Ceph使用C++语言开发,是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。
Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack,Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储。
粗略估计,我国70%—80%的云平台都将Ceph作为底层的存储平台,由此可见Ceph俨然成为了开源云平台的标配。目前国内使用Ceph搭建分布式存储系统较为成功的企业有华为、阿里、中兴、华三、浪潮、中国移动、网易、乐视、360、星辰天合存储、杉岩数据等。
自下向上,可以将Ceph系统分为四个层次。
Librados提供了与RADOS进行交互的方式,并向上层应用提供Ceph服务的API接口,因此上层的RBD、RGW和CephFS都是通过Librados访问的,目前提供PHP、Ruby、Java、Python、Go、C和C++支持,以便直接基于RADOS(而不是整个Ceph)进行客户端应用开发。
网关接口,基于Librados开发的对象存储系统,提供S3和Swift兼容的RESTful API接口。
基于Librados提供块设备接口,主要用于Host/VM。
Ceph文件系统,提供了一个符合POSIX标准的文件系统,它使用Ceph存储集群在文件系统上存储用户数据。
基于高层接口或者基础库Librados开发出来的各种APP,或者Host、VM等诸多客户端
Ceph是一个对象式存储系统,它把每一个待管理的数据流(如文件等数据)切分为一到多个固定大小(默认4兆)的对象数据(Object),并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。
OSD(Object Storage Daemon,守护进程 ceph-osd):是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。通常至少需要3个OSD来实现冗余和高可用性。
Pool中数据保存方式支持两种类型
Pool、PG 和 OSD 的关系
一个Pool里有很多个PG;一个PG里包含一堆对象,一个对象只能属于一个PG;PG有主从之分,一个PG分布在不同的OSD上(针对多副本类型)
OSD 有两种方式管理它们存储的数据。在 Luminous 12.2.z 及以后的发行版中,默认(也是推荐的)后端是 BlueStore。在 Luminous 发布之前, 默认是 FileStore, 也是唯一的选项。
BlueStore 的主要功能包括:
每个对象都会有一个唯一的 OID,由 ino 与 ono 组成:
比如:一个文件 FileID 为 A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的 oid 则为 A0 与 A1。
Ceph从Nautilus版本(14.2.0)开始,每年都会有一个新的稳定版发行,预计是每年的3月份发布,每年的新版本都会起一个新的名称(例如,“Mimic”)和一个主版本号(例如,13代表Mimic,因为“M”是字母表的第13个字母)。
版本号的格式为 x.y.z,x 表示发布周期(例如,13 代表 Mimic,17 代表 Quincy),y 表示发布版本类型,即
目前 Ceph 官方提供很多种部署 Ceph 集群的方法,常用的分别是 ceph-deploy,cephadm 和 二进制:
Ceph 环境规划
主机名 Public网络 Cluster网络 角色
admin 192.168.88.10 admin(管理节点负责集群整体部署)、client
node01 192.168.88.20 192.168.100.20 mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node02 192.168.88.30 192.168.100.30 mon、mgr、osd(/dev/sdb、/dev/sdc、/dev/sdd)
node03 192.168.88.40 192.168.100.40 mon、osd(/dev/sdb、/dev/sdc、/dev/sdd)
client 192.168.88.50 client
可选步骤:创建 Ceph 的管理用户
useradd cephadm
passwd cephadm
visudo
cephadm ALL=(root) NOPASSWD:ALL
systemctl disable --now firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
hostnamectl set-hostname admin
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname client
cat >> /etc/hosts << EOF
192.168.88.10 admin
192.168.88.20 node01
192.168.88.30 node02
192.168.88.40 node03
192.168.88.50 client
EOF
yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools
>python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel
>freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel
>glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl
>curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl
>openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients
>openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool
>vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers
>pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen
>perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo
>libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy
>leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat
>chrony sshpass
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
vim /etc/ssh/ssh_config
StrictHostKeyChecking no #设为no,无需验证
sshpass -p '123456' ssh-copy-id root@admin
sshpass -p '123456' ssh-copy-id root@node01
sshpass -p '123456' ssh-copy-id root@node02
sshpass -p '123456' ssh-copy-id root@node03
systemctl enable --now chronyd
timedatectl set-ntp true #开启 NTP
timedatectl set-timezone Asia/Shanghai #设置时区
chronyc -a makestep #强制同步下系统时钟
timedatectl status #查看时间同步状态
chronyc sources -v #查看 ntp 源服务器信息
timedatectl set-local-rtc 0 #将当前的UTC时间写入硬件时钟
#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
#关闭无关服务
systemctl disable --now postfix
wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
rpm -ivh ceph-release-1-1.el7.noarch.rpm --force
#执行完上面所有的操作之后重启所有主机(可选)
sync
reboot
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens35
vim ifcfg-ens35
#修改网卡地址
node01:192.168.100.20
node01:192.168.100.30
node01:192.168.100.40
systemctl restart network
#在线刷新磁盘
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
#为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行
mkdir -p /etc/ceph
#在admin节点安装
cd /etc/ceph
yum install -y ceph-deploy
ceph-deploy --version
#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin
#ceph-deploy install 本质就是在执行下面的命令:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw
#也可采用手动安装 Ceph 包方式,在其它节点上执行下面的命令将 Ceph 的安装包都部署上:
sed -i 's#download.ceph.com#mirrors.tuna.tsinghua.edu.cn/ceph#' /etc/yum.repos.d/ceph.repo
yum install -y ceph-mon ceph-radosgw ceph-mds ceph-mgr ceph-osd ceph-common ceph
#在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点
cd /etc/ceph
ceph-deploy new --public-network 192.168.88.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03
#命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.conf #ceph的配置文件
ceph-deploy-ceph.log #monitor的日志
ceph.mon.keyring #monitor的密钥环文件
cd /etc/ceph
ceph-deploy mon create node01 node02 node03 #创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台
ceph-deploy --overwrite-conf mon create-initial #配置初始化 mon 节点,并向所有节点同步配置
# --overwrite-conf 参数用于表示强制覆盖配置文件
ceph-deploy gatherkeys node01 #可选操作,向 node01 节点收集所有密钥
ll /etc/ceph
ceph.bootstrap-mds.keyring #引导启动 mds 的密钥文件
ceph.bootstrap-mgr.keyring #引导启动 mgr 的密钥文件
ceph.bootstrap-osd.keyring #引导启动 osd 的密钥文件
ceph.bootstrap-rgw.keyring #引导启动 rgw 的密钥文件
ceph.client.admin.keyring #ceph客户端和管理端通信的认证密钥,拥有ceph集群的所有权限
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring
#在 mon 节点上查看自动开启的 mon 进程
ps aux | grep ceph
#在管理节点查看 Ceph 集群状态
cd /etc/ceph
ceph -s
#查看 mon 集群选举的情况
ceph quorum_status --format json-pretty | grep leader
#扩容 mon 节点
ceph-deploy mon add <节点名称>
#在mgr节点执行,可实现在各个节点执行 ceph 命令管理集群
cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03 #向所有 mon 节点同步配置,确保所有 mon 节点上的 ceph.conf 内容必须一致
ceph-deploy admin node01 node02 node03 #本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点
#在 mon 节点上查看
ls /etc/ceph
ceph.client.admin.keyring ceph.conf rbdmap tmpr8tzyc
cd /etc/ceph
ceph -s
#主机添加完硬盘后不要分区,直接使用
#如果是利旧的硬盘,则需要先擦净(删除分区表)磁盘(可选,无数据的新硬盘可不做)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb
#在mgr节点操作
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb
ceph -s
ceph osd stat
ceph osd tree
rados df
ceph osd status #查看 osd 状态,需部署 mgr 后才能执行
ceph osd df #查看 osd 容量,需部署 mgr 后才能执行
cd /etc/ceph
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd
添加 OSD 中会涉及到 PG 的迁移,由于此时集群并没有数据,因此 health 的状态很快就变成 OK,如果在生产环境中添加节点则会涉及到大量的数据的迁移。
#ceph-mgr守护进程以Active/Standby模式运行,可确保在Active节点或其ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。根据官方的架构原则,mgr至少要有两个节点来进行工作。
cd /etc/ceph
ceph-deploy mgr create node01 node02
ceph -s
#解决 HEALTH_WARN 问题:mons are allowing insecure global_id reclaim问题:
禁用不安全模式:ceph config set mon auth_allow_insecure_global_id_reclaim false
#扩容 mgr 节点
ceph-deploy mgr create <节点名称>
ceph -s | grep mgr
yum install -y ceph-mgr-dashboard
cd /etc/ceph
ceph mgr module ls | grep dashboard
ceph mgr module enable dashboard --force
ceph config set mgr mgr/dashboard/ssl false
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
ceph config set mgr mgr/dashboard/server_port 8000
ceph mgr module disable dashboard
ceph mgr module enable dashboard --force
ceph mgr services
echo "12345678" > dashboard_passwd.txt
ceph dashboard set-login-credentials admin -i dashboard_passwd.txt
或
ceph dashboard ac-user-create admin administrator -i dashboard_passwd.txt
浏览器访问:http://192.168.80.11:8000 ,账号密码为 admin/12345678