用ceph-deploy安装ceph并部署集群

部署安装

关于安装ceph整个过程中遇到的问题,以及靠谱的解决办法,个人亲测有效,不代表广大同行的观点。

我用的是服务器,所以没搞什么用户的问题。机器是centOS7.3。我安装的ceph版本是jewel,目前只用了3个节点。

节点IP      命名    角色

10.0.1.92   e1092   mon 
10.0.1.93   e1093   mon,osd 
10.0.1.94   e1094   mon,osd 

第一步:准备工作(以下工作在所有节点上都要执行)

首先是配置yum源:

需要特别注意的是,Ceph的安装过程还需要第三方组件依赖,其中一些第三方组件在CentOS yum.repo Base等官方源中是没有的(例如LevelDB),所以读者在安装过程中会有一定的几率遇到各种依赖关系异常,并要求先行安装XXX第三方组件的提示(例如提示先安装liblevel.so)。虽然我们后文将会介绍的Ceph辅助部署工具,Ceph-deploy的工作本质还是通过yum命令去安装管理组件,但是既然CentOS yum.repo Base官方源中并没有某些需要依赖的第三方组件,所以一旦遇到类似的组件依赖问题安装过程就没法自动继续了。解决这个问题,本示例中建议引入CentOS的第三方扩展源epel。(我在这上面坑了很久才走出来)。

首先引入第三方扩展源:

# 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源,将下面内容输进去
[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.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1

更新源:

# yum makecache
# yum update

安装ceph(我是在各节点分别安装的,而没有用ceph-deploy一键安装,个人感觉分别安装更不容易犯错):

# yum install  -y  ceph

查看ceph版本:

# ceph -v
ceph version 10.2.9 (2ee413f77150c0f375ff6f10edd6c8f9c7d060d0)

关闭selinux:

# sed  -i  's/SELINUX=.*/SELINUX=disabled/'  /etc/selinux/config
# setenforce  0
setenforce: SELinux is disabled

关闭防火墙firewalld:

# systemctl stop firewalld
# systemctl disable firewalld

安装ntp服务器

为保证各个服务器的时间一致,安装ntp服务器

# yum install -y ntp ntpdate ntp-doc

访问:http://www.pool.ntp.org/zone/cn,获取中国区公用时间同步服务器。如:

server 0.cn.pool.ntp.org 
server 1.asia.pool.ntp.org 
server 2.asia.pool.ntp.org

将这三个服务器添加到/etc/ntp.conf,用#注释掉文件中原有的:

server 0.centos.pool.ntp.org iburst 
server 1.centos.pool.ntp.org iburst 
server 2.centos.pool.ntp.org iburst 
server 3.centos.pool.ntp.org iburst 

再执行下面的命令手工从服务器同步并启动ntp服务:

# ntpdate 0.cn.pool.ntp.org
# hwclock -w
# systemctl enable ntpd.service
# systemctl start ntpd.service

安装ssh服务:

# yum install openssh-server

第二步、准备工作做好了,现在开始部署ceph集群。

备注:以下操作均在admin-node节点执行,在本文中,由于admin-node与e1093共享,所以在e1093上执行就可以了

修改/etc/hosts

# vim /etc/hosts
10.0.1.92 e1092 
10.0.1.93 e1093 
10.0.1.94 e1094 

生成ssh密钥对并复制到各节点

# ssh-keygen
# scp-copy-id e1092
# scp-copy-id e1093
# scp-copy-id e1094

安装部署工具ceph-deploy

# yum install ceph-deploy
# ceph-deploy  --version

创建集群,
这里先要创建一个目录,因为在执行ceph-deploy的过程中会产生一些配置文件。以后只要是执行ceph-deploy的命令所产生的文件都在这个目录下。

# mkdir /home/my-cluster
# cd my-cluster

部署新的monitor节点(我的是把e1093、e1093、e1094都作为mon 节点):

# ceph-deploy new e1092 e1093 e1094

查看my-cluster目录下生成的文件:

# ls 
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

修改配置文件:

# vim ceph.conf
mon_initial_members = e1092, e1093, e1094
mon_host = 10.0.1.92,10.0.1.93,10.0.1.94
auth_cluster_required = none
auth_service_required = none
auth_client_required = none
osd pool default size = 2
public network = 10.0.1.0/24

对其中的参数做一下说明:

前面5项是自动生成的,不过我修改了auth_cluster_required,auth_service_required,auth_client_required为none,原始默认是cephx,表示要通过认证,这里我不需要认证,所以设为none。

osd pool default size是副本的个数,我只配置两个副本,所以设为2.
public network是公共网络,是osd之间通信的网络,该项建议设置,如果不设置,后面可能执行命令的时候有警告信息,该参数其实就是你的mon节点IP最后一项改为0,然后加上/24。例如我的节点ip是10.0.1.8*系列的,所以我的public network就是10.0.1.0/24。
部署monitors,并获取密钥key,此命令会在my-cluster目录下生成几个key。

# ceph-deploy  --overwrite-conf mon  create-initial

这里我贴出了一部分输出信息作为参考,看到最后一部分信息表示成功。

查看my-cluster目录下生成的文件:

# ls
ceph.bootstrap-mds.keyring 
ceph.bootstrap-rgw.keyring  
ceph.conf             
ceph.mon.keyring
ceph.bootstrap-osd.keyring  
ceph.client.admin.keyring   
ceph-deploy-ceph.log

查看集群状态:

# ceph -s

接下来部署osd:

由于没有足够多的磁盘,就用文件夹,我用的就是文件夹,如果用磁盘的话,网上教程更多:

在e1092 e1093 e1094上执行:

# mkdir  /var/local/osd1  
# chmod  777  -R  /var/local/osd1

以下在有ceph-deploy的节点上执行:

准备osd:

# ceph-deploy osd prepare e1092:/var/local/osd1 e1093:/var/local/osd1 e1094:/var/local/osd1

激活osd:

# ceph-deploy osd activate e1092:/var/local/osd1 e1093:/var/local/osd1 e1094:/var/local/osd1

再次查看集群状态,应该没什么问题了。

安装过程中出现的问题以及解决办法:

1、关于yum 源的问题

建议使用国内源,比如:

网易镜像源http://mirrors.163.com/ceph
阿里镜像源http://mirrors.aliyun.com/ceph
中科大镜像源http://mirrors.ustc.edu.cn/ceph
宝德镜像源 http://mirrors.plcloud.com/ceph

以jewel为例:

http://mirrors.163.com/ceph/rpm-jewel/el7
http://mirrors.163.com/ceph/keys/release.asc

2、关于执行ceph-deploy –overwrite-conf mon create-initial出现的问题(最容易出问题的感觉也就是这一条命令)

(1)出现admin-socket问题

当主机名/etc/hostname 和/etc/hosts中给该主机命的名字不一样,例如我之前安装ceph-deploy用的主机是10.0.1.90,我把主机10.0.1.90命名为e1090,即/etc/hostname设为e1090,然而我在/etc/hosts中给该主机取的名字为mon。然后就会出现这个问题,如下所示:

排查这个问题要注意看ERROR上面的INFO信息:Running command: ceph –cluster=ceph –admin-daemon /var/run/ceph-mon.mon.asok mon_status
这条信息之后就出现了error,说明很有可能它所执行的那条命令没成功,首先进入这个目录查看有没有这个文件:

# ls  /var/run/
ceph-mon.e1090.asok

发现我的这个目录下的文件名为ceph-mon.e1090.asok,而不是INFO中的ceph-mon.mon.asok,所以立马修改/etc/hosts,将名字重新命名为与hostname 一致的名字,然后这个问题就解决了。另外,如果ceph.conf配置文件中没有设置public netmork这一项,也有可能会出现这个问题,所以最好设置。

(2)[WARNIN] monitor e1090 does not exist in monmap

如果上面(1)那个问题解决之后还出现这个问题,就说明你的这台mon机器down掉了,我刚开始的时候也不敢相信,(纳尼?我刚部署它就down掉了?),其实可以看上面的信息,发现mons这一项中的addr信息是0.0.0.0:0/1,这里就知道了应该就是down掉了,而且注意看name这一项还是之前取的名字mon ,虽然第一个问题解决了,但还是没成功,所以索性换了节点,不用这个节点。

这一条可以自己通过将其他节点也作为mon节点试一下,如果其他节点成功了就该节点不成功,那一定是down掉了,用ceph -s查看集群状态的时候也能够看出来它down了。

(3)failed to connect to host:e1092,e1093, e1094

看WARNIN信息,发现说:no mon key found in host: e1092,后面的WARNIN也是一样的。这时候可以看下my-cluster目录下有没有生成key,出现这个错误应该是没有生成,解决办法就是将my-cluster目录下的ceph-mon.keying 文件拷贝到所有节点的/var/lib/ceph/mon/ceph-$hostname目录下。即

# cp /root/cluster/ceph.mon.keyring /var/lib/ceph/mon/ceph-1093/keyring
# scp /home/chenjuan/my-cluster/ceph.mon.keyring e1092:/var/lib/ceph/mon/ceph-e1092/keyring
# scp /home/chenjuan/my-cluster/ceph.mon.keyring e1094:/var/lib/ceph/mon/ceph-e1094/keyring

再次执行ceph-deploy –overwrite-conf create-initial,应该就成功了。

标签:部署集群 发布于:2019-11-07 03:48:05