一起学习ceph系列:

一起来学习ceph--01-ceph简介

一起学习ceph-02-ceph集群搭建

一起学习ceph-03-dashboard安装

一起学习ceph-04-ceph日常维护

一、简介

Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

官网文档地址:

Ceph OSDs: ( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。

Monitors: 维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。

MDSs: ( MDS )为 存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

二、机器准备

1、我们这里准备4台机器,如下表:

2、架构图如下:

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(1)

3、配置hosts

192.168.200.168ceph-admin

192.168.200.159node01

192.168.200.191node02

192.168.200.166node03

4、配置ntp

[root@ip-192-168-200-168 ~]# cat /etc/cron.daily/ntp.sh

#!/bin/bash

ntplog=/tmp/wmbak.log

ntpdate ntp.**.com 2>&1 >>$ntplog

clock --systohc

5、配置yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

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

yum makecache

编辑ceph源

vi /etc/yum.repos.d/ceph.repo

[ceph]

name=ceph

baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/

gpgcheck=0

priority =1

[ceph-noarch]

name=cephnoarch

baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/

gpgcheck=0

priority =1

[ceph-source]

name=Ceph source packages

baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS

gpgcheck=0

priority=1

防火墙检查(firewall和selinux)

systemctl status firewalld

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(2)

如果未关闭,请关闭

systemctl stop firewalld

systemctl disable firewalld

每台机器均关闭selinux

setenforce 0

sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config

1、创建部署 CEPH 的用户(所有节点)

ceph-deploy 工具必须以普通用户登录 Ceph 节点,且此用户拥有无密码使用 sudo 的权限,因为它需要在安装软件及配置文件的过程中,不必输入密码。较新版的 ceph-deploy 支持用 --username 选项提供可无密码使用 sudo 的用户名(包括 root ,虽然不建议这样做)。建议在集群内的所有 Ceph 节点上给 ceph-deploy 创建一个特定的用户,但不要用 "ceph" 这个名字。

useradd -d /home/stadmin -m stadmin

echo "LAOlang@478%"|passwd --stdin stadmin

echo "stadmin ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/stadmin

chmod 0440 /etc/sudoers.d/stadmin

节点到普通节点免密配置

# su - stadmin

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/stadmin/.ssh/id_rsa):

Created directory '/home/stadmin/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/stadmin/.ssh/id_rsa.

Your public key has been saved in /home/stadmin/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:BNaDgb2ipjYbjb4CN1E1AiAbaHYVbdnEFANZQbBd9Fc stadmin@ip-192-168-200-168

The key's randomart image is:

---[RSA 2048]----

|=...o*O*%O o E|

|o= .oooB=oo . .|

| .. .o.o . . |

| . . .. . |

| o . S |

|. B |

|.* o |

| o. |

|o |

----[SHA256]-----

分发到各个node节点

ssh-copy-id stadmin@node01

ssh-copy-id stadmin@node02

ssh-copy-id stadmin@node03

测试

[stadmin@ip-192-168-200-168 ~]$ ssh node01

[stadmin@ip-192-168-200-159 ~]$ exit

Connection to node01 closed.

[stadmin@ip-192-168-200-168 ~]$ ssh node02

[stadmin@ip-192-168-200-191 ~]$ exit

Connection to node02 closed.

[stadmin@ip-192-168-200-168 ~]$ ssh node03

[stadmin@ip-192-168-200-166 ~]$ exit

sudo yum install ceph-deploy -y

三、安装集群准备

cd /data

mkdir cluster

cd cluster

ceph-deploy new ceph-admin(发现报错)

sudo yum install python-setuptools -y 解决报错

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(3)

ceph-deploy new ceph-admin

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(4)

我这里搞错目录了,重新来

清理一下

注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:

// 删除安装包

$ ceph-deploy purge admin-node node01 node02 node03

// 清除配置

$ ceph-deploy purgedata admin-node node01 node02 node03

$ ceph-deploy forgetkeys

ceph-deploy new ceph-admin

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(5)

修改vi ceph.conf

[global]

fsid = 523b24a7-9a44-4f04-b98b-c59c1b02a43d

mon_initial_members = ceph-admin

mon_host = 192.168.200.168

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

增加以下内容:

osd pool default size = 2 (默认是3个副本)

public network = 192.168.200.0/24

所有节点上安装ceph

ceph-deploy install ceph-admin node01 node02 node03 --no-adjust-repos

--no-adjust-repos参数可以在ceph-deploy其它节点安装ceph时不会修改ceph.repo文件

这里等的时间较长(看屏幕发现是串行安装)

这里看到了node03,完成,版本是ceph version 14.2.11

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(6)

6. 配置初始 monitor

ceph-deploy mon create-initial

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(7)

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(8)

[ceph_deploy.gatherkeys][INFO ] Storing ceph.client.admin.keyring

[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mds.keyring

[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mgr.keyring

[ceph_deploy.gatherkeys][INFO ] keyring 'ceph.mon.keyring' already exists

[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-osd.keyring

[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-rgw.keyring

[ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpckrjJa

7、秘钥copy

目的:每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了

ceph-deploy admin ceph-admin node01 node02 node03

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(9)

8、检查节点的磁盘

ceph-deploy disk list node01 node02 node03

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(10)

查看集群状态

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

ceph -s

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(11)

9、osd 创建

ceph-deploy osd create --data /dev/sdb node01

ceph-deploy osd create --data /dev/sdb node02

ceph-deploy osd create --data /dev/sdb node03

这里要注意:我最开始是使用lvm上的一个分区,一直报错

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(12)

在查看集群状态(发现已经有3个osd了)

ceph -s

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(13)

10、创建mgr

ceph-deploy mgr create ceph-admin

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(14)

再查看集群状态(已经ok了)

ceph搭建方法(一起学习ceph-02-ceph集群搭建)(15)

四、报错处理

配置初始化monitor报错,按照网上这位仁兄的处理,完美。

由于官方文档没有特别说明,网上大部分ceph配置文章丢三落四。导致配置ceph初始monitor(s)时,各种报错,本文提供了几种解决的办法可供参考。

1、执行ceph-deploy mon create-initial

报错部分内容如下:

[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph2][WARNIN] monitor: mon.ceph2, might not be running yet[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph2][WARNIN] monitor ceph2 does not exist in monmap[ceph2][WARNIN] neither public_addr nor public_network keys are defined for monitors[ceph2][WARNIN] monitors may not be able to form quorum

注意报错中public_network,这是由于没有在ceph.conf中配置

解决办法:

修改ceph.conf配置文件(此IP段根据个人情况设定),添加public_network = 192.168.1.0/24

2、修改后继续执行ceph-deploy mon create-initial后,发现依旧报错,报错部分内容如下

[ceph3][WARNIN] provided hostname must match remote hostname[ceph3][WARNIN] provided hostname: ceph3[ceph3][WARNIN] remote hostname: localhost[ceph3][WARNIN] monitors may not reach quorum and create-keys will not complete[ceph3][WARNIN] ********************************************************************************[ceph3][DEBUG ] deploying mon to ceph3[ceph3][DEBUG ] get remote short hostname[ceph3][DEBUG ] remote hostname: localhost[ceph3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf[ceph_deploy.mon][ERROR ] RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite[ceph_deploy][ERROR ] GenericError: Failed to create 3 monitors

这里看到错误提示/etc/ceph/ceph.conf内容不同,使用--overwrite-conf来覆盖

命令如下:

ceph-deploy --overwrite-conf config push ceph1 ceph2 ceph3

3、修改后继续执行ceph-deploy mon create-initial,发现报错还是存在,报错部分内容如下

[ceph3][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph3.asok mon_status[ceph3][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory[ceph_deploy.mon][WARNIN] mon.ceph3 monitor is not yet in quorum, tries left: 1[ceph_deploy.mon][WARNIN] waiting 20 seconds before retrying[ceph_deploy.mon][ERROR ] Some monitors have still not reached quorum:[ceph_deploy.mon][ERROR ] ceph1[ceph_deploy.mon][ERROR ] ceph3[ceph_deploy.mon][ERROR ] ceph2

经过排查发现节点的hostname与/etc/hosts不符

解决办法:修改节点hostname名称,使其与/etc/hosts相符

hostnamectl set-hostname ceph-admin

hostnamectl set-hostname node01

hostnamectl set-hostname node02

hostnamectl set-hostname node03

4、修改后继续执行ceph-deploy mon create-initial,mmp发现还是报错,报错内容又不一样了,中间部分报错内容如下

[ceph2][ERROR ] no valid command found; 10 closest matches:[ceph2][ERROR ] perf dump {<logger>} {<counter>}[ceph2][ERROR ] log reopen[ceph2][ERROR ] help[ceph2][ERROR ] git_version[ceph2][ERROR ] log flush[ceph2][ERROR ] log dump[ceph2][ERROR ] config unset <var>[ceph2][ERROR ] config show[ceph2][ERROR ] get_command_descriptions[ceph2][ERROR ] dump_mempools[ceph2][ERROR ] admin_socket: invalid command[ceph_deploy.mon][WARNIN] mon.ceph2 monitor is not yet in quorum, tries left: 5[ceph_deploy.mon][WARNIN] waiting 5 seconds before retrying[ceph2][INFO ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.ceph2.asok mon_status[ceph2][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory

解决办法:在各个节点上执行sudo pkill ceph,然后再在deploy节点执行ceph-deploy mon create-initial

然后发现ERROR报错消失了,配置初始monitor(s)、并收集到了所有密钥,当前目录下可以看到下面这些密钥环

######################################

5、ceph磁盘问题

[stadmin@ceph-admin cluster]$ ceph-deploy osd prepare node01:/ceph/osd0

usage: ceph-deploy osd [-h] {list,create} ...

ceph-deploy osd: error: argument subcommand: invalid choice: 'prepare' (choose from 'list', 'create')

官网上有如下说明:

Be sure that the device is not currently in use and does not contain any important data.

意思是说必须要用未使用的磁盘做OSD节点吗?同一个磁盘下通过指定不同目录弄多个OSD节点现在的部署方式官网未给出,是不是不支持了呢?以后再研究了。

以上几个问题我都遇到了,特别是最后一个问题,我重装了系统,重新做了raid。

,