天下大势,分久必合,合久比分。我发觉这句话真的可以套入万事万物的发展史。
从存储的发展历史看,以前存储都是以本地硬盘的方式直接接入计算机本地(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
测试cephuser的sudo权限
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-node1、ceph-node2、ceph-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-node1、ceph-node2、ceph-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
创建pool,pool是ceph存储数据时的逻辑分区,它起到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。