Ceph分布式存储的搭建

目前我们的数据存储方式主要有以下几种
SCSI 小型计算机系统接口,主要用于硬盘,光盘,磁带机(目前多数银行应用)
DAS 直连式存储
不能实现数据和其他主机的共享
占用服务器操作系统资源,CPU,IO等
数据量越大,性能越差
NAS网络技术存储
数据存储,以数据为中心
采用标准的nfs,http,cifs,限于文件系统,如NFS samba
SAN存储区域网络
块存储,例如iscsi vda sda sdb等
分布式存储

由于传统的存储例如上面的NAS,SAN不方便扩容,而且存储方式单一
所以分布式存储被越来越多的企业所选择

主要有有以下几类

Lustre,Hadoop,FastDFS,Ceph,GlusterFS(仅支持文件系统)

下面简单的来说一下Ceph,因为这款软件相对来说确实很强大,支持对象存储,块存储,文件系统存储,可以动态迁移
Ceph组件

OSDs 存储设备
Monitors 集群监控组件
MDSs 存放文件系统的元数据
Client ceph客户端ceph-common
工作原理
比如有三台存储设备 node1 node2 node3
监视组件 monitor 配置一个固定IP
现在客户client 发来读写请求a.txt

monitor在接到请求后,经过内部的hash算法,将请求传递给某一个node

比如,文件a.txt取值为0,则对应node1进行存储

实际上我们的ceph需要三个monitor节点(需要过半主机为好,三台,至少有两个是好的…),至少三个存储主机,然后整个数据在分成不同的小单元同时进行存储,这样会降低我们的时间,提高效率,目前的数据一般都是三备份,也可以更多,比如四备份,五备份等,数据取出的时候也是如此,并发取出!
ceph搭建
实验前准备
  1. 创建1台客户端虚拟机并配置主机名,IP
hostnamectl set-hostname client
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.10/24 connection.autoconnect yes
nmcli connection up eth0
  1. 创建3台存储集群虚拟机并配置主机名,IP
hostnamectl set-hostname node1
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.11/24 connection.autoconnect yes
nmcli connection up eth0
hostnamectl set-hostname  node2
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.12/24 connection.autoconnect yes
nmcli connection up eth0
hostnamectl set-hostname node3
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.13/24 connection.autoconnect yes
nmcli connection up eth0

3.物理机配置YUM源服务器

yum -y install vsftpd
mkdir  /var/ftp/ceph
mount   /root/rhcs2.0-rhosp9-20161113-x86_64.iso  /var/ftp/ceph  ##以实际文件路径为准
ls /var/ftp/ceph                                  #查看文件中内容
rhceph-2.0-rhel-7-x86_64/       rhscon-2.0-rhel-7-x86_64/
rhel-7-server-openstack-9-rpms/
cd   /var/ftp/ceph/rhceph-2.0-rhel-7-x86_64/
ls  
EULA  GPL  MON OSD  README  RPM-GPG-KEY-redhat-release  Tools  TRANS.TBL                             
# 四台虚拟机需要挂载目录下 MON OSD Tools
  1. 修改所有主机的yum源节点,以node1为例
[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/MON
gpgcheck=0
[osd]
name=osd
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/OSD
gpgcheck=0
[tools]
name=tools
baseurl=ftp://192.168.4.254/ceph/rhceph-2.0-rhel-7-x86_64/Tools
gpgcheck=0
  1. 修改/etc/hosts并同步到所有主机
    注:/etc/hosts解析的域名必须与本机主机名一致
    这里以node1为例
[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
[root@node1 ~]# for i in  192.168.4.{10,11,12,13}
> do
> scp  /etc/hosts  $i:/etc/
> done
[root@node1 ~]# for i in  192.168.4.{10,11,12,13}
> do
> scp  /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
> done
  1. 配置无密码SSH链接
[root@node1 ~]# ssh-keygen   -f /root/.ssh/id_rsa    -N ''
[root@node1 ~]# for i in 192.168.4.{10  11  12  13}
> do
> ssh-copy-id  $i
> done
  1. 配置NTP时间同步(必须配置,要求时间误差0.05ms内)
    真实物理机配置时间服务器
  yum -y install chrony
  vim /etc/chrony.conf 
  allow 192.168.4.0/24   # 允许4.0网段所有主机
  192.168.4.0/24
  systemctl restart chronyd.service   # 重启服务
  iptables -F        # 清空防火墙规则

其他所有节点均要与服务器时间同步(以node1为例)

[root@node1 ~]#  cat /etc/chrony.conf
server 192.168.4.254   iburst
[root@node1 ~]# systemctl  restart  chronyd

8.创建虚拟机磁盘

[root@room9pc01 ~]# virt-manager 

为node1/2/3 分别添加三块磁盘

[root@node1]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  3.8G  0 rom  /dvd
vda           252:0    0   20G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
vdb           252:16   0   20G  0 disk 
vdc           252:32   0   20G  0 disk 
vdd           252:48   0   20G  0 disk 
部署ceph集群
  1. 安装部署工具ceph-deploy
这个软件带有一个同步安装的脚本ceph-deploy,我们在前面已经设置了无密码远程其他主机节点和本机,所以在一台设备操作就可以。
之后创建一个新的文件夹,可以随便命名,但之后敲得相关命令必须在次文件夹下面,否则会出错,无法安装。命令如下(这里用node1部署:
[root@node1 ~]#  yum -y install ceph-deploy  # 部署安装工具
[root@node1 ~]#  ceph-deploy  --help  #可以查看相关帮助
[root@node1 ~]#  mkdir ceph-cluster   # 创建目录
[root@node1 ~]#  cd ceph-cluster/      #进入此目录
- 创建ceph集群
[root@node1 ceph-cluster]#  ceph-deploy new node1 node2 node3     # 创建集群配置文件ceph.conf(里面注明集群主机都有那些)
[root@node1 ceph-cluster]# ceph-deploy install node1 node2 node3  # 所有节点安装软件包
[root@node1 ceph-cluster]# ceph-deploy mon create-initial  # 初始化mon服务 在相关主机可以查看 这里不用指定主机,前面已经配置过,解析必须对!并启动
[root@node1 ceph-cluster]systemctl status  ceph-mon@node1.service   # 查看服务已经启动

2.准备日志磁盘分区

[root@node1 ~]#  parted  /dev/vdb  mklabel  gpt  
[root@node1 ~]#  parted  /dev/vdb  mkpart primary  1M  50%
[root@node1 ~]#  parted  /dev/vdb  mkpart primary  50%  100%
[root@node1 ~]# chown  ceph.ceph  /dev/vdb1
[root@node1 ~]# chown  ceph.ceph  /dev/vdb2
#临时赋予权限,重启就会失效 修改udev配置永久权限
[root@node2 ~]# vim /etc/udev/rules.d/70-vdb.rules 
ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"
ENV{DEVNAME}=="/dev/vdb2",OWNER="ceph",GROUP="ceph"
#这两个分区作为存储服务器的日志盘,企业建议用固态盘ssd,其余两个节点也同样操作!
[root@node1 ~]# ceph-deploy disk  zap  node1:vdc   node1:vdd    
[root@node1 ~]# ceph-deploy disk  zap  node2:vdc   node2:vdd 
[root@node1 ~]# ceph-deploy disk  zap  node3:vdc   node3:vdd    

#初始化磁盘设备,仅在node1操作即可

  1. 创建OSD存储空间
[root@node1 ~]# ceph-deploy osd create node1:vdc:/dev/vdb1 node1:vdd:/dev/vdb2  
#创建osd存储设备,vdc为集群提供存储空间,vdb1提供JOURNAL日志...
[root@node1 ~]# ceph-deploy osd create node2:vdc:/dev/vdb1 node2:vdd:/dev/vdb2
[root@node1 ~]# ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2 
  1. 查看ceph状态,验证
[root@node1 ~]#  ceph  -s   # 查看集群状态
创建ceph块存储

1.创建块存储镜像

[root@node1 ~]# ceph osd lspools  #查看存储池,哪台节点打都可以
0 rbd,   # rbd为默认
[root@node1 ~]# rbd create demo-image --image-feature  layering --size 10G
[root@node1 ~]# rbd create rbd/image --image-feature  layering --size 10G       #  创建块存储(镜像) 以及有哪些功能,大小
[root@node1 ~]# rbd list   # 查看镜像
[root@node1 ~]# rbd info demo-image
#查看镜像信息

可以进行大小动态调整

[root@node1 ~]# rbd resize --size 7G demo-image --allow-shrink(收缩)    #  把demo-image缩小为7G
[root@node1 ~]# rbd resize --size 15G image #把image扩容成15G
  1. 客户端映射镜像
第一种 集群里有客户端
[root@node1 ~]# rbd map demo-image
/dev/rbd0
[root@node1 ~]# lsblk  # 查看会增加一个硬盘 ,磁盘可以格式化可以挂载!
第二种 单独客户端

注意:如果物理机重启过,则需要重新挂载 rhcs2.0-rhosp9-20161113-x86_64.iso文件

[root@node1 ceph-cluster]# ls /etc/ceph/  #在node1 查看 密钥和配置文件
ceph.client.admin.keyring  ceph.conf  rbdmap  tmpvp1YWB    
[root@client ~]# yum -y  install ceph-common  #客户端安装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   # 类似于mount  
[root@client ~]#  lsblk
[root@client ~]# rbd showmapped  #查看镜像路径
[root@client ~]# rbd unmap image  #取消镜像
[root@client ~]# mkfs.xfs /dev/rbd0   #可以格式化
[root@client ~]# mount /dev/rbd0 /mnt/  #可以挂载
[root@client ~]# echo "test" > /mnt/test.txt  #可以写数据 不过分散在node1,2,3上! 如果测试的话,umount,否则不能快照
  1. 创建镜像快照
原理

[快照即COW(copy on write ) 写实复制]

  • 比方说:有一块原始盘100G,文件有a.txt (内容比如为123456) 如果内容改变为13579 …
  • 如果正常备份,需要100G或者更大,但是我们通过快照,新盘可能仅需1G (相当于快捷方式)就可以,这样可以节省空间,时间
  • 快照仅为a.txt 拷贝新的文件a.txt(内容为13579)
  • 另一方面,比如我们备份一个10G的数据,大概需要10分钟 ,10.00开始备份,正常10.10备份完成,不过数据需要过程,如果中间有数据变化,最后备份的就是备份过的改变前的和改变之后的内容。
  • 改变这种情况,可以先变只读,再快照(很快就可以完成) 然后把快照备份到新的硬盘。这样不影响企业的业务。
[root@node1 ~]# rbd snap ls image  # 查看镜像快照,当前没有
[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
  1. 使用快照还原数据
[root@client ~]# rm  -rf   /mnt/test.txt  # 删除文件
[root@node1 ~]# rbd snap rollback image --snap image-snap1     # 还原快照
#客户端重新挂载分区
[root@client ~]# umount  /mnt
[root@client ~]# mount /dev/rbd0 /mnt/
[root@client ~]# ls  /mnt
  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(可以随意命名)
[root@node1 ~]#  rbd info image-clone
...
parent: rbd/image@image-snap1   #虽然也属于镜像,但是数据很多都是来源于源快照
[root@node1 ~]#  rbd flatten image-clone  #拷贝数据
[root@node1 ~]#  rbd info image-clone   
...
#可以独立工作,不需要父快照信息了
  1. 删除快照与镜像
[root@client ~]# umount /mnt  #卸载
[root@client ~]# rbd showmapped  #查看
[root@client ~]# rbd unmap /dev/rbd/{poolname}/{imagename}  #删除格式
[root@client ~]# rbd unmap /dev/rbd/rbd/image
[root@node1 ~]# rbd snap rm image --snap image-snap   # 删除快照
[root@node1 ~]# rbd  list
[root@node1 ~]# rbd  rm  image   #删除镜像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值