分布式存储Ceph

1、Ceph简介

Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。

Ceph主要设计的初衷是变成一个可避免单节点故障的统一的分布式文件系统,提供较好的性能、可靠性和PB级别的扩展能力。作为对象存储把每一个数据流分割为固定大小的对象数据。


2、Ceph特性

高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到EB级的扩展。

高可靠性:没有单点故障,多数据副本,自动管理,自动修复。

高 性 能:数据分布均衡。

存储类别:可用于对象存储,块设备存储和文件系统存储

3、Ceph集群部署

官方文档:
http://docs.ceph.com 注:有哪里有问题可以留言,看到会回复

准备环境
系统版本:centos7.4 x86_64 server
网卡配置:除admin以外,其余节点再配一块网卡并设置IP

1.给三台node节点添加2块大小20G的磁盘
2.所有节点修改主机名并相互解析
3.关闭所有机器的防火墙和selinux
主机名                 ip                                          role
    admin            192.168.116.131                                  admin
    node1            192.168.116.132 / 192.168.117.132                osd /mgr
    node2            192.168.116.133 / 192.168.117.133                osd /mgr
    node3            192.168.116.134 / 192.168.117.134                osd
    mon1             192.168.116.135 / 192.168.117.135                mon1 
    mon1             192.168.116.136 / 192.168.117.136                mon2 
    mon1             192.168.116.137 / 192.168.117.137                mon3 
    client           192.168.116.138 / 192.168.117.138                client

4.配置YUM源并安装epel-release源:所有节点-root
# vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph package
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/aarch64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph1]
name=ceph1
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-noarch]
name=ceph noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=ceph source
baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
# yum update
# yum -y install epel-release

5.同步系统时钟
admin作为时钟服务器:
# yum install -y ntp
# vim /etc/ntp.conf  #有4行server的位置,把那4行server行注释掉,填写以下两行
server 127.127.1.0 # local clock
fudge  127.127.1.0 stratum 10   #stratum  层;阶层 / ˈstrɑːtəm
# systemctl restart ntpd

其他所有节点:
# yum install ntpdate  -y
# ntpdate  admin

6.创建用户并开启sudo 权限:所有节点-root
# useradd cephu
# echo 1 |passwd --stdin cephu
# visudo  ----在root ALL=(ALL) ALL下面添加:   /etc/sudoers
cephu  ALL=(root)  NOPASSWD:ALL

7.配置SSH免密登录并创建工作目录:admin节点-cephu
# su - cephu
$ mkdir my_cluster    #工作目录

$ ssh-keygen
#将admin节点cephu用户生成的密钥拷贝到各Ceph节点:
$ ssh-copy-id cephu@node1
$ ssh-copy-id cephu@node2
$ ssh-copy-id cephu@node3
$ ssh-copy-id cephu@mon1
$ ssh-copy-id cephu@mon2
$ ssh-copy-id cephu@mon3
$ ssh-copy-id cephu@client

8.部署ceph-deploy:admin节点-root
# yum -y install ceph-deploy
—————————————————————————————
 安装Python依赖,不装会报错
# wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
# unzip distridate
# cd distribute-0.7.3/
# python setup.py install

9.初始化集群:admin节点-cephu
# su - cephu
$ cd my_cluster/
$ ceph-deploy new \
--cluster-network 192.168.117.0/24 \
--public-network 192.168.116.0/24 \
mon1
-------------------------------------
# 参数
--cluster-network 集群通信网络
--public-network  外部通信网络
mon1              指定mon节点
-------------------------------------
$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
创建成功会有三个文件:ceph.conf, ceph.mon.keyring, and a log file

10.安装ceph和ceph-radosgw主包:admin节点-cephu
$ ceph-deploy install --no-adjust-repos node1 node2 node3 mon1 mon2 mon3 client
------------------------------
# 参数
--no-adjust-repos   通过本地源安装

11.初始化mon节点,收集秘钥:admin节点–cephu
$ ceph-deploy mon create-initial

12.赋予各个节点使用命令免用户名权限:admin节点–cephu
$ ceph-deploy admin node1 node2 node3 mon1 mon2 mon3 client
-----------------------------------------------------
为cephu赋予读取密钥的权限:所有节点
# setfacl -m u:cephu:r /etc/ceph/ceph.client.admin.keyring

13.部署mgr节点:admin节点–cephu
$ ceph-deploy  mgr create node1

14.扩展mon和mgr节点:admin节点–cephu
# 扩展monitor
$ ceph-deploy mon add mon2
$ ceph-deploy mon add mon3

# 扩展manager
$ ceph-deploy mgr create node2

15.添加OSD:admin节点–cephu
# 查看可用磁盘
$ ssh node1 lsblk -f
---------------------------------------------------
# 添加osd
$ ceph-deploy osd create --data /dev/sdb node1
$ ceph-deploy osd create --data /dev/sdb node2
$ ceph-deploy osd create --data /dev/sdb node3
$ ceph-deploy osd create --data /dev/sdc node1
$ ceph-deploy osd create --data /dev/sdc node2
$ ceph-deploy osd create --data /dev/sdc node3
----------------------------------------------------

16.查看集群状态:client节点-root
# ceph -s
  cluster:
    id:     cab710b1-8dbf-4622-9a49-60a0384be5aa
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum mon1,mon2,mon3  #quorum 法定人数 / ˈkwɔːrəm
    mgr: node1(active), standbys: node2    #standbys 备用物品 / ˈstændbaɪz
    osd: 6 osds: 6 up, 6 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
   usage:   6.02GiB used, 114GiB / 120GiB avail
    pgs:

17.配置Dashboard:mgr节点-root
创建管理域秘钥:
# ceph auth get-or-create \
mgr.node1 \
mon 'allow profile mgr' \
osd 'allow *' \
mds 'allow *'
开启 ceph-mgr 管理域
# ceph-mgr -i node1
打开dashboard模块
# ceph mgr module enable dashboard
绑定开启dashboard模块的ceph-mgr节点的ip地址
# ceph config-key \
set mgr/dashboard/node1/server_addr 192.168.116.132     # ip地址为mgr节点的ip地址

浏览器访问:
http://192.168.116.132:7000


18.配置客户端使用rbd:client节点-root
------------------------------------------------------------------
创建存储池:
# ceph osd pool create rbd 128 128
------------------------------------------------------------------
初始化存储池
# rbd pool init rbd
------------------------------------------------------------------
修改client下的ceph配置文件
# vi /etc/ceph/ceph.conf 
rbd_default_features = 1
------------------------------------------------------------------
创建块设备镜像:单位是M,这里是4个G
# rbd create foo --size 4096
------------------------------------------------------------------
client节点映射镜像到主机
# rbd map foo --name client.admin
/dev/rbd0
客户端重起之后,设备需要重新作映射,不然可能会卡死
------------------------------------------------------------------
client节点格式化块设备
# mkfs.ext4  /dev/rbd/rbd/foo
------------------------------------------------------------------
client节点mount块设备
# mkdir /mnt/ceph-block-device #创建挂载点
# mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载
------------------------------------------------------------------