前言

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

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

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

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

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

作者提供技术支持,仅供解决读者完全按照本文进行搭建遇到问题,作者邮箱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免密进行配置,但是为了可以直接复制虚拟机,每个节点不用单独编辑就提前了。

换阿里源

为了让节点能够使用本地源,更快地安装一些依赖包,本文将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

添加如下行

osd pool default size = 2

public network = 192.168.1.0/255.255.255.0

安装ceph二进制包

Master节点下操作

$ ceph-deploy install 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/osd0

$chmod 777 /var/local/osd0

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块存储RBD的使用

创建池

Master 下操作:

$ ceph osd pool create rbd 256 256

 注意:此版本不自动生成rbd的pool,需要手动创建

创建块

可以在任何一个节点下操作,本文是在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

Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用的更多相关文章

  1. centos7下部署mariadb+galera数据库高可用集群

    [root@node1 ~]# cat /etc/yum.repos.d/mariadb.repo # MariaDB 10.1 CentOS repository list - created 20 ...

  2. Centos7下设置ceph 12.2.1 (luminous)dashboard UI监控功能

    前言 本文所使用的集群是作者在博客 Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用  中所搭建的集群 dashboard是为了完成对集群状态进行UI监控所开发的功能, ...

  3. Centos7下ELK+Redis日志分析平台的集群环境部署记录

    之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...

  4. linux下部署Elasticsearch6.8.1版本的集群

    一.准备工作 安装包的下载:elasticsearch-6.8.1.tar.gz 集群服务器:A     B 一.单节点elasticsearch的安装部署 a.进入es的下载目录home:解压tar ...

  5. Centos7下部署两套python版本并存

    Centos7下部署两套python版本并存   需求说明:centos7.2系统的开发机器上已经自带了python2.7版本,但是开发的项目中用的是python3.5版本,为了保证Centos系统的 ...

  6. CentOS7.6部署ceph环境

    CentOS7.6部署ceph环境 测试环境: 节点名称 节点IP 磁盘 节点功能 Node-1 10.10.1.10/24 /dev/sdb 监控节点 Node-2 10.10.1.20/24 /d ...

  7. CentOS7下部署rsync服务

    说明: 在CentOS7下部署rsync服务和在CentOS6上部署基本上是一样的,只是CentOS7自带了rsyncd启动脚本,由systemd管理而已. rsync服务端配置 [root@SERV ...

  8. Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...

  9. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

随机推荐

  1. java从命令行接收多个数字,求和程序分析

    问题:编写一个程序,此程序从命令行接收多个数字,求和之后输出结果. 1.设计思想 (1)声明两个变量接收输入的字符串 (2)将字符串转换成int类型 (3)输出求和 2.程序流程图 3.源程序代码 i ...

  2. maven编译时错误:无效的目标发行版

    (转)Maven 将依赖打进一个jar包 博客分类: maven   maven配置 <?xml version="1.0" encoding="UTF-8&quo ...

  3. 使用javaAPI操作hdfs

    欢迎到https://github.com/huabingood/everyDayLanguagePractise查看源码. 一.构建环境 在hadoop的安装包中的share目录中有hadoop所有 ...

  4. Bear and Floodlight 状态压缩DP啊

    Bear and Floodlight Time Limit: 4000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u ...

  5. http://codeforces.com/contest/828

    哇这是我打的第一场cf,第一题都wa了无数次,然后第二题差几分钟交 ,第二天一交就AC了内心是崩溃的.果然我还是太菜l.... A. Restaurant Tables time limit per ...

  6. 一张图理清ASP.NET Core启动流程

    1. 引言 对于ASP.NET Core应用程序来说,我们要记住非常重要的一点是:其本质上是一个独立的控制台应用,它并不是必需在IIS内部托管且并不需要IIS来启动运行(而这正是ASP.NET Cor ...

  7. python之路第五篇之递归(进阶篇:续:经典例子剖析)

    递归 在函数内部,可以调用其他函数; 如果一个函数在内部调用自身本身,这个函数就是递归函数. 例如,我们来计算阶乘: n! = 1 x 2 x 3 x ... x n, 用函数f1(n)表示,可以看出 ...

  8. 【NOIP】OpenJudge - 15-03:雇佣兵

    #include<stdio.h>//雇佣兵 int main() { ; scanf("%d%d%d",&M,&N,&X); n=N; m=M ...

  9. MySQL的备份与还原以及常用数据库查看命令

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serv ...

  10. dotweb框架之旅 [一] - HelloWorld

    一直想着,要系统性的写一些dotweb使用的文章,之前拖延了不少时间,今天,下定决定,算是正式的开始,也请大家一起监督. dotweb,是一款追求简约大方的go web框架,正如其github项目主页 ...