天下大势,分久必合,合久比分。我发觉这句话真的可以套入万事万物的发展史。

从存储的发展历史看,以前存储都是以本地硬盘的方式直接接入计算机本地(DAS-直接附加存储)。后来,为了数据共享、增加IOPS、增加Raid、LVM等提高可用性与数据保护的手段,又出现了集中存储(磁盘阵列)。随着X86服务器越来越便宜,集中存储的可扩展性不足、不能跨品牌跨型号整合等问题,又开始出现了以X86服务器为基础,分布式存储软件为核心的分布式存储系统。

而在开源软件的阵型,Ceph又是分布式存储的佼佼者,注意Ceph是分布式存储软件,而不是分布式块存储、分布式文件存储、分布式对象存储的其中一种,而是3种都支持。

本篇介绍Ceph分布式存储集群的搭建与体验使用。


实验环境:CentOS7

主机名

IP地址

ceph-admin

10.1.30.43

ceph-node1,ceph-mon

10.1.30.37

ceph-node2,ceph-mon

10.1.30.38

ceph-node3,ceph-mon

10.1.30.39



Ceph-node的机器,每台出系统盘之外,添加1块磁盘(不能少于20G

 

1、环境准备

1.1修改主机名

hostnamectl set-hostname ceph-admin
hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3

 

1.2修改hosts

vi /etc/hosts
10.1.30.43    ceph-admin
10.1.30.37    ceph-node1
10.1.30.38    ceph-node2
10.1.30.39    ceph-node3

 

1.3关闭防火墙与selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/selinux/config
SELINUX=disabled

 

1.4配置NTP

yum install ntp ntpdate ntp-doc -y
systemctl restart ntpd
systemctl status ntpd

 

1.5配置yum

备份原有yum文件

mkdir /mnt/bak
mv /etc/yum.repos.d/* /mnt/bak/

 下载阿里云的base源和epel

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 添加ceph

vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
priority =1
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
priority =1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
gpgcheck=0
priority=1

每个节点创建cephuser用户,设置sudo权限

useradd -d /home/cephuser -m cephuser
echo "cephuser"|passwd --stdin cephuser
echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers

测试cephusersudo权限

su - cephuser
sudo su -

 

 1.6配置SSH免密访问

ceph-admin节点上产生公私钥文件,然后将ceph-admin节点的.ssh目录拷贝给其他节点

su - cephuser
ssh-keygen -t rsa    #一路回车
cd .ssh/
cp id_rsa.pub authorized_keys

 拷贝到Node节点

scp -r /home/cephuser/.ssh ceph-node1:/home/cephuser/
scp -r /home/cephuser/.ssh ceph-node2:/home/cephuser/
scp -r /home/cephuser/.ssh ceph-node3:/home/cephuser/

 验证是否已经可以SSH免密访问

ssh -p22 cephuser@ceph-admin
ssh -p22 cephuser@ceph-node1
ssh -p22 cephuser@ceph-node2
ssh -p22 cephuser@ceph-node3

 

1.7准备磁盘

ceph-node1ceph-node2ceph-node3三个节点)

测试时使用的磁盘不要太小,否则后面添加磁盘时会报错,建议磁盘大小为20G及以上。

实验中3个节点都是VMware的虚拟机,直接各新加一块20G磁盘即可。(注意vmware添加的是/dev/sdb,原有的系统磁盘是/dev/sda,如果使用的物理机或者其他虚拟化软件,请注意按照实际修改)

每个节点操作系统内检查磁盘

sudo fdisk -l /dev/sdb
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

格式化磁盘

sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs /dev/sdb -f

查看磁盘格式(xfs格式)

sudo blkid -o value -s TYPE /dev/sdb

 

2、安装部署

(只在ceph-admin进行ceph-deploy

su - cephuser

安装ceph-deploy

sudo yum update -y && sudo yum install ceph-deploy -y

创建cluster目录

mkdir cluster
cd cluster/

创建集群(后面填写monit节点的主机名,这里monit节点和管理节点是同一台机器,即ceph-admin

ceph-deploy new ceph-admin

修改ceph.conf文件(注意:mon_host必须和public network 网络是同网段内!)

vim ceph.conf     #添加下面两行配置内容
public network = 10.1.30.43/24
osd pool default size = 3

安装ceph(过程有点长,需要等待一段时间....

ceph-deploy install ceph-admin ceph-node1 ceph-node2 ceph-node3

初始化monit监控节点,并收集所有密钥

ceph-deploy mon create-initial
ceph-deploy gatherkeys ceph-admin

添加OSD到集群,检查OSD节点上所有可用的磁盘

ceph-deploy disk list ceph-node1 ceph-node2 ceph-node3

使用zap选项删除所有osd节点上的分区

ceph-deploy disk zap ceph-node1:/dev/sdb ceph-node2:/dev/sdb ceph-node3:/dev/sdb

准备OSD(使用prepare命令)

ceph-deploy osd prepare ceph-node1:/dev/sdb ceph-node2:/dev/sdb ceph-node3:/dev/sdb

激活OSD(注意由于ceph对磁盘进行了分区,/dev/sdb磁盘分区为/dev/sdb1

ceph-deploy osd activate ceph-node1:/dev/sdb1 ceph-node2:/dev/sdb1 ceph-node3:/dev/sdb1

---------------------------------------------------------------------------------------------

可能出现下面的报错:

[ceph-node1][WARNIN] ceph_disk.main.Error: Error: /dev/vdb1 is not a directory or block device
[ceph-node1][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/vdb1

但是这个报错没有影响ceph的部署,在三个osd节点上通过命令已显示磁盘已成功mount

[cephuser@ceph-node1 ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1  4.2G  0 rom
sda             252:0    0   70G  0 disk
├─sda1          252:1    0    1G  0 part /boot
└─sda2          252:2    0   69G  0 part
  ├─centos-root 253:0    0 43.8G  0 lvm  /
  ├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 21.4G  0 lvm  /home
sdb             252:16   0   20G  0 disk
├─sdb1          252:17   0   15G  0 part /var/lib/ceph/osd/ceph-0       #挂载成功
└─sdb2          252:18   0    5G  0 part
[cephuser@ceph-node2 ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1  4.2G  0 rom
sda             252:0    0   70G  0 disk
├─sda1          252:1    0    1G  0 part /boot
└─sda2          252:2    0   69G  0 part
  ├─centos-root 253:0    0 43.8G  0 lvm  /
  ├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 21.4G  0 lvm  /home
sdb             252:16   0   20G  0 disk
├─sdb1          252:17   0   15G  0 part /var/lib/ceph/osd/ceph-1        #挂载成功
└─sdb2          252:18   0    5G  0 part
[cephuser@ceph-node3 ~]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0              11:0    1  4.2G  0 rom
sda             252:0    0   70G  0 disk
├─sda1          252:1    0    1G  0 part /boot
└─sda2          252:2    0   69G  0 part
  ├─centos-root 253:0    0 43.8G  0 lvm  /
  ├─centos-swap 253:1    0  3.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 21.4G  0 lvm  /home
sdb             252:16   0   20G  0 disk
├─sdb1          252:17   0   15G  0 part /var/lib/ceph/osd/ceph-2       #挂载成功
└─sdb2          252:18   0    5G  0 part

查看OSD

ceph-deploy disk list ceph-node1 ceph-node2 ceph-node3
........
[ceph-node1][DEBUG ]  /dev/vdb2 ceph journal, for /dev/vdb1      #如下显示这两个分区,则表示成功了
[ceph-node1][DEBUG ]  /dev/vdb1 ceph data, active, cluster ceph, osd.0, journal /dev/vdb2
........
[ceph-node3][DEBUG ]  /dev/vdb2 ceph journal, for /dev/vdb1      
[ceph-node3][DEBUG ]  /dev/vdb1 ceph data, active, cluster ceph, osd.1, journal /dev/vdb2
.......
[ceph-node3][DEBUG ]  /dev/vdb2 ceph journal, for /dev/vdb1
[ceph-node3][DEBUG ]  /dev/vdb1 ceph data, active, cluster ceph, osd.2, journal /dev/vdb2

ceph-deploy把配置文件和admin密钥拷贝到管理节点和Ceph节点,这样你每次执行Ceph命令行时就无需指定monit节点地址

ceph.client.admin.keyring

ceph-deploy admin ceph-admin ceph-node1 ceph-node2 ceph-node3

修改密钥权限

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

检查ceph状态

sudo ceph health
HEALTH_OK
[cephuser@ceph-admin cluster]$ sudo ceph -s
    cluster 33bfa421-8a3b-40fa-9f14-791efca9eb96
     health HEALTH_OK
     monmap e1: 1 mons at {ceph-admin=192.168.10.220:6789/0}
            election epoch 3, quorum 0 ceph-admin
     osdmap e14: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 45946 MB / 46046 MB avail
                  64 active+clean

查看ceph osd运行状态

ceph osd stat
     osdmap e19: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds

查看osd的目录树

ceph osd tree
ID WEIGHT  TYPE NAME           UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.04376 root default                                      
-2 0.01459     host ceph-node1                               
 0 0.01459         osd.0            up  1.00000          1.00000
-3 0.01459     host ceph-node2                               
 1 0.01459         osd.1            up  1.00000          1.00000
-4 0.01459     host ceph-node3                               
 2 0.01459         osd.2            up  1.00000          1.00000

查看monit监控节点的服务情况

sudo systemctl status ceph-mon@ceph-admin
ps -ef|grep ceph|grep 'cluster'
ceph     28190     1  0 11:44 ?        00:00:01 /usr/bin/ceph-mon -f --cluster ceph --id ceph-admin --setuser ceph --setgroup ceph

分别查看下ceph-node1ceph-node2ceph-node3三个节点的osd服务情况,发现已经在启动中。

[cephuser@ceph-node1 ~]$ sudo systemctl status [email protected]         #启动是start、重启是restart
[cephuser@ceph-node1 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph     28749     1  0 11:44 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051  0 11:54 pts/2    00:00:00 grep --color=auto cluster
[cephuser@ceph-node2 ~]$ sudo systemctl status [email protected]
[cephuser@ceph-node2 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph     28749     1  0 11:44 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051  0 11:54 pts/2    00:00:00 grep --color=auto cluster
[cephuser@ceph-node3 ~]$ sudo systemctl status [email protected]
[cephuser@ceph-node3 ~]$ sudo ps -ef|grep ceph|grep "cluster"
ceph     28749     1  0 11:44 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
cephuser 29197 29051  0 11:54 pts/2    00:00:00 grep --color=auto cluster

 

3、创建文件系统

先查看管理节点状态,默认是没有管理节点的。

ceph mds stat
e1:

创建管理节点(ceph-admin作为管理节点)。

需要注意:如果不创建mds管理节点,client客户端将不能正常挂载到ceph集群!!

pwd
/home/cephuser
cd cluster/
ceph-deploy mds create ceph-admin

再次查看管理节点状态,发现已经在启动中

ceph mds stat
e2:, 1 up:standby

查看状态 

sudo systemctl status ceph-mds@ceph-admin
ps -ef|grep cluster|grep ceph-mds
ceph     29093     1  0 12:46 ?        00:00:00 /usr/bin/ceph-mds -f --cluster ceph --id ceph-admin --setuser ceph --setgroup ceph

创建poolpoolceph存储数据时的逻辑分区,它起到namespace的作用

ceph osd lspools           #先查看pool
0 rbd,

新创建的ceph集群只有rdb一个pool。这时需要创建一个新的pool

ceph osd pool create cephfs_data 10       #后面的数字是PG的数量
pool 'cephfs_data' created

 

ceph osd pool create cephfs_metadata 10

#创建pool的元数据

pool 'cephfs_metadata' created

 

ceph fs new myceph cephfs_metadata cephfs_data
new fs with metadata pool 2 and data pool 1

 

再次查看pool状态

ceph osd lspools
0 rbd,1 cephfs_data,2 cephfs_metadata,

检查mds管理节点状态

ceph mds stat
e5: 1/1/1 up {0=ceph-admin=up:active}

查看ceph集群状态

sudo ceph -s
    cluster 33bfa421-8a3b-40fa-9f14-791efca9eb96
     health HEALTH_OK
     monmap e1: 1 mons at {ceph-admin=192.168.10.220:6789/0}
            election epoch 3, quorum 0 ceph-admin
      fsmap e5: 1/1/1 up {0=ceph-admin=up:active}           #多了此行状态
     osdmap e19: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v48: 84 pgs, 3 pools, 2068 bytes data, 20 objects
            101 MB used, 45945 MB / 46046 MB avail
                  84 active+clean

查看ceph集群端口

sudo lsof -i:6789
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ceph-mon 28190 ceph   10u  IPv4  70217      0t0  TCP ceph-admin:smc-https (LISTEN)
ceph-mon 28190 ceph   19u  IPv4  70537      0t0  TCP ceph-admin:smc-https->ceph-node1:41308 (ESTABLISHED)
ceph-mon 28190 ceph   20u  IPv4  70560      0t0  TCP ceph-admin:smc-https->ceph-node2:48516 (ESTABLISHED)
ceph-mon 28190 ceph   21u  IPv4  70583      0t0  TCP ceph-admin:smc-https->ceph-node3:44948 (ESTABLISHED)
ceph-mon 28190 ceph   22u  IPv4  72643      0t0  TCP ceph-admin:smc-https->ceph-admin:51474 (ESTABLISHED)
ceph-mds 29093 ceph    8u  IPv4  72642      0t0  TCP ceph-admin:51474->ceph-admin:smc-https (ESTABLISHED)

如果上述状态都正常,Ceph集群搭建完成,下一篇再介绍如何使用3种不同的方式使用Ceph。