centos7.2 搭建ceph集群
2018-01-09 21:25
1211 查看
centos7.2 搭建ceph集群
最近正在学习Kubernetes,搭建Kubernetes。看到可以使用harbor和cephfs配合搭建docker私有仓库。于是学习搭建ceph集群。环境介绍
使用腾讯云的两台两台主机操作系统的和版本内核为: centos 7.2 、Linux 3.10.0-693.el7.x86_64。ceph 采用ceph version 10.2.10。
Ceph 安装原理
ceph分布式存储由若干个组件组成,包括:Ceph Monitor、Ceph OSD和Ceph MDS,其中如果你仅使用对象存储和块存储时,MDS不是必须的,仅当你用使用Cephfs时,MDS才是需要安装的。
ceph的安装模型与k8是有些类似,也是通过一个deploy node远程操作其他Node以进行create、prepare和activate各个node上的组件,官方给的组件示意图如下:
本次安装的实际环境是:
admin-node deploy-node 172.16.0.16 mon.node 172.16.0.16 osd.0 172.16.0.16 osd.1 172.16.16.7
两台腾讯云服务器承担多个角色。
环境准备
配置host文件(每一台主机上)
172.16.0.16 master 172.16.0.16 admin # 仅在master上配置 172.16.16.7 slave1
创建ceph账户
# useradd -d /home/${username} -m ${username} # passwd ${uasername} # cat << EOF > /etc/sudoers.d/ceph # > ceph All = (root) NOPAASSWD ALL # > EOF
创建ceph使用的账户并且赋予sudo无密码权限
配置ssh 免密码登录
# ssh-keygen # 然后把master上的公钥拷贝到其他的节点上去 # ssh-copy-id ceph@master # ssh-copy-id ceph@master # ceph 为上一步创建的账户
执行完成后测试ssh免密码登录是否有效。最后在Deploy node节点上创建并编辑~/.ssh/config,这是ceph官方推荐的步骤,这样做的步骤可以避免每次执行ceph-deploy步骤时都要去指定–username参数。
config内容如下:
Host master Hostname master User ceph Host slave1 Hostname slave1 User ceph
但是这儿有个小错误,发现创建config文件就就无法登陆了,一开始以为是自己的格式不对,但是怎么修改都不对,最后上网上查找之后发现是权限的问题。
chmod 600 config
问题就解决了。
安装ntpd
# yum -y install ntpd # systemctl enable ntpd # systemctl satus ntpd
我参照网上以master节点为ntpd服务器,服务器的配置没有成果,只是简单的同步了一下时间。具体ntpd服务器如何配置请参考centos7.2ntpd服务器配置
安装ceph
更新系统源
rm -rf /etc/yum.repos.d/*.repo 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 sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo yum clean all yum makecache fast
如果之前安装过ceph,可以先使用如下命令,清理一个干净的环境。
ceph-deploy purge node1 node2 ceph-deploy purgedata node1 node2 ceph-deploy forgetkeys
安装ceph-deploy
#yum install http://mirrors.163.com/ceph/rpm-jewel/el7/noarch/ceph-deploy-1.5.38-0.noarch.rpm # 查看ceph-deploy版本 # ceph-deploy --version # 1.5.38
这里指定了系统源,防止国外镜像无法下载
安装ceph
在deploy节点上建立cephinstall目录,我们首先来创建一个ceph cluster,这个环节需要通过执行ceph-deploy new {initial-monitor-node(s)}命令。然后进行目录执行创建的相关命令会在该目录下生产相关的配置文件。我们的ceph monitor node就是master,因此我们执行下面命令来创建一个名为ceph的ceph cluster。
# ceph-deploy new master
遇到如下错误
Traceback (most recent call last): File "/usr/bin/ceph-deploy", line 18, in <module> from ceph_deploy.cli import main ImportError: No module named ceph_deploy.cli
从网上查找之后发现是系统python版本的问题吧/usr/bin/ceph-deploy第一行修改成
/usr/bin/python2.7即可。然后重新执行。
执行完成后会在cephinstall目录下生成相关的文件。
# ls # eph-deploy-ceph.log ceph.conf ceph.mon.keyring
由于我们仅有两个OSD节点,因此我们在进一步安装之前,需要先对ceph.conf文件做一些配置调整:
修改配置
4000
以进行后续安装
# 在 global标签下添加 [global] osd pool default size = 2
ceph.conf保存退出。接下来,我们执行下面命令在master和slave1上安装ceph运行所需的各个binary包.
ceph-deploy install --release jewel --repo-url http://mirrors.163.com/ceph/rpm-jewel/el7 --gpg-url http://mirrors.163.com/ceph/keys/release.asc master slave1
安装的时候指定了系统源。同样会因为报系统python版本的问题而报错,修改之后就可以了。
初始化 ceph monitor node
有了ceph启动的各个程序后,我们首先来初始化ceph cluster的monitor node。在deploy node的工作目录cephinstall下,执行
ceph-deploy mon create-initial
执行完成后又会在目录下多出许多配置文件。
prepare ceph OSD node。
至此,ceph-mon组件程序已经成功启动了,剩下的只有OSD这一关了。启动OSD node分为两步:prepare 和 activate。OSD node是真正存储数据的节点,我们需要为ceph-osd提供独立存储空间,一般是一个独立的disk。但我们环境不具备这个条件,于是在本地盘上创建了个目录,提供给OSD。
在deploy node上执行: ssh master sudo mkdir /var/local/osd0 exit ssh slave1 sudo mkdir /var/local/osd1 exit # 如果未给文件添加权限的话在activate的时候会报错 master: sudo chown -R ceph:ceph /var/local/osd0 slave1: sudo chown -R ceph:ceph /var/local/osd1
接下来,我们就可以执行prepare操作了,prepare操作会在上述的两个osd0和osd1目录下创建一些后续activate激活以及osd运行时所需要的文件。
# ceph-deploy osd activate master:/var/local/osd0 slave1:/var/local/osd1
prepare并不会启动ceph osd,那是activate的职责。
activate OSD node
# ceph-deploy osd activate node1:/var/local/osd0 node2:/var/local/osd1
执行这一步的时候我都报错了
ceph ** ERROR: error creating empty object store in /var/local/osd0: (22) Invalid argument
这个错误我报的很绝望呀,在网上各种查都不行。怎么也找不到解决办法,然后我最后不知道抽风了的还是怎么的重新执行了以便就执行成功了,这真的让我很绝望。这个问题折腾了我一天。
执行 ceph admin
没有错误报出!但OSD真的运行起来了吗?我们还需要再确认一下。
我们先通过ceph admin命令将各个.keyring同步到各个Node上,以便可以在各个Node上使用ceph命令连接到monitor。执行admin
ceph-deploy admin admin master slave1
接下来执行 ceph命令查看一下集群节点中的状态:
ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.07660 root default -2 0.03830 host master 0 0.03830 osd.0 down 0 1.00000 -3 0.03830 host slave1 1 0.03830 osd.1 down 0 1.00000
果然真的报错了,查看一下master上的日志:/var/log/ceph/ceph-osd.0.log:
错误如下:
filestore(/var/lib/ceph/osd/ceph-0) mount: enabling WRITEAHEAD journal mode: checkpoint is not enabled 2018-01-09 16:02:23.806486 7f9343003800 -1 journal FileJournal::_open: disabling aio for non-block journal. Use journal_force_aio to force use of aio anyway 2018-01-09 16:02:23.806488 7f9343003800 1 journal _open /var/lib/ceph/osd/ceph-0/journal fd 18: 5368709120 bytes, block size 4096 bytes, directio = 1, aio = 0 2018-01-09 16:02:23.807386 7f9343003800 1 journal _open /var/lib/ceph/osd/ceph-0/journal fd 18: 5368709120 bytes, block size 4096 bytes, directio = 1, aio = 0 2018-01-09 16:02:23.807643 7f9343003800 1 filestore(/var/lib/ceph/osd/ceph-0) upgrade 2018-01-09 16:02:23.807774 7f9343003800 -1 osd.0 0 backend (filestore) is unable to support max object name[space] len 2018-01-09 16:02:23.807778 7f9343003800 -1 osd.0 0 osd max object name len = 2048 2018-01-09 16:02:23.807779 7f9343003800 -1 osd.0 0 osd max object namespace len = 256 2018-01-09 16:02:23.807780 7f9343003800 -1 osd.0 0 (36) File name too long 2018-01-09 16:02:23.808564 7f9343003800 1 journal close /var/lib/ceph/osd/ceph-0/journal 2018-01-09 16:02:23.815770 7f9343003800 -1 ** ERROR: osd init failed: (36) File name too long
发现问题是filename 太长,官方不建议采用ext4文件系统作为ceph的后端文件系统,如果采用,那么对于ext4的filesystem,应该在ceph.conf中添加如下配置:修改ceph.conf文件在global标签下添加如下.
osd max object name len = 256 osd max object namespace len = 64
由于配置已经分发到个个node上,我们需要到各个Node上同步修改:/etc/ceph/ceph.conf,添加上面两行。然后重新activate osd node,这里不赘述。重新激活后,我们来查看ceph osd状态:
$ ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.07660 root default -2 0.03830 host master 0 0.03830 osd.0 up 1.00000 1.00000 -3 0.03830 host slave1 1 0.03830 osd.1 up 1.00000 1.00000
至此ceph集群搭建完成。
[1]: http://tonybai.com/2016/11/07/integrate-kubernetes-with-ceph-rbd/ “使用Ceph RBD为Kubernetes集群提供存储卷”
[2]: https://www.lijiawang.org/posts/intsall-ceph.html “基于CentOS 7.3 安装Ceph Jewel 10.2.9”
相关文章推荐
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- centos7上ceph集群搭建
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群的环境配置
- centos7.2 基于zookeeper集群搭建activeMQ的集群
- Centos搭建ceph+++五、创建ceph集群
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- Centos7下ceph luminous集群搭建
- CentOS7.2中使用Kubernetes(k8s)1.4.6源码搭建k8s容器集群环境
- Centos7-单台物理机搭建ceph集群
- Centos-7.2 下搭建 Zookeeper-3.5.3 集群的搭建与测试
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- Centos7.2:搭建Ceph管理系统Inscope
- Centos7.2安装Ambari2.4.2+HDP2.5.3搭建Hadoop集群
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- mysql 数据库集群搭建:(三)CentOS 7.2 MariaDB 10.2 galera 集群安装
- Centos6.5下Ceph存储集群的搭建
- docker 土法制作zookeeper镜像 并且搭建集群 基于centos7.2
- ceph存储 centos上搭建Ceph分布式文件系统集群示例一
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群
- Centos 7.2 安装 Ambari 2.2.2 + HDP 2.4.2 搭建Hadoop集群