Ceph 存储集群 - 搭建存储集群

一、Ceph分布式存储

1.1、Ceph文件系统简述

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

中文学习网:http://docs.ceph.org.cn/

1.2、Ceph的优点

高性能
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。
高可用性
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。
高可扩展性
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。
特性丰富
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动
 

二、Ceph架构和名称解释

2.1、Ceph架构

Ceph 存储集群 - 搭建存储集群

 

 

2.2、Ceph核心组件及概念介绍

  • Monitor

一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。

  • OSD

OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。

  • MDS

MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。

  • Object

Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。

  • PG

PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

  • RADOS

RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。

  • Libradio

Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

  • CRUSH

CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

  • RBD

RBD全称RADOS block device,是Ceph对外提供的块设备服务。

  • RGW

RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。

  • CephFS

CephFS全称Ceph File System,是Ceph对外提供的文件系统服务。

三、Ceph的存储过程

CEPH集群在存储数据时,都是进行扁平化处理,Object作为集群最小的存储单位。

Ceph 存储集群 - 搭建存储集群

 

 

ceph在对象存储的基础上提供了更加高级的思想。当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph因此引入了placement group (pg) 的概念。一个PG就是一组对象的集合。

Ceph 存储集群 - 搭建存储集群

 

 

3.1、Ceph IO流程及数据分布

Ceph 存储集群 - 搭建存储集群

 

 

3.2、正常IO流程图

Ceph 存储集群 - 搭建存储集群

 

 

步骤:

client 创建cluster handler。
client 读取配置文件。
client 连接上monitor,获取集群map信息。
client 读写io 根据crushmap 算法请求对应的主osd数据节点。
主osd数据节点同时写入另外两个副本节点数据。
等待主节点以及另外两个副本节点写完数据状态。
主节点及副本节点写入状态都成功后,返回给client,io写入完成。

四、Ceph搭建过程

我准备了三台centos7虚拟机,ip如下

Ceph 存储集群 - 搭建存储集群

 

 

4.1、准备工作

      1、机器名称的修改(三台服务器上都执行),给192.168.32.140取别名ghy1,给192.168.32.141取别名ghy2,给192.168.32.142取别名ghy3

      命令如果下:

hostnamectl set-hostname ghy1

Ceph 存储集群 - 搭建存储集群

 

 

Ceph 存储集群 - 搭建存储集群

 

 

Ceph 存储集群 - 搭建存储集群

 

 

2、修改三台服务器的配置名字解析IP,命令如下(分别在三台服务器上执行)

vi /etc/hosts

执行上面命令后添加如下映射:

192.168.32.140 ghy1
192.168.32.141 ghy2 
192.168.32.142 ghy3

Ceph 存储集群 - 搭建存储集群

 

 

三个服务器配置完成后保存文件并执行reboot命令重启三台服务器,重启完成后可以发现机器名称已经换成我们自己定义的了

Ceph 存储集群 - 搭建存储集群

 

 

3、yum源的修改,要在三台服务器都进行修改,因为命令都一样,我就以一台服务器为例,这里采用的是清华镜像源,提升加载速度。

命令如果下:

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

4、ceph与ceph-deploy安装(因为我把140做主服务器,所以这命令在140服务器上执行就行)

更新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 安装即可。我在第一次尝试安装时就是因为没有安装python2搞的我搞了好久。

如果遇到如下错误,安装下epel即可。

Ceph 存储集群 - 搭建存储集群

 

 

操作命令:(最好先执行该命令) 

yum install epel-release -y 
yum install lttng-ust -y

安装完了epel记得再次执行yum update && yum -y install ceph ceph-deploy命令

5、NTP时间同步工具(140执行)为了保证时间同步,我们需要安装NTP时间同步工具:

yum install ntp ntpdate ntp-doc -y

Ceph 存储集群 - 搭建存储集群

 

 

设为开机启动:

systemctl enable ntpd

Ceph 存储集群 - 搭建存储集群

 

 

设置每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local 追加:执行命令

vi /etc/rc.d/rc.local

打开文本追加如下一句话

/usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

Ceph 存储集群 - 搭建存储集群

 

 

配置定时任务, 执行crontab -e命令 ,命令如下

Ceph 存储集群 - 搭建存储集群

 

 打开文本后追加如下一段话

0 */1 * * * ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w

如果出现红框内容表示成功

Ceph 存储集群 - 搭建存储集群

 

 6、免密配置(在三台服务器上都执行),因为命令都一样,我以一台服务器为例

官方建议不用系统内置用户, 创建名为cuser用户, 密码也设为cuser:

命令如下

useradd -d /home/cuser -m cuser 
passwd cuser

Ceph 存储集群 - 搭建存储集群

 

 

设置sudo权限:(免密+只读权限) 

echo "cuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cuser

再执行如下命令查看是否添加成功

cat /etc/sudoers.d/cuser

Ceph 存储集群 - 搭建存储集群

 

 

执行如下命令添加只读权限

sudo chmod 0440 /etc/sudoers.d/cuser

添加完成后用如下命令查看是否添加成功,rr表示只读

ll /etc/sudoers.d/cuser

Ceph 存储集群 - 搭建存储集群

 

 

7、生成秘钥(在140服务器上执行)

执行如下命令切换到cuser用户上

su cuser

执行如下命令生成RSA密钥,一直按默认就可以了

ssh-keygen

Ceph 存储集群 - 搭建存储集群

 

 

分发密钥至各机器节点

ssh-copy-id cuser@ghy1 
ssh-copy-id cuser@ghy2 
ssh-copy-id cuser@ghy3

Ceph 存储集群 - 搭建存储集群

 

 接下来修改管理节点上的 ~/.ssh/config (当前用户目录下的.ssh/config)文件, 简化SSH远程连接时的输入信息:管理节点是会有root和cuser多个用户, ssh远程连接默认会以当前用户身份进行登陆, 如果我们是root 身份进行远程连接, 还是需要输入密码,我们可以修改配置 使用root远程连接时也不用输入密码。执行下面切换root身份

 

su root

但我多次尝试都无法通过上面命令切回root帐户,没办法,我是重新再启动一个连接进入root帐户的,如果有朋友碰到和我一样情况解决了可以留言跟我说下怎么解决的。进入root帐户后用如下命令编辑config

vi ~/.ssh/config

添加如下内容

Host ghy1
   Hostname ghy1 
   User cuser
Host ghy2
   Hostname ghy2 
   User cuser 
Host ghy3 
   Hostname ghy3 
   User cuser

如果保存中报".ssh/config" E212: Can‘t open file for writing;那么进入他的根目录,用命令

cd ~

然后用如下命令创建创建目录

 

 

mkdir .ssh 

 

接着用如下命令进入目录

cd .ssh

再入如下命令编辑文件

vi config

Ceph 存储集群 - 搭建存储集群

 

 文件编辑完成后记得保存。接着修改文件权限

chmod 600 ~/.ssh/config

用如下命令查看有什么权限rw表示只有读写权限

ll ~/.ssh/config

Ceph 存储集群 - 搭建存储集群

 

 到了这一步后,接下来就是要禁用SELINUX了,执行下面命令进行禁用

vi /etc/selinux/config

打开文件后在最后一行添加

SELINUX=disabled

Ceph 存储集群 - 搭建存储集群

 

 

4.2、集群搭建(全部在140服务器上执行)

安装集群,用root安装,可以避免很多权限问题。mkdir ljx创建一个目录,然后cd ljx进入这个目录

Ceph 存储集群 - 搭建存储集群

 

 

1.创建集群管理目录,作为ceph配置信息存储目录。-p是表示创建多级目录命令如果下

 

mkdir -p /usr/local/ljx/cephcluster 

 

然后进入目录

cd /usr/local/ljx/cephcluster

Ceph 存储集群 - 搭建存储集群

 

 

2.创建集群

ceph-deploy new ghy1 ghy2 ghy3

Ceph 存储集群 - 搭建存储集群

 

 

创建成功后, 会生配置文件和秘钥信息。用ls命令查看

Ceph 存储集群 - 搭建存储集群

 

 3.修改配置文件

编辑ceph.conf文件 ,用如下命令进行编辑

vi ceph.conf 

打开文件后配置如下内容,网段根据自身情况配置

#对外开放网段 
public network = 192.168.32.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 存储集群 - 搭建存储集群

 

 

注意:Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略。

文件修改后执行安装,在140上进行安装,执行如下命令后三台服务器都会执行安装程序,命令如下

ceph-deploy install ghy1 ghy2 ghy3

Ceph 存储集群 - 搭建存储集群

 

 安装完成后页面如下:

Ceph 存储集群 - 搭建存储集群

 

 

4.初始化Monitor信息,命令如下

ceph-deploy mon create-initial

Ceph 存储集群 - 搭建存储集群

 

 

执行成功后页面如下,下面页面生成了很多秘钥文件

Ceph 存储集群 - 搭建存储集群

5、同步管理信息

ceph-deploy admin ghy1 ghy2 ghy3 

6、安装mgr(管理守护进程)

ceph-deploy mgr create ghy1 ghy2 ghy3

7、安装rgw

ceph-deploy rgw create ghy1 ghy2 ghy3

接着执行下面命令安装mds服务

ceph-deploy mds create ghy1 ghy2 ghy3

如果到现在都没报错说明你快成功了,我反正在这些坑中呆了快一个星期了,能记住的错也都在这里面写下来了,如果在配置过程任意一个环节安装失败了,需要卸载重装:

ceph-deploy purge ghy1 ghy2 ghy3 
ceph-deploy purgedata ghy1 ghy2 ghy3 
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 查看磁盘信息如下,我们需要添加一个磁盘

Ceph 存储集群 - 搭建存储集群

 

 因为我用的是virtualBox,所以我下面截图就是在virtualBox上怎么添加硬盘,这个操作要在三台服务上都执行。

a.虚拟机关机,打开设置>存储

 

Ceph 存储集群 - 搭建存储集群

 

 

Ceph 存储集群 - 搭建存储集群

 

 

Ceph 存储集群 - 搭建存储集群

 

 Ceph 存储集群 - 搭建存储集群

 

 Ceph 存储集群 - 搭建存储集群

 

 这样就创建完成了。记得保存并且三台服务器上都执行。说多了都是泪。一直点击下一步,设置磁盘空间大小为10G即可。操作完后重启虚拟机,并输入 fdisk -l 查看磁盘信息

如下,明显多了 /dev/sdb 10G大小。

Ceph 存储集群 - 搭建存储集群

 

 

执行创建OSD命令:(注意,每条命令都是在140中执行,不要在每台机器中单独执行)要在cephcluster文件夹中执行

 

ceph-deploy osd create --data /dev/sdb ghy1 
ceph-deploy osd create --data /dev/sdb ghy2 
ceph-deploy osd create --data /dev/sdb ghy3

 

Ceph 存储集群 - 搭建存储集群

 

 

Monitor查看 /usr/bin 下执行 ./ceph -s 可以查看集群状态。 也可以在cephcluster中执行ceph -s查看

Ceph 存储集群 - 搭建存储集群

 

 

执行如下命令同步各个节点的时间(下面这个命令要在三个节点都执行)

ntpdate ntp1.aliyun.com

如果报以下错执行命令yum -y install ntpdate就可以解决了

 

Ceph 存储集群 - 搭建存储集群

 

 Ceph 存储集群 - 搭建存储集群

 

 4.3、dashboard安装 (可视化管理页面)

Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。接下来安装一下Dashboard,并使用它的功能。

1.开启dashboard模块,在140服务器上执行

ceph mgr module enable dashboard

2、生成签名,在140服务器上执行

ceph dashboard create-self-signed-cert

3、创建目录,在140服务器上执行

mkdir -p /usr/local/ljx/cephcluster/mgr-dashboard

4、生成密钥对,在140服务器上执行

openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca 

Ceph 存储集群 - 搭建存储集群

 

 

5、启动dashboard ,在140服务器上执行

ceph mgr module disable dashboard 
ceph mgr module enable dashboard

6、设置IP与PORT,在140服务器上执行

ceph config set mgr mgr/dashboard/server_addr 192.168.32.140
ceph config set mgr mgr/dashboard/server_port 8843

7、关闭HTTPS ,在140服务器上执行

ceph config set mgr mgr/dashboard/ssl false

8、查看服务信息,在140服务器上执行

ceph mgr services

9、设置管理员账号密码,在140服务器上执行

 

ceph dashboard set-login-credentials admin admin

 

Ceph 存储集群 - 搭建存储集群

 

 

10、访问 <https://192.168.32.140:8443/#/dashboard>

Ceph 存储集群 - 搭建存储集群

 

 

11、RGW访问

 

访问 http://192.168.32.140:7480/ 效果如下:

Ceph 存储集群 - 搭建存储集群

 

 

4.3 Cephfs管理

集群创建完后, 默认没有文件系统, 我们创建一个Cephfs可以支持对外访问的文件系统。搭建完成后就能进行文件管理和文件下载操作了

1、创建两个存储池, 执行两条命令: (在140上)

 

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 存储集群 - 搭建存储集群

 

 

2、创建fs, 名称为fs_test:(在140上,名称可以随便取)

ceph fs new fs_test cephfs_metadata cephfs_data

3、状态查看, 以下信息代表正常(在140上)

 

ceph fs ls

 

Ceph 存储集群 - 搭建存储集群

 

 

ceph mds stat

Ceph 存储集群 - 搭建存储集群

 

 

4、fuse挂载(在140上)

 

先确定ceph-fuse命令能执行, 如果没有, 则安装:

 

yum -y install ceph-fuse 

 

创建挂载目录

mkdir -p /usr/local/ljx/cephfs_directory

挂载cephfs

ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 192.168.32.140:6789 /usr/local/ljx/cephfs_directory 

Ceph 存储集群 - 搭建存储集群

 

 

5、挂载信息查看

Ceph 存储集群 - 搭建存储集群

 

 

Ceph 存储集群 - 搭建存储集群

上一篇:VBS脚本编程(4)——对象的创建与调用


下一篇:删除文件