一、概述
1、分布式存储系统
是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储
2、特点
2、1 统一存储
虽然 ceph 底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
2、2高扩展性
扩容方便、容量大。能够管理上千台服务器、EB 级的容量。
2、3可靠性强
支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自动管理、自动修复。无单点故障,容错性强。
2 、4高性能
因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的 IOPS和吞吐量越高。另外一点 ceph 客户端读写数据直接与存储设备(osd) 交互。
二、组件
1. Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
2. OSD
OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
3. MDS
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
4. Object
Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
5. PG
PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
6. RADOS
RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
7. Libradio
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
8. CRUSH
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
9. RBD
RBD全称RADOS block device,是Ceph对外提供的块设备服务。
10. RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
11. CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。
三、架构图
1、文件上传
先将文件切片成N个object(如果开启了cephFS,可以使用MDS缓存)
切片后的文件object会存入到Ceph中
2、文件存储前
会经过CRUSH算法,计算当前文件存储归结于哪个PG
PG是逻辑概念上对文件存储范围划分的索引
根据PG索引将文件存储到指定服务器的OSD中
四、部署
1、环境拓扑
centos1
monitor
osd
192.168.28.5
centos2
osd
192.168.28.6
centos3
osd
192.168.28.7
centos4
Client
192.168.28.8
2、准备工作
关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭图形网络管理器
systemctl stop NetworkManager
systemctl disable NetworkManager
配置IP
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cat << e > /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=$1
PREFIX=24
GATEWAY=192.168.28.2
DNS1=192.168.28.2
e
systemctl restart network
这是一个脚本ip
关闭Selinux
setenforce 0
主机名修改
hostnamectl set-hostname centos{1..4} bash
修改ssh配置
sed -i "s/#UseDNS yes/UseDNS no/" /etc/ssh/sshd_config systemctl restart sshd
每个机子做一下
hosts文件修改
每个节点主机都需要操作
vim /etc/hosts 192.168.28.5 centos1 192.168.28.6 centos2 192.168.28.7 centos3 192.168.28.8 centos4
scp /etc/hosts 192.168.28.6:/etc/ scp /etc/hosts 192.168.28.7:/etc/ scp /etc/hosts 192.168.28.8:/etc/
ssh免密配置
centos1
ssh-keygen ssh-copy-id 192.168.28.5 这几步是其余三台机器传完秘钥再开始 cat .ssh/ authorized_keys for i in 6 7 8;do scp .ssh/authorized_keys 192.168.28.$i:/root/.ssh/; done
centos2
ssh-keygen ssh-copy-id 192.168.28.5
centos3
ssh-keygen ssh-copy-id 192.168.28.5
centos4
ssh-keygen ssh-copy-id 192.168.28.5
传完之后再用ssh全部测试一遍
ssh centos1 ssh centos2 ssh centos3 ssh centos4
时间同步
在centos1上开启时间同步服务器
安装
yum install -y ntp
配置
vim /etc/ntp.conf server 127.127.1.0 fudge 127.127.1.0 stratum 8
server 127.127.1.0
定义时间服务器
fudge 127.127.1.0 stratum 8
定义时间层次
启动
systemctl start ntpd systemctl enable ntpd
客户端对时
for i in 6 7;do ssh 192.168.28.$i ntpdate 192.168.28.5;done
添加磁盘
热扫描磁盘
echo "- - -" > /sys/class/scsi_host/host0/scan for i in 6 7;do ssh 192.168.28.$i echo "- - -" > /sys/class/scsi_host/host0/scan && lsblk;done cd /sys/class/scsi_host/ for i in `ls ./`;do echo "- - -" > $i/scan;done lsblk
格式化
三个都格式一下
mkfs.xfs /dev/sdb
3、ceph安装
只在centos1执行
yum install epel-release -y yum install lttng-ust -y
添加ceph安装源
yum -y install ceph ceph-deploy
集群构建
创建集群目录
mkdir -p /usr/local/soft/cephcluster cd /usr/local/soft/cephcluster
创建集群
ceph-deploy new centos1 centos2 centos3
修改配置文件
vim /usr/local/soft/cephcluster/ceph.conf
#对外开放网段
public network = 192.168.28.0/24
# 设置pool池默认分配数量
osd pool default size = 2
# 容忍更多的时钟误差
mon clock drift allowed = 2
mon clock drift warn backoff = 30
# 允许删除pool
mon_allow_pool_delete = true
[mgr]
# 开启WEB仪表盘
mgr modules = dashboard
安装
网络一定要好用
ceph-deploy install centos1 centos2 centos3
初始化monitor
ceph-deploy mon create-initial
同步管理信息
ceph-deploy admin centos1 centos2 centos3
安装mgr(管理守护进程)
ceph-deploy mgr create centos1 centos2 centos3
安装rgw
ceph-deploy rgw create centos1 centos2 centos3
创建mds服务
ceph-deploy mds create centos1 centos2 centos3
OSD安装
创建OSD
ceph-deploy osd create --data /dev/sdb centos1
ceph-deploy osd create --data /dev/sdb centos2
ceph-deploy osd create --data /dev/sdb centos3
查看集群状态
ceph -s
dashboard安装
ceph mgr module enable dashboard
开启dashboard模块
ceph dashboard create-self-signed-cert
生成签名
mkdir -p /usr/local/jx/cephcluster/mgr-dashboard
创建目录
cd /usr/local/jx/cephcluster/mgr-dashboard openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca ceph mgr module disable dashboard ceph mgr module enable dashboard ceph config set mgr mgr/dashboard/server_addr 192.168.28.5 ceph config set mgr mgr/dashboard/server_port 9001 ceph config set mgr mgr/dashboard/ssl false
关闭https
ceph mgr services 创建用户和密码 ceph dashboard set-login-credentials jx123 123.com
https://192.168.28.5:8443
启动服务
设置访问地址与端口
ceph文件系统创建
创建存储池
ceph osd pool create cephfs_data 128 ceph osd pool create cephfs_metadata 64
少于5个OSD可把pg_num设置为128
OSD数量在5到10,可以设置pg_num为512
OSD数量在10到50,可以设置pg_num为4096
OSD数量大于50,需要计算pg_num的值
查看存储池
ceph osd lspools
创建文件系统
ceph fs new fs_test cephfs_metadata cephfs_data
查看文件系统
ceph fs ls
查看mds状态
ceph mds stat
4、客户端挂载
在centos1中
安装
cd /usr/local/soft/cephcluster/ ceph-deploy install centos4
同步管理信息
ceph-deploy admin centos4
非集群节点,/var/run/ceph 无内容
在centos4
yum install -y ceph-fuse
查看信息
ls /etc/ceph ceph.client.admin.keyring 看到这个文件即可
创建挂载目录
mkdir /ceph
挂载ceph文件系统
ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.28.5:6789 /ceph