Linux高级运维(九)-最常用企业级Ceph集群服务搭建


Ceph 简介

不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

存储类型分类:  
1 das  direct access storage --直连存储  (所有手机,移动硬盘,电脑在里边线相连)缺点:接口有限  SATA接口

	联网访问:2 	Nas  --网络附加存储  --独立网络存储

特点:文件系统共享 
     NAS(Network Attached Storage)网络存储基于标准网络协议实现数据传输, 为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机共享/备份
  -nfs samba
        方式: 服务端:分区格式化,共享目录  --->用户直接mount
        类型:Ext3 ext4 xfs ntfs fat32 swap --格式化后:文件系统
 ---没格式化: 块设备

3 San  存储区域网络  --storage area network
iscsi
iSCSI(Internet Small Computer System Interface,

4 分布式存储 SDS(软件定义存储) : software define storage
    Ceph
C/s
分布式文件共享

装包组件; osd --存储设备
           最少3Monitor  --集群监控    ---取余随机负载
Rush算法  \取余算法

Echo a.txt | Md5sum 数字%3 :012
取余随机负载

原理草图:
1T    1T   1T  
(node1 osd ) (node2 osd ) (node3 osd )
Mon mon mon
Linux高级运维(九)-最常用企业级Ceph集群服务搭建_第1张图片环境主机准备:
Linux高级运维(九)-最常用企业级Ceph集群服务搭建_第2张图片

分布式文件系统:1 hadoop
   2 Fastdfs
3 Ceph (快存储,文件系统 对象存储): 高可用,高扩展-随添加,高性能-1G=4+4m...拆开存储

支持EB 级别存储
高可用A.mp4 (默认3副本)
4 GlusterFs

安装前准备环境

1)物理机为所有节点配置yum源服务器。
提示:ceph10.iso在/linux-soft/02目录。
[root@room9pc01 ~]# mkdir /var/ftp/ceph
[root@room9pc01 ~]# mount ceph10.iso /var/ftp/ceph/

2)配置无密码连接(包括自己远程自己也不需要密码),在node1操作。
[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ‘’
[root@node1 ~]# for i in 10 11 12 13
do
ssh-copy-id 192.168.4.$i
Done

3)修改/etc/hosts并同步到所有主机。
警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]# cat /etc/hosts
… …
192.168.4.10 client
192.168.4.11 node1
192.168.4.12 node2
192.168.4.13 node3
警告:/etc/hosts解析的域名必须与本机主机名一致!!!!
[root@node1 ~]# for i in 10 11 12 13
do
scp /etc/hosts 192.168.4.$i:/etc/
done

4)修改所有节点都需要配置YUM源,并同步到所有主机。
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/Tools
gpgcheck=0
[root@node1 ~]# yum repolist #验证YUM源软件数量
源标识 源名称 状态
Dvd redhat 9,911
Mon mon 41
Osd osd 28
Tools tools 33
repolist: 10,013
[root@node1 ~]# for i in 10 11 12 13
do
scp /etc/yum.repos.d/ceph.repo 192.168.4.KaTeX parse error: Expected 'EOF', got '#' at position 89: … [root@node1 ~]#̲ vim /etc/chron…i:/etc/
ssh 192.168.4.$i “systemctl restart chronyd”
done
步骤三:准备存储磁盘

物理机上为每个虚拟机准备3块磁盘(可以使用命令,也可以使用图形直接添加)。
[root@room9pc01 ~]# virt-manager

每个30G(除了客户端)

部署ceph集群

部署Ceph集群服务器,实现以下目标:
安装部署工具ceph-deploy
创建ceph集群
准备日志磁盘分区
创建OSD存储空间
查看ceph状态,验证

步骤一:安装部署软件ceph-deploy

1)在node1安装部署工具,学习工具的语法格式。
[root@node1 ~]# yum -y install ceph-deploy
[root@node1 ~]# ceph-deploy --help
[root@node1 ~]# ceph-deploy mon --help

deploy
部署,调度(军队或武器);有效地利用;调动

2)创建目录
[root@node1 ~]# mkdir ceph-cluster
[root@node1 ~]# cd ceph-cluster

部署二  部署ceph集群
1))创建Ceph集群配置,在ceph-cluster目录下生成Ceph配置文件。
在ceph.conf配置文件中定义monitor主机是谁。

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3
Cephx : 密码占位符  访问需要密码

2)给所有节点安装ceph相关软件包。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i “yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw”
done

rpm -qa | grep ceph -=--查看结果

3)初始化所有节点的mon服务,也就是启动mon服务(主机名解析必须对)。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial

Systemctl status ceph-mon @node1 \2\3

Ceph -s —3 mon

Vdb1   --> vdc
Ssd 盘

Node1 (40G) node2(40G ) node3 (40G)
120G

Fdisk MBR – 20T
Parted GPT 18EB -非交互式

创建OSD

备注:vdb1和vdb2这两个分区用来做存储服务器的journal缓存盘。
[root@node1 ceph-cluster]# for i in node1 node2 node3
do
ssh $i “parted /dev/vdb mklabel gpt”
ssh $i “parted /dev/vdb mkpart primary 1 50%”
ssh $i “parted /dev/vdb mkpart primary 50% 100%”
done

2)磁盘分区后的默认权限无法让ceph软件对其进行读写操作,需要修改权限。
node1、node2、node3都需要操作,这里以node1为例。
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1
[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb2
#上面的权限修改为临时操作,重启计算机后,权限会再次被重置。
#我们还需要将规则写到配置文件实现永久有效。
#规则:如果设备名称为/dev/vdb1则设备文件的所有者和所属组都设置为ceph。
#规则:如果设备名称为/dev/vdb2则设备文件的所有者和所属组都设置为ceph。
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-vdb.rules
ENV{DEVNAME}"/dev/vdb1",OWNER=“ceph”,GROUP=“ceph”
ENV{DEVNAME}
"/dev/vdb2",OWNER=“ceph”,GROUP=“ceph”

for i in node1 node2 node3

do
ssh $i “chown ceph:ceph /dev/vdb1”
ssh $i “chown ceph:ceph /dev/vdb2”
done

3)初始化清空磁盘数据(仅node1操作即可)。
[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc node1:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc node2:vdd
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc node3:vdd

4)创建OSD存储空间(仅node1操作即可)
重要:很多同学在这里会出错!将主机名、设备名称输入错误!!!
[root@node1 ceph-cluster]# ceph-deploy osd create
node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2
//创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL缓存,
//一个存储设备对应一个缓存设备,缓存需要SSD,不需要很大
[root@node1 ceph-cluster]# ceph-deploy osd create
node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
[root@node1 ceph-cluster]# ceph-deploy osd create
node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2

120G
Ceph 共享池[共享镜像 共享镜像 共享镜像]
共享镜像ABC  --20G
共享abc  --20G

使用Ceph集群的块存储功能,实现以下目标:
创建块存储镜像
客户端映射镜像
创建镜像快照
使用快照还原数据
使用快照克隆镜像
删除快照与镜像

创建镜像

1)查看存储池。
[root@node1 ~]# ceph osd lspools 0 rbd

2)创建镜像、查看镜像
[root@node1 ~]# rbd create demo-image --image-feature layering --size 10G --cow 写实复制
#这里的demo-image和image为创建的镜像名称,可以为任意字符。
#–image-feature参数指定我们创建的镜像有哪些功能,layering是开启COW功能。
#提示:ceph镜像支持很多功能,但很多是操作系统不支持的,我们只开启layering。

[root@node1 ~]# rbd list
[root@node1 ~]# rbd info demo-image

步骤二:动态调整

1)缩小容量
[root@node1 ~]# rbd resize --size 7G image --allow-shrink
[root@node1 ~]# rbd info image
2)扩容容量
[root@node1 ~]# rbd resize --size 15G image
[root@node1 ~]# rbd info im

通过KRBD访问

1)客户端通过KRBD访问
#客户端需要安装ceph-common软件包
#拷贝配置文件(否则不知道集群在哪)
#拷贝连接密钥(否则无连接权限)
[root@client ~]# yum -y install ceph-common
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.conf /etc/ceph/
[root@client ~]# scp 192.168.4.11:/etc/ceph/ceph.client.admin.keyring
/etc/ceph/
[root@client ~]# rbd map image -添加镜像 此时在client会多出一个rbd 镜像
[root@client ~]# lsblk
Rbd0 20G
[root@client ~]# rbd showmapped --查看共享rbd信息

id pool image snap device
0 rbd image - /dev/rbd0

快照: 备份的一种方法 snap

创建镜像快照

  1. 查看镜像快照(默认所有镜像都没有快照)。
    [root@node1 ~]# rbd snap ls image --查看

  2. 给镜像创建快照。
    [root@node1 ~]# rbd snap create image --snap image-snap1
    #为image镜像创建快照,快照名称为image-snap1
    [root@node1 ~]# rbd snap ls image
    SNAPID NAME SIZE
    4 image-snap1 15360 MB

  3. 删除客户端写入的测试文件
    [root@client ~]# rm -rf /mnt/test.txt
    [root@client ~]# umount /mnt

  4. 还原快照
    [root@node1 ~]# rbd snap rollback image --snap image-snap1
    Rolling back to snapshot: 100% complete…done.

#客户端重新挂载分区
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls /mnt
test.txt

创建快照克隆

1)克隆快照
[root@node1 ~]# rbd snap protect image --snap image-snap1
[root@node1 ~]# rbd snap rm image --snap image-snap1 //会失败
[root@node1 ~]# rbd clone image --snap image-snap1 image-clone --image-feature layering
//使用image的快照image-snap1克隆一个新的名称为image-clone镜像
2)查看克隆镜像与父镜像快照的关系
[root@node1 ~]# rbd info image-clone
rbd image ‘image-clone’:
size 15360 MB in 3840 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.d3f53d1b58ba
format: 2
features: layering
flags:
parent: rbd/image@image-snap1 --引用
#克隆镜像很多数据都来自于快照链
#如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!

其他操作

1) 客户端撤销磁盘映射
[root@client ~]# umount /mnt
[root@client ~]# rbd showmapped
id pool image snap device
0 rbd image - /dev/rbd0
//语法格式:
[root@client ~]# rbd unmap /dev/rbd0

块存储
Server:Rbd create
客户端 Rbd map 镜像

Kvm
/etc/libvirt/qeumu/xx.xml --虚拟机配置文件
/var/lib/libvirt/images/xx.img --磁盘镜像`文件
Df -h
30G

–ceph 100G 新建镜像 30G
Real 1
Real2
Real3
1)创建磁盘镜像。
[root@node1 ~]# rbd create vm1-image --image-feature layering --size 10G
[root@node1 ~]# rbd list
[root@node1 ~]# rbd info vm1-image
2)Ceph认证账户(仅查看即可)。
Ceph默认开启用户认证,客户端需要账户才可以访问,默认账户名称为client.admin,key是账户的密钥。
可以使用ceph auth添加新账户(

3)创建KVM虚拟机(注意:这里使用真实机当客户端!!!)。
使用virt-manager创建2台普通的KVM虚拟机。
4)配置libvirt secret(注意:这里使用真实机当客户端!!!)。
编写账户信息文件,让KVM知道ceph的账户名称。
[root@room9pc01 ~]# vim secret.xml //新建临时文件,内容如下


client.admin secret


#使用XML配置文件创建secret
[root@room9pc01 ~]# virsh secret-define secret.xml
733f0fd1-e3d6-4c25-a69f-6681fc19802b

给secret绑定admin账户的密码,密码参考ceph.client.admin.keyring文件。
[root@room9pc01] virsh secret-set-value
–secret 733f0fd1-e3d6-4c25-a69f-6681fc19802b
–base64 AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg
//这里secret后面是之前创建的secret的UUID
//base64后面是client.admin账户的密码
//现在secret中既有账户信息又有密钥信息

6)虚拟机的XML配置文件。
每个虚拟机都会有一个XML配置文件,包括:
虚拟机的名称、内存、CPU、磁盘、网卡等信息

不推荐直接使用vim修改配置文件,推荐使用virsh edit修改配置文件,效果如下:
[root@room9pc01] virsh edit vm1 //vm1为虚拟机名称











注意:如果有设备编号冲突的情况下,需要修改设备编号,任意修改一个数字即

Client 关机重启\

二 文件系统 --格式化
Ext3 ext4 xfs ntfs

左Inode((256 ) 右block (4k )
元数据 --metedata 数据
数据的数据 描述右边数据的数据.

Osd
块共享 客户端 --还需格式化 --iNode

原理图
Node1 (2osd) node2 node3 node4 (mds )

Mon mon mon
Inode + block

Mount (客户端)

Ceph文件系统

Ceph-deploy new node node2 node3
Mon create -initial 启动mon服务
Osd create —远程其服务
Mds create node2 \3
Rgw create node2\3

Rbd create
Ceph fs new
Ceph mds stat

1 )ceph-deploy mds create node2 --启动mds 服务

2)创建存储池
[root@node4 ~]# ceph osd pool create cephfs_data 128(iNode) --目路(刘德华 坂井泉水 林志玲)
//创建存储池,对应128个PG
[root@node4 ~]# ceph osd pool create cephfs_metadata 128(block)
//创建存储池,对应128个PG

64–128推荐值
2幂方 1 2 48 16 32 64 128 256 512

创建池子
Ceph osd pool create cephfs_metadata 128

创建Ceph文件系统
Ceph fs new myfs1 cephfs_metadata cephfs_data

客户端挂载 mount -t --临时挂载

mount -t ceph 192.168.4.11:6789:/ /mnt/cephfs/ \ --ceph mon端口号
-o name=admin,secret=AQBTsdRapUxBKRAANXtteNUyoEmQHveb75bISg==
//注意:文件系统类型为ceph
//192.168.4.11为MON节点的IP(不是MDS节点)
//admin是用户名,secret是密钥
//密钥可以在/etc/ceph/ceph.client.admin.keyring中找到

Cd /etc/ceph/
cat ceph.client.admin.keyring
[client.admin]
key = AQD7ZRVdh51eMRAAt3sNzcSBHV7ksoJJPdDiEA==

Vim /etc/rc.local
Vim /etc/fstab

创建对象存储服务器

对象存储(百度网盘) 阿里云 --上传 下载 华为云(靠它写好的程序)
看不见

步骤一:部署对象存储服务器

1)准备实验环境,要求如下:
IP地址:192.168.4.15
主机名:node5
配置yum源(包括rhel、ceph的源)
与Client主机同步时间
node1允许无密码远程node5
修改node1的/etc/hosts,并同步到所有node主机
2)部署RGW软件包
[root@node1 ~]# ceph-deploy install --rgw node5
同步配置文件与密钥到node5
[root@node1 ~]# cd /root/ceph-cluster
[root@node1 ~]# ceph-deploy admin node5

3)新建网关实例
启动一个rgw服务
[root@node1 ~]# ceph-deploy rgw create node5
登陆node5验证服务是否启动
[root@node5 ~]# ps aux |grep radosgw
ceph 4109 0.2 1.4 2289196 14972 ? Ssl 22:53 0:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node4 --setuser ceph --setgroup ceph
[root@node5 ~]# systemctl status ceph-radosgw@*
4)修改服务端口
登陆node5,RGW默认服务端口为7480,修改为8000或80更方便客户端记忆和使用
[root@node5 ~]# vim /etc/ceph/ceph.conf
[client.rgw.node5]
host = node5
rgw_frontends = “civetweb port=8000”
//node5为主机名
//civetweb是RGW内置的一个web服务

Osd 最少3个
Mon 最少2 必须过半才可用

你可能感兴趣的:(网站架构)