前言
本文搭建了一个由三节点(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使用的更多相关文章
-
centos7下部署mariadb+galera数据库高可用集群
[root@node1 ~]# cat /etc/yum.repos.d/mariadb.repo # MariaDB 10.1 CentOS repository list - created 20 ...
-
Centos7下设置ceph 12.2.1 (luminous)dashboard UI监控功能
前言 本文所使用的集群是作者在博客 Centos7下部署ceph 12.2.1 (luminous)集群及RBD使用 中所搭建的集群 dashboard是为了完成对集群状态进行UI监控所开发的功能, ...
-
Centos7下ELK+Redis日志分析平台的集群环境部署记录
之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...
-
linux下部署Elasticsearch6.8.1版本的集群
一.准备工作 安装包的下载:elasticsearch-6.8.1.tar.gz 集群服务器:A B 一.单节点elasticsearch的安装部署 a.进入es的下载目录home:解压tar ...
-
Centos7下部署两套python版本并存
Centos7下部署两套python版本并存 需求说明:centos7.2系统的开发机器上已经自带了python2.7版本,但是开发的项目中用的是python3.5版本,为了保证Centos系统的 ...
-
CentOS7.6部署ceph环境
CentOS7.6部署ceph环境 测试环境: 节点名称 节点IP 磁盘 节点功能 Node-1 10.10.1.10/24 /dev/sdb 监控节点 Node-2 10.10.1.20/24 /d ...
-
CentOS7下部署rsync服务
说明: 在CentOS7下部署rsync服务和在CentOS6上部署基本上是一样的,只是CentOS7自带了rsyncd启动脚本,由systemd管理而已. rsync服务端配置 [root@SERV ...
-
Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
-
一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)
1)集群规划:主机名 IP 安装的软件 运行的进程master 192.168.199.130 jdk.hadoop ...
随机推荐
-
[转载] 理解 epoll 的事件触发机制
原文: http://weibo.com/p/1001603862394207076573?sudaref=weibo.com epoll的I/O事件触发方式有两种模式:ET(Edge Trigger ...
-
Yii AR Model CRUD数据库操作
Yii AR很好很强大,但刚开始不知道怎么使用,可以先看下官方文档 官方文档:http://www.yiichina.com/guide/database.ar 下面是我对AR的一些理解 对于一个Mo ...
-
CSS3盒模型display:-webkit-box;的使用
box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没有得到 ...
-
Redis Cluster 实践
一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...
-
Android RoboGuice 使用指南
1.概述 在开发应用时一个基本原则是模块化,并且近最大可能性地降低模块之间的耦合性.在Java平台上Spring Framework 以及.Net 平台 CAB ,SCSF 和Prism (WPF,S ...
-
固定GridView标题栏,冻结列功能实现
<%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> < ...
-
SpriteBuilder中如何固定两个互不接触的物理物体?
如下图: 这个弹簧装置由3部分组成(从上到下): 弹板 弹簧 弹簧金属底座 其中弹板将固定在弹簧上(但并没有接触,如上图),这就引出一个有趣的问题:怎么样才能将两个独立的物理物体(注意:是物理物体)固 ...
-
mysql-5.7.16-winx64解压版安装超详细图文教程
1.安装: 将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放在D盘根目录下 2.配置: 进入mysql-5.7.16-winx64目录,将里面的my-de ...
-
go interface 的坑
一.概述 [root@node175 demo]# tree . ├── lib │ └── world.go ├── README └── server.go directory, files ...
-
Java多线程(四) —— 线程并发库之Atomic
一.从原子操作开始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包,而Queue,很多情况下使用到了Atomic操作,因此首先从这里开始). 很多情况下 ...