前言:本来准备的是Ubuntu20,搞了半天上头了把我笔记本正在用的Ubuntu操作系统直接搞崩了,hhhhhh,所以换了CentOS
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。
对比说明 | TFS | FASTDFS | MooseFS | GlusterFS | CEPH |
---|---|---|---|---|---|
开发语言 | C++ | C | C | C | C++ |
数据存储方式 | 块 | 文件/Trunk | 块 | 文件/块 | 对象/文件/块 |
在线扩容 | 支持 | 支持 | 支持 | 支持 | 支持 |
冗余备份 | 支持 | 支持 | 支持 | 支持 | 支持 |
单点故障 | 存在 | 不存在 | 存在 | 不存在 | 不存在 |
易用性 | 安装复杂,官方文档少 | 安装简单,社区相对活跃 | 安装简单 | 官方文档专业化 | 安装有一定复杂度 |
适用场景 | 跨集群的小文件 | 单集群的中小文件 | 单集群的大中文件 | 跨集群云存储 | 单集群的大中小文件 |
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
CRUSH算法:Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,理论上支持数千个存储节点。
高性能:Ceph中的数据副本数量可以由管理员自行定义,并可以通过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性; ceph可以忍受多种故障场景并自动尝试并行修复。
高扩展性:Ceph本身并没有主控节点,扩展起来比较容易,并且理论上,它的性能会随着磁盘数量的增加而线性增长。
特性丰富:Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式可以一同使用。在国内一些公司的云环境中,通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。
RADOS:就是这样一个可用于PB级规模数据存储集群的可伸缩的、可靠的对象存储服务,可以理解成Ceph的整个存储对象,包括逻辑对象。
File:用户上传的文件
object:上传的文件被切成N个小文件块对象,RADOS的基本存储单元。
MDS:元数据的内存缓存,为了加快元数据的访问。
CRUSH:Ceph寻址算法,用于计算当前文件存储到哪个PG对应的OSD中。
PG:对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。
OSD:RADOS中的存储节点被称为OSD
架构图讲解:
1:文件上传,先将文件切片成N个object(如果开启了cephFS,可以使用MDS缓存)
2:切片后的文件object会存入到Ceph中
3:文件存储前,会经过CRUSH算法,计算当前文件存储归结于哪个PG
4:PG是逻辑概念上对文件存储范围划分的索引
5:根据PG索引将文件存储到指定服务器的OSD中
集群结构如上图,server1作为主节点(Dashbaord、mon、mds、rgw、mgr、osd),server2和server3作为子节点(mon、mds、rgw、mgr、osd)。
节点中信息说明:
dashbaord:Ceph可视化管理界面。
rgw:RADOSGW,Ceph对象网关,使客户端能够利用标准对象存储API来访问Ceph集群。
mgr:ceph-mgr,主要目标实现 ceph 集群的管理,为外界提供统一的入口。
节点信息:
server1:192.168.0.131
server2:192.168.0.132
server3:192.168.0.133
1)机器名称修改(131、132、133都执行)
我们给每台机器一个别名192.168.0.131
->CENTOS1,192.168.0.132
->CENTOS2,192.168.0.133
->CENTOS3。
修改192.168.0.131
/etc/hostname,添加CENTOS1
修改192.168.0.132
/etc/hostname,添加CENTOS2(同上)
修改192.168.0.133
/etc/hostname,添加CENTOS3(同上)
配置名字解析IP:分别修改131
、132
、133
的/etc/hosts
文件,添加如下映射:
192.168.0.131 CENTOS1
192.168.0.132 CENTOS2
192.168.0.133 CENTOS3
2)YUM源修改(131、132、133都执行)
这里采用清华镜像源,提升加载速度。
vi /etc/yum.repos.d/ceph.repo
,添加如下内容:
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
# 清华源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
3)epel安装(131)
yum install epel-release -y
yum install lttng-ust -y
4)ceph与ceph-deploy安装(131)
更新yum源,并安装ceph
和ceph-deploy
,这个过程非常耗时间,执行如下命令:
yum update && yum -y install ceph ceph-deploy
注意:yum update
和yum -y install python2-pip
最好在每台机器都更新下yum。
安装过程中, 如果执行ceph-deploy出现ImportError: No module named pkg_resources
,则需要安装python2-pip,执行yum -y install python2-pip
安装即可。
5)NTP时间同步工具(131、132、133执行)
为了保证时间同步,我们需要安装NTP时间同步工具:
yum install ntp ntpdate ntp-doc -y
设为开机启动:
systemctl enable ntpd
设置每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local
追加:
/usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
配置定时任务, 执行crontab -e 加入:
0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
6)免密配置(131、132、133都执行)
官方建议不用系统内置用户, 创建名为cuser用户, 密码也设为cuser:
useradd -d /home/cuser -m cuser
passwd cuser
设置sudo权限:(免密+只读权限)
echo "cuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cuser
sudo chmod 0440 /etc/sudoers.d/cuser
7)生成秘钥:(131执行)
切换用户: su cuser
执行ssh-keygen,一直按默认提示点击生成RSA密钥信息。
分发密钥至各机器节点
ssh-copy-id cuser@CENTOS1
ssh-copy-id cuser@CENTOS2
ssh-copy-id cuser@CENTOS3
修改管理节点上的 ~/.ssh/config
(当前用户目录下的.ssh/config)文件, 简化SSH远程连接时的输入信息:
管理节点是会有root和cuser多个用户, ssh远程连接默认会以当前用户身份进行登陆, 如果我们是root身份进行远程连接, 还是需要输入密码,我们可以修改配置 使用root远程连接时也不用输入密码。
切换root身份,
su root
编辑config
vi ~/.ssh/config
添加如下内容:
Host CENTOS1
Hostname CENTOS1
User cuser
Host CENTOS2
Hostname CENTOS2
User cuser
Host CENTOS3
Hostname CENTOS3
User cuser
修改文件权限:
chmod 600 ~/.ssh/config
禁用SELINUX:
vi /etc/selinux/config
SELINUX=disabled
安装集群,用root安装,可以避免很多权限问题。
1)创建集群管理目录,作为ceph配置信息存储目录。
mkdir -p /usr/local/soft/cephcluster
cd /usr/local/soft/cephcluster
2)创建集群
ceph-deploy new CENTOS1 CENTOS2 CENTOS3
3)修改配置文件
编辑ceph.conf文件vi /usr/local/soft/cephcluster/ceph.conf
,添加如下配置:
#对外开放网段
public network = 192.168.0.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
注意:Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略。
文件修改后执行安装(131执行),此时3台机器都会执行安装执行如下安装命令:
ceph-deploy install CENTOS1 CENTOS2 CENTOS3
如果出现ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
错误,可以直接在每个节点单独执行yum -y install ceph
进行单独安装。如果没有仓库文件ceph.repo, 按上面的步骤手工创建。
4)初始化Monitor信息
ceph-deploy mon create-initial
如果出现Some monitors have still not reached quorum 错误,
1.检查hostname和hosts映射是否一致
2.三台节点的端口都要开放,开放命令如下(CentOS7)
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
sudo firewall-cmd --zone=public --add-service=ceph --permanent
sudo firewall-cmd --zone=public --add-port=7480/tcp --permanent
sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
sudo firewall-cmd --reload
此时会生成很多秘钥文件信息
5)同步管理信息
ceph-deploy admin CENTOS1 CENTOS2 CENTOS3
6)安装mgr(管理守护进程)
ceph-deploy mgr create CENTOS1 CENTOS2 CENTOS3
7)安装rgw
ceph-deploy rgw create CENTOS1 CENTOS2 CENTOS3
mds服务:
ceph-deploy mds create CENTOS1 CENTOS2 CENTOS3
注意:任意一个环节安装失败了,需要卸载重装:
ceph-deploy purge CENTOS1 CENTOS2 CENTOS3
ceph-deploy purgedata CENTOS1 CENTOS2 CENTOS3
ceph-deploy forgetkeys
将三台节点的mon信息也删除:
rm -rf /var/run/ceph/
如果出现错误:
ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
可以在各节点上单独进行安装:
yum -y install ceph
8)OSD安装
OSD服务是对象存储守护进程, 负责把对象存储到本地文件系统, 必须要有一块独立的磁盘作为存储。如果没有独立磁盘,怎么办? 可以在Linux下面创建一个虚拟磁盘进行挂载。
添加磁盘:
执行fdisk -l
查看磁盘信息如下,我们需要添加一个磁盘,直接用VMware
添加即可。
使用VMware
选择设置->硬盘->添加,如下图:
一直点击下一步,设置磁盘空间大小为10G即可。操作完后重启虚拟机,并输入fdisk -l
查看磁盘信息如下,明显多了/dev/sdb
10G大小。
执行创建OSD命令:(注意,每条命令都是在131中执行,不要在每台机器中单独执行)
ceph-deploy osd create --data /dev/sdb CENTOS1
ceph-deploy osd create --data /dev/sdb CENTOS2
ceph-deploy osd create --data /dev/sdb CENTOS3
Monitor查看
在/usr/bin
下执行./ceph -s
可以查看集群状态。
可以执行ntpdate ntp1.aliyun.com
同步各个节点的时间。
如果出现如下情况,执行systemctl restart ceph.target
重启每个节点即可(131,132,133都执行)。
Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。我们接下来安装一下Dashboard,并使用它的功能。
1)开启dashboard模块
ceph mgr module enable dashboard
2)生成签名
ceph dashboard create-self-signed-cert
3)创建目录
mkdir -p /usr/local/gupao/cephcluster/mgr-dashboard
4)生成密钥对
openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
5)启动dashboard
ceph mgr module disable dashboard
ceph mgr module enable dashboard
6)设置IP与PORT
ceph config set mgr mgr/dashboard/server_addr 192.168.100.131
ceph config set mgr mgr/dashboard/server_port 9001
7)关闭HTTPS
ceph config set mgr mgr/dashboard/ssl false
8)查看服务信息
ceph mgr services
9)设置管理员账号密码
ceph dashboard set-login-credentials admin admin
10)访问
11)RGW访问
访问 http://192.168.0.131:7480/ 效果如下:
集群创建完后, 默认没有文件系统, 我们创建一个Cephfs可以支持对外访问的文件系统。
1)创建两个存储池, 执行两条命令:
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
2)创建fs, 名称为fs_test:
ceph fs new fs_test cephfs_metadata cephfs_data
3)状态查看, 以下信息代表正常
ceph fs ls
:
name: fs_test, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
ceph mds stat
:
fs_test-0/0/1 up
4)fuse挂载
先确定ceph-fuse命令能执行, 如果没有, 则安装:
yum -y install ceph-fuse
创建挂载目录
mkdir -p /usr/local/file/cephfs_directory
挂载cephfs
ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.0.131:6789 /usr/local/file/cephfs_directory
出现starting fuse
表示挂载成功了:
ceph-fuse[28003]: starting fuse
5)挂载信息查看
[root@CENTOS1 cephcluster]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.1G 0 4.1G 0% /dev
tmpfs 4.1G 0 4.1G 0% /dev/shm
tmpfs 4.1G 20M 4.1G 1% /run
tmpfs 4.1G 0 4.1G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 2.0G 16G 12% /
/dev/sda1 1014M 189M 826M 19% /boot
tmpfs 4.1G 28K 4.1G 1% /var/lib/ceph/osd/ceph-0
tmpfs 838M 0 838M 0% /run/user/0
ceph-fuse 13G 0 13G 0% /usr/local/gupao/cephfs_directory
打完收工。