关于安装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,应该就成功了。
参考资料:
分布式文件系统Ceph:http://www.bijishequ.com/detail/370666?p=
Ceph分布式存储集群在CentOS 7.1上手动安装部署指南:http://bbs.ceph.org.cn/question/138