前言

本文搭建了一个由三节点(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. UNREFERENCED_PARAMETER

    作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命了一个变量,而没有使用时,编译器就会报警告:" ...

  2. js如何判断一个对象为空

    今天碰到一个问题如何判断一个对象为空? 总结的方法如下: 1.使用jquery自带的$.isEmptyObject()函数. var data={}; console.log($.isEmptyObj ...

  3. http://codeforces.com/problemset/problem/847/E

    E. Packmen time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  4. HAProxy安装文档

    HAProxy安装文档 [toc][TOC] 一.环境说明 系统环境:CentOS Linux release 7.2.1511 (Core) 系统内核:3.10.0-327.el7.x86_64 软 ...

  5. 委托、事件、Observer观察者模式的使用解析一

    一.前言 委托.事件得理论我就不解释了,不会的时候觉得很难,会了发现挺简单的,回头想想其实在JavaScript中常常用到,譬如:setTimeout()就是典型的委托. 二.传统编码方式 传统的调用 ...

  6. winwebmail设置能用foxmail收发邮件

    域名解析注意 1.首先做A记录解析: 主机名处:输入 mail IP地址处:输入IP地址 2.做MX记录: 主机名处: 大都保持空输入,什么也不用输入   TTL:默认就可以了,不需要改动 优先级:一 ...

  7. 分布式锁的实现(redis)

    1.单机锁 考虑在并发场景并且存在竞态的状况下,我们就要实现同步机制了,最简单的同步机制就是加锁. 加锁可以帮我们锁住资源,如内存中的变量,或者锁住临界区(线程中的一段代码),使得同一个时刻只有一个线 ...

  8. elasticsearch的映射(mapping)和分析(analysis)

    转发自:http://blog.csdn.net/hzrandd/article/details/47128895 分析和分析器 分析(analysis)是这样一个过程: 首先,表征化一个文本块为适用 ...

  9. java中重载变长参数方法

    一.测试代码 package com.demo; public class Interview { public static void test(int i){ System.out.println ...

  10. 【特效】hover图片立体翻转

    hover图片翻转效果二::绕Y轴旋转90度,注意父层要加透视属性perspective,这样才能看出立体效果 html: <ul class="list-img"> ...