原创,本文地址http://www.cnblogs.com/pcxie/p/7799372.html

前言

本文搭建了一个由三节点(master、slave1、slave2)构成的ceph分布式集群,并通过示例使用ceph块存储。

本文集群三个节点基于三台虚拟机进行搭建,节点安装的操作系统为Centos7(yum源),ceph版本选取为12.2.1。作者也是一位初学者,其间遇到了很多问题,故希望通过该博客让读者避免。

其中本文为快速搭建过程,先在一台虚拟机上完成大部分的ceph搭建的预检过程,之后将虚拟机复制为3个虚拟机,构成集群节点。所以建议读者按照本文步骤进行搭建,不要直接创建三个虚拟机,造成不必要的工作量。

本文#开头的命令代表的是root用户下的操作,$代表的是ceph用户下的操作。

建议读者每完成一步,可以将虚拟机做快照,方便读者遇到问题时能恢复到以前正确的版本。

本文的搭建过程主要参考官网教程http://docs.ceph.org.cn/start/

作者提供技术支持,仅供解决读者完全按照本文进行搭建遇到问题,作者邮箱pcxie@pku.edu.cn

搭建过程

创建用户

首先为集群创建一台虚拟机,登录到该节点root用户下,并为其创建ceph集群将要使用的用户ceph

# useradd -m ceph
# passwd ceph

注意:本文使用的虚拟机操作系统为centos7,http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1708.iso ,使用的是VMware虚拟机管理软件,最好是安装GNOME界面,方便新手操作,当然有一定基础可以直接使用命令行

给ceph用户设置为可以允许可以无密执行sudo命令

#  echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
#  chmod 0440 /etc/sudoers.d/ceph

注意:此步不可省略,若没有执行此步,会导致ceph管理节点在为其他节点安装ceph二进制包时报错

关闭防火墙

#  systemctl disable firewalld
#  systemctl stop firewalld

注意:可以通过官网教程上,开启ceph需要的几个端口就行了,本文为了简单,直接将防火墙关闭,做了一个偷懒的行为

关闭selinux

#  vim /etc/selinux/config

其中有一行SELINUX=permissive更改为

SELINUX=disabled

#  setenforce 0

注意:关闭后重启才会生效,可以等到下文复制虚拟机时,一并重启,不用立即重启

修改host文件

# vim /etc/hosts

添加如下文件

192.168.1.100  master

192.168.1.101  slave1

192.168.1.102  slave2

其中的ip为集群三个节点的内网ip,以及主机名,在这个地方配置读者可能还看不懂,可以看下文中网络配置的时候就懂了,不必纠结

注意:这个地方本不应该在这个地方配置,应该是为了ssh免密进行配置,但是为了可以直接复制虚拟机,每个节点不用单独编辑就提前了,实际ip及节点名称需要按照实际情况配置。

换阿里源

为了让节点能够使用本地源,更快地安装一些依赖包,本文将centos7的原来的源换为阿里的源

# 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
# yum makecache
# yum clean all
# yum distro-sync
# yum install yum-utils
# package-cleanup --cleandupes
# yum update -y

注意:此步为非必要操作,特别指出后面的四行是为了解决在更新本地包时遇到的包冲突的问题(和换源有关系)

安装ntp

为了让节点之间时间保持一致,每个节点都要安装ntp服务

# yum install ntp ntpupdate ntp-doc

注意:和上文中修改host文件类似,此步为了快速搭建,提前了安装,应该是在下文ntp设置的地方进行安装

添加ceph.repo

添加ceph相关的源,创建ceph.repo文件

# vim /etc/yum.repos.d/ceph.repo

添加以下内容

[ceph]

name=Ceph packages for $basearch

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch

enabled=1

priority=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[Ceph-noarch]

name=Ceph noarch packages

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch

enabled=1

priority=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-source]

name=Ceph source packages

baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

enabled=1

priority=1

gpgcheck=1

type=rpm-md

gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

注意:本文使用的为阿里的源,网上还有网易163的源也挺好用的

安装Ceph依赖包

# sudo yum install yum-plugin-priorities -y
# yum install epel-release -y
# yum install snappy leveldb gdisk python-argparse gperftools-libs -y

注意:此步骤也是不能够省略,省略了会造成很大的问题

安装ceph-deploy

ceph-deploy是用来快速搭建和管理ceph集群的工具

# yum install ceph-deploy

注意:如果读者觉得有能力也可以尝试官网上的手动搭建过程

复制虚拟机

将上述虚拟机关机,并将本台虚拟机复制为三台虚拟机(直接复制虚拟机的所有文件到另一个文件夹下就行了),作为集群节点,并用VMware打开在VMware中将本虚拟机并改名,便于自己分辨是哪个虚拟机。

 注意:在此步骤之前,本文一直是在一台虚拟机上操作,此步骤后,本文拥有了三台虚拟机分别叫做master slave1 slave2

主机改名

三台主机分别使用ceph用户登陆(不是root用户),接着为每台主机进行改名操作

Master下操作:

$ sudo hostnamectl set-hostname master

Slave1下操作:

$ sudo hostnamectl set-hostname slave1

Slave2下操作:

$ sudo hostnamectl set-hostname slave2

注意:此处主机名的设置与上文中host文件的修改相呼应

集群网络设置

为了使得集群既能互相之间进行通信,又能够进行外网通信,每个节点最好有两张网卡

在VMware上为每个主机另外添加一张网卡

新添加的网卡的上网模式为桥接模式,作为内网网卡,默认的第一张网卡为外网网卡,使用默认的设置,不用修改,能够使虚拟机访问外网即可

在内网网卡的设置将DHCP关闭,并静态设置ip

Master内网ip:192.168.1.100

Slave1内网ip:192.168.1.101

Slave2内网ip:192.168.1.102

下图为一个示例

 注意:每次虚拟机重启后,网卡可能没有自动启动,需要手动重新连接,此处如果没有计算机网络的基础,可能不太理解,容易出错。此处ip设置与上文中host文件的修改相呼应

配置ssh免密登陆

三个节点均进行以下操作:

$ ssh-keygen

然后一路回车就行

$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ vim ~/.ssh/config

添加以下内容

Host master

Hostname  192.168.1.100

User           ceph

Host slave1

Hostname  192.168.1.101

User           ceph

Host slave2

Hostname  192.168.1.102

User           ceph

$ sudo chmod 600 ~/.ssh/config

为了使得master节点作为集群的管理节点,其可以ssh免密登陆到其他节点,要做以下操作:

Master主机操作如下:

$ scp .ssh/id_rsa.pub ceph@slave1:~/Desktop/
$ scp .ssh/id_rsa.pub ceph@slave2:~/Desktop/

Slave1主机操作如下:

$ cat Desktop/id_rsa.pub >> .ssh/authorized_keys

Slave2主机操作如下:

$ cat Desktop/id_rsa.pub >> .ssh/authorized_keys

配置ntp服务器

为了使得集群时间保持一致,此处对集群做ntp服务器配置,将master作为ntp服务器,其余节点作为客户端

三个节点均对ntp.conf文件进行修改但是修改内容如下

$ sudo vim /etc/ntp.conf

Master 下操作:

$ sudo vim /etc/ntp.conf

添加restrict 192.168.1.0 mask 255.255.255.0

server 127.127.1.0 iburst

Slave1 下操作

$ sudo vim /etc/ntp.conf

删除所有的带有server的行

添加行server 192.168.1.100

Slave2 下操作与slave1完全相同

$ sudo vim /etc/ntp.conf

删除所有的带有server的行

添加行server 192.168.1.100

然后三个节点均进行以下操作来启动ntp服务:

$ sudo systemctl start ntpd
$ sudo systemctl enable ntpd

注意:此步为非必要步骤,只是为了ceph集群同步时间,在测试环境是非必需的,ntp服务搭建参考网址, http://blog.csdn.net/yuanfang_way/article/details/53959591

创建ceph集群

Master节点下操作:

$ mkdir  myCluster
$ cd myCluster
$ ceph-deploy new master

集群初始设置

Master下操作:

$ vim ceph.conf

添加如下行

public network = 192.168.1.0/24

安装ceph二进制包

Master节点下操作

$ ceph-deploy install --release=luminous master slave1 slave2

初始化mon

Master节点下操作

$ ceph-deploy mon create-initial

添加osd

Slave1下操作:

$ sudo mkdir /var/local/osd0
$ chmod 777 /var/local/osd0

Slave2下操作:

$sudo mkdir /var/local/osd1
$chmod 777 /var/local/osd1

Master下操作:

$ceph-deploy osd prepare slave1: /var/local/osd0 slave2: /var/local/osd1
$ceph-deploy osd activate slave1: /var/local/osd0 slave2: /var/local/osd1

注意:不给文件夹权限会造成在activate的时候出错,还可以通过硬盘作为osd,可以参考http://docs.ceph.org.cn/rados/deployment/ceph-deploy-osd/

给节点管理集群的权限

Master下操作:

$ ceph-deploy admin master slave1 slave2

三个节点均做此操作:

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

ceph分布式集群到此搭建完成

使用图中的命令查看集群状态

注意:其中的mgr的warning是ceph 12.2.1中的一个新的功能,本文没有配置,但是其不影响集群的任何使用,本文也不在此讲述作者对此调研的结果。

ceph-mgr安装

正如上节提到的warnning是由于ceph 12版本的新功能造成的,该节通过安装ceph-mgr来解决

Ceph-mgr 在Luminous版本中正式进入了主线,ceph-mgr 作为 Ceph 集群的管理进程,未来会负责整个集群的管理操作和监控。现在的部分 Monitor 功能会迁移到 ceph-mgr 中,使得 Monitor 更专注于集群的数据面控制,降低集群对于 Monitor 的要求。所有的集群存储的数据统计功能都消失了

将mgr安装在master节点:

$ ceph-deploy mgr create master

重启master节点或者ceph集群后,上节中的warning消失

Ceph块存储RBD的使用

创建池

Master 下操作:

$ ceph osd pool create rbd 256 256

 注意:此版本不自动生成rbd的pool,需要手动创,在Ceph的Luminous版本中,需要为每个存储池Pool指定池应用。其应用类型分为三类cephfs、rbd以及rgw,不然会报一个warnning 。

指定pool应用类型为rbd,解决warnning

$     ceph osd pool application enable rbd rbd

创建块

可以在任何一个节点下操作,本文是在Master下创建:

创建一个4GB的云硬盘

$ rbd create foo --size 4096
$ rbd feature disable foo exclusive-lock, object-map, fast-diff, deep-flatten

查看块的状态

$ sudo rbd map foo

查看块的映射名,这里看到映射后为设备/dev/rbd0

为RBD创建文件系统并挂载

$ sudo mkfs.xfs /dev/rbd0
$ sudo mkdir /mnt/xpc
$ sudo mount /dev/rbd0 /mnt/xpc

查看挂载情况

写入测试

$ sudo dd if=/dev/zero of=/mnt/xpc/file1 count=100 bs=1M

对,本文作者姓名简写xpc

转载于:https://www.cnblogs.com/pcxie/p/7799372.html

Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用相关推荐

  1. Centos7.2部署HOR2.2(基于K8S集群的容器应用整合)

    一. 部署本地yum源 二. 前置环境准备 1.配置主机名和hosts文件(每个节点) (1)hostnamectl set-hostname xxx (2)编辑各节点/etc/hosts文件,修改对 ...

  2. CentOS7下安装Ceph供Kubernetes使用

    CentOS7下安装Ceph供Kubernetes使用 CentOS7下安装Ceph供Kubernetes使用 1. 环境说明 2. Ceph部署准备 2.1 节点规划 2.2 添加yum源 2.3 ...

  3. CentOS7下部署CDH5.9(HA)

    CentOS7下部署CDH5.9(HA) 文件下载 1.Cloudera Manager http://archive.cloudera.com/cm5/cm/5/cloudera-manager-c ...

  4. CentOS7环境部署kubenetes1.12版本五部曲之四:安装dashboard

    本文是<CentOS7环境部署kubenetes1.12版本五部曲>系列的第四篇,前面的实站已经搭建了kubernetes1.12集群,操作都是在控制台用kubectl命令来完成的,今天咱 ...

  5. 记一次 Centos7 安装部署 gogs-v0.12.1

    一.基本信息 Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 L ...

  6. CentOS7环境部署kubenetes1.12版本五部曲之一:标准化机器

    前提 本次部署实战需要科学上网,才能顺利安装和部署kubernetes用于学习和实践,请确保您已经完成了相关操作: 系列文章简述 本次搭建过程由五部分实战构成: 标准化机器:kubernetes环境中 ...

  7. K8S集群部署kube-Prometheus监控Ceph(版本octopus)集群、并实现告警。

    K8S集群部署kube-Prometheus监控Ceph(版本octopus)集群.并实现告警. 一.背景描述 公司K8S集群后端存储采用的是cephfs,测试环境经常性出现存储故障,虽然最后都解决了 ...

  8. 二进制部署 单Master Kubernetes-v1.14.1集群

    一.部署Kubernetes集群 1.1 Kubernetes介绍 Kubernetes(K8S)是Google开源的容器集群管理系统,K8S在Docker容器技术的基础之上,大大地提高了容器化部署应 ...

  9. 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版

    基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...

最新文章

  1. 决定系数R2真的可靠吗?
  2. iTunes 降级安装 12.6
  3. MyBatisPlus怎么忽略映射字段
  4. 使用JS提交form表单和w3c标准
  5. Python md5 sha1 的使用
  6. 使用Postman测试https接口时的小问题记录
  7. POJ 2663 Tri Tiling dp 画图找规律
  8. [转载] Python与其他语言结合的参数转换函数PyArg_ParseTuple()
  9. Ant运行build.xml执行服务器scp,异常解决jsch.jar
  10. Kotlin Compose 标准组件
  11. webservice 参数太大_webservice大数据
  12. 店铺二维码:如何生成大众点评二维码
  13. 修炼一名程序员的职业水准
  14. 【unity】编辑模式预览Animator动作,2种实现。 其中一种 playback模式是Cinema Director用的会使Unity Crash
  15. 给js对象定义属性的方法
  16. python制作ppt动画_卧槽,还能这么玩!用Python生成动态PPT
  17. DDR3 数据传输 (三)
  18. provider:SQL Network Interfaces,error:26 - 定位指定的服务器/实例时出错
  19. Uboot11之主Makefile分析2
  20. 响应式布局——Bootstrap

热门文章

  1. FFmpeg源代码简单分析:结构体成员管理系统-AVOption
  2. ffmpeg 源代码简单分析 : av_read_frame()
  3. pythonmax函数原理_Softmax函数原理及Python实现
  4. hdfs中8031是什么端口号_删了HDFS又能怎样?记一次删库不跑路事件
  5. java程序servlet_JavaWeb之第一个Servlet程序
  6. linux下redis开机自启动
  7. forward内部跳转 和redirect重定向跳转的区别
  8. php 地址获取百度经纬度,根据百度api获取一个地址的经纬度
  9. Oracle→表、表字段数据类型、表DDL语句、数据DML语句、约束、case...when、decode
  10. 计算机组成原理—虚拟存储器的基本概念