博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ceph部署 集群搭建
阅读量:7014 次
发布时间:2019-06-28

本文共 5236 字,大约阅读时间需要 17 分钟。

hot3.png

背景

Ceph简介

Ceph是一个分布式存储,可以提供对象存储、块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成。一个Ceph集群中有Monitor节点、MDS节点(可选,用于文件存储)、至少两个OSD守护进程。

Ceph OSD:OSD守护进程,用于存储数据、处理数据拷贝、恢复、回滚、均衡,并通过心跳程序向Monitor提供部分监控信息。一个Ceph集群中至少需要两个OSD守护进程。
Monitor:维护集群的状态映射信息,包括monitor、OSD、Placement Group(PG)。还维护了Monitor、OSD和PG的状态改变历史信息。
MDS:存储Ceph文件系统的元数据。

环境规划

4台服务器:1台作为Monitor,1台作为OSD RGW,还有两台作为OSD。

所有服务器都安装centos7。

环境准备:

编辑hosts文件及hostname

分别将Monitor节点定义为ceph-1,两台OSD节点定义为ceph-2、ceph-3,RGW节点定义为ceph-4。

执行命令(注:这里只写了ceph-1的,其他节点自行更改)。

# hostnamectl set-hostname ceph-1

再分别打开各节点的/etc/hosts文件,加入这四个节点ip与名称的对应关系,类似如下:

127.0.0.1   localhost127.0.1.1   ceph-1192.168.1.100   ceph-2192.168.1.101   ceph-3192.168.1.102   ceph-4192.168.1.103   ceph-5# The following lines are desirable for IPv6 capable hosts::1     localhost ip6-localhost ip6-loopbackff02::1 ip6-allnodesff02::2 ip6-allrouters

搭建NTP环境

使用Monitor服务器作为NTP server,另外3台作为NTP client。

NTP server

需安装NTP服务,执行命令:yum install ntp -y

NTP服务开机自启,执行命令:systemctl enable ntpd

并重启ntp服务,执行命令:service ntpd restart

注意:NTP服务刚重启时,需要一定的时间来同步时间源,不能立刻提供服务,需一定时间后才能正常工作(一般5分钟左右)。可在NTP server端执行明令ntpq -p来查看服务状态。

NTP client

需安装ntpdate,执行命令:apt install ntpdate。

安装后,执行命令ntpdate [-d] {serverIp}来同步时间。-d表示打开调试信息,可不打开。例如:

# ntpdate 109.105.115.67

成功时会出现类似提示:ntpdate[39600]: step time server 109.105.115.67 offset -46797.696033 sec。如果出现:ntpdate[28489]: no server suitable for synchronization found。可能是因为server还未能正常提供服务,等待一段时间后再次尝试。

同步成功后,还需要将时间写入硬件时钟,防止OS重启后时间恢复至原样。执行命令hwclock –w。

使用SSH免密码登录

生成SSH keys,不要设置passphrase,所有的输入选项都直接回车。

# ssh-keygen Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.

拷贝这个key到所有的节点。

# ssh-copy-id ceph-1# ssh-copy-id ceph-2# ssh-copy-id ceph-3# ssh-copy-id ceph-4# ssh-copy-id ceph-5

部署Ceph存储

这里,我们直接在Monitor节点ceph-1上安装ceph-deploy,然后通过ceph-deploy在ceph-1上部署Monitor,在ceph-2和ceph-3节点上部署OSD,最后,在ceph-4上部署Ceph网关rgw。

在ceph-1上创建一个目录,用来维护ceph-deploy生成的配置信息。ceph-deploy命令会在当前目录生成输出文件,确保执行该命令时位于对应的目录。

mkdir ceph-configcd ceph-config

安装ceph-deploy

更新镜像仓库,并安装ceph-deploy。

yum install ceph-deploy

重新开始部署Ceph

在安装过程中如果遇到了问题,想重新开始安装,执行以下命令来清空配置。

ceph-deploy purgedata {ceph-node} [{ceph-node}]ceph-deploy forgetkeys

如果还想清空Ceph包,需执行:

ceph-deploy purge {ceph-node} [{ceph-node}]

注意:在实际的操作中,如果直接执行ceph-deploy purgedata,总是会报错,提示Ceph还安装在该节点上,拒绝执行清空操作。因此我都是先执行ceph-deploy purge,再执行ceph-deploy purgedata和ceph-deploy forgetkeys。

部署Ceph

创建集群

ceph-deploy new {initial-monitor-node(s)}

如:

ceph-deploy new ceph-1

在当前目录下使用ls和cat命令检查ceph-deploy输出结果,可以看到一个ceph配置文件,一个密钥环以及为新集群创建的日志文件。

修改osd参数

因为我的环境中只有两个OSD,而Ceph模式的副本个数为3,因此我们需要修改配置文件Ceph.conf,在[global]部分增加如下配置:

osd pool default size = 2

如果OSD存储数据分区的文件系统类型不是xfs,则需要设置一些osd变量,否则OSD不能正常启动,报错为“ERROR: osd init failed: (36) File name too long”。同样,在Ceph.conf文件,[global]部分增加如下配置:

osd max object name len = 256osd max object namespace len = 64

配置Ceph网络参数

如果环境中有多种网络,那么需要在Ceph.conf的[global]部分下增加如下配置。

public network = {ip-address}/{netmask}

如果环境中只有一种网络,则不需要此配置。关于网络配置更多信息,可参考:

安装Ceph

ceph-deploy install {ceph-node}[{ceph-node} ...]

例如:

ceph-deploy install ceph-1 ceph-2 ceph-3 ceph-4

执行命令后,会在每个节点上都安装Ceph。注意:如果执行过ceph-deploy purge命令,则需要重新安装Ceph。

安装Monitor

安装并初始化Monitor,收集keys:

# ceph-deploy mon create-initial

执行完命令后,当前目录会生成如下keyring:

• {cluster-name}.client.admin.keyring • {cluster-name}.bootstrap-osd.keyring • {cluster-name}.bootstrap-mds.keyring • {cluster-name}.bootstrap-rgw.keyring

创建OSD数据目录

OSD的数据目录可以使用单独的分区,也可以只使用已有分区的目录。这里我们是直接使用目录的方式。如果需要使用单独数据分区和日志分区,可参考: 。

添加两个OSD。

# ssh ceph-2# sudo mkdir /var/local/osd0# chown ceph:ceph /var/local/osd0# exit# ssh ceph-3# sudo mkdir /var/local/osd1# chown ceph:ceph /var/local/osd1# exit

准备OSD

ceph-deploy osd prepare {ceph-node}:/path/to/directory

如:

# ceph-deploy osd prepare ceph-2:/var/local/osd0 ceph-3:/var/local/osd1

激活OSD

ceph-deploy osd prepare {ceph-node}:/path/to/directory

如:

# ceph-deploy osd prepare ceph-2:/var/local/osd0 ceph-3:/var/local/osd1

拷贝配置文件和管理key

ceph-deploy admin {admin-node} {ceph-node}

如:

# ceph-deploy admin ceph-1 ceph-2 ceph-3

确保ceph.client.admin.keyring的权限正确,在每个节点上执行:

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

检查集群状态

# ceph –s

集群应该返回health HEALTH_OK,并且所有pg都是active+clean的状态,这样部署就完全没问题了。

部署rgw网关

如果要使用Ceph的对象存储,就需要部署rgw网关。执行以下步骤创建一个新的rgw实例:

ceph-deploy rgw create {gateway-node}

如:

# ceph-deploy rgw create  ceph-4

验证Ceph

当显示状态健康时,可写入数据并查看数据。

创建一个普通文本文件testfile.txt,并向其写入数据。
创建一个pool。格式为:rados mkpool {pool-name},执行:

# rados mkpool data

将文件写入pool。格式为:rados put {object-name} {file-path} --pool={pool-name},执行:

# rados put test-object-1 testfile.txt --pool=data

如果文件不大,应该很快就写完并成功了。如果卡主较长时间,则可能是出错了,需要排查问题。

查看文件是否存在于pool中,格式为:rados -p {pool-name} ls,执行:

# rados -p data ls

确定文件的位置。格式为:ceph osd map {pool-name} {object-name},执行:

# ceph osd map data test-object-1

从pool中读取文件。格式为:rados get {object-name} --pool={pool-name} {file-path} ,执行:

# rados get test-object-1 --pool=data myfile

可比对读出的文件myfile和原文件testfile.txt是否相同,执行命令:diff myfile testfile.txt。

从pool中删除文件。格式为:rados rm {object-name} --pool={pool-name},执行:

# rados rm test-object-1 --pool=data

转载于:https://my.oschina.net/rui123672/blog/880047

你可能感兴趣的文章
ORACLE学习笔记--性能优化4
查看>>
毕啸南专栏 | 对话李开复:AI科学家的转型之路
查看>>
iphone: 可编辑的tableView Move&Delete
查看>>
linux shell “(())” 双括号运算符使用
查看>>
Asp.net Ajax Accordion控件的用法
查看>>
WMI使用小工具——WMI代码生成器(转)
查看>>
测试我用WLW在CSDN上的第一篇博客
查看>>
爱上MVC3系列~使用视图模型的好处及与数据模型之间的赋值问题
查看>>
jQuery中的join方法
查看>>
Java内存模型小析之原子性和可见性(二)
查看>>
JSP取得绝对路径
查看>>
Python Module_os_操作系统
查看>>
阿里云异构计算产品家族之数据智能,加速AI智能创新
查看>>
最新Do Not Track标准问世:网站都应尊重用户选择
查看>>
逾半数全球商业领袖认同智能自动化,但首先要解决员工的抵触情绪
查看>>
被忽视的Web安全漏洞:如何识别和解决?
查看>>
“懒惰”Linux管理员的10个关键技巧
查看>>
SDN网络的构建及通信业务与光纤引入
查看>>
高热之下有冰点 大数据产业遭遇成长期烦恼
查看>>
大数据时代零售企业如何进行精确营销
查看>>