Ceph部署(一)集群搭建
背景
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。ps:我们不搭建CephFS。
所有服务器都安装Ubuntu 16.04。
环境准备:
编辑hosts文件及hostname
分别将Monitor节点定义为node1,两台OSD节点定义为node2、node3,RGW节点定义为node4。
打开Monitor节点的/etc/hostname文件,内容修改为node1,保存退出。但该文件需OS重启后才能生效,因此需再手动执行命令让其立刻生效,命令为:
# hostname node1
再分别打开各节点的/etc/hosts文件,加入这四个节点ip与名称的对应关系,类似如下:
127.0.0.1 localhost
127.0.1.1 node1
192.168.1.100 node1
192.168.1.101 node2
192.168.1.102 node3
192.168.1.103 node4# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
搭建NTP环境
使用Monitor服务器作为NTP server,另外3台作为NTP client。
NTP server
需安装NTP服务,执行命令:apt-get install ntp。
完成后,修改配置文件/etc/ntp.conf。因为环境不通外网,无法访问Ubuntu时间源。并且,这个环境也没有其他的NTP时间源,因此,在这里,我们使用Monitor服务器作为NTP server的本地时间源。在文件末尾添加如下内容:
server 127.127.1.0 # 如果有其他的NTP源,可以更换这里的ip地址。
fudge 127.127.1.0 stratum 10
并注销掉以Ubuntu时间源的部分。
#pool 0.ubuntu.pool.ntp.org iburst
#pool 1.ubuntu.pool.ntp.org iburst
#pool 2.ubuntu.pool.ntp.org iburst
#pool 3.ubuntu.pool.ntp.org iburst
#pool ntp.ubuntu.com
修改完成后,保存退出。并重启ntp服务,执行命令:service ntp 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 SERVER
在所有的节点上都安装SSH server服务。
# apt-get install openssh-server
因为我们搭建的Ceph直接使用root用户,所以需要修改ssh配置文件/etc/ssh/sshd_config,搜索PermitRootLogin选项,将其参数改为yes。保存退出文件,并重启SSH服务,执行命令:service ssh restart。
使用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 node1
# ssh-copy-id node2
# ssh-copy-id node3
# ssh-copy-id node4
设置网络代理(可选)
如果整个内网环境需要设置网络代理才能使用apt-get安装程序,那么需要在配置文件/etc/environment中添加,如:
http_proxy="http://[proxy-ip]:[proxy-port]"
https_proxy=https://[proxy-ip]:[proxy-port]
设置完成后,执行命令:export http_proxy=”http://[proxy-ip]:[proxy-port]”; export https_proxy=https://[proxy-ip]:[proxy-port],使得配置立即生效。
注意:一定要在/etc/environment中配置,而不能在诸如/etc/profile、~/.profile等类似文件配置。因为,安装ceph时,会使用ssh来连接远程节点并apt-get安装程序,但ssh只能识别/etc/environment中的环境变量,设置在其他文件中会导致网络访问失败。
注意二:所有节点都需要设置。
部署Ceph存储
这里,我们直接在Monitor节点node1上安装ceph-deploy,然后通过ceph-deploy在node1上部署Monitor,在node2和node3节点上部署OSD,最后,在node4上部署Ceph网关rgw。
在node1上创建一个目录,用来维护ceph-deploy生成的配置信息。ceph-deploy命令会在当前目录生成输出文件,确保执行该命令时位于对应的目录。
mkdir my-cluster
cd my-cluster
安装ceph-deploy
更新镜像仓库,并安装ceph-deploy。
apt-get update && sudo apt-get 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 node1
在当前目录下使用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 = 256
osd max object namespace len = 64
配置Ceph网络参数
如果环境中有多种网络,那么需要在Ceph.conf的[global]部分下增加如下配置。
public network = {ip-address}/{netmask}
如果环境中只有一种网络,则不需要此配置。关于网络配置更多信息,可参考:http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/
安装Ceph
ceph-deploy install {ceph-node}[{ceph-node} ...]
例如:
ceph-deploy install node1 node2 node3 node4
执行命令后,会在每个节点上都安装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的数据目录可以使用单独的分区,也可以只使用已有分区的目录。这里我们是直接使用目录的方式。如果需要使用单独数据分区和日志分区,可参考: http://docs.ceph.com/docs/master/rados/deployment/ceph-deploy-osd/。
添加两个OSD。
# ssh node2
# sudo mkdir /var/local/osd0
# chown ceph:ceph /var/local/osd0
# exit# ssh node3
# 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 node2:/var/local/osd0 node3:/var/local/osd1
激活OSD
ceph-deploy osd prepare {ceph-node}:/path/to/directory
如:
# ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
拷贝配置文件和管理key
ceph-deploy admin {admin-node} {ceph-node}
如:
# ceph-deploy admin node1 node2 node3
确保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 node4
验证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
Ceph部署(一)集群搭建相关推荐
- ceph 部署单机集群
文章目录 ceph-deploy部署集群 ceph-deploy 部署单机 ceph-deploy 创建osd ceph osd创建资源池 ceph创建rbd块设备 ceph创建fs文件系统 本文档主 ...
- Ceph分布式文件系统集群搭建详解
1.Ceph分布式文件系统简介 Ceph是一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统. Ceph 独一无二地在一个统一的系统中同时提供了对象.块.和文件存储功能. 基开发目标是: ...
- 集群-大规模Linux集群部署-MPI集群搭建与MPI编程
一.集群的概念及其相关技术 集群计算机是指利用高速通信网络将一组高档工作站或PC按某种结构连接起来,在并行程序设计甚至可视化人机交互集成开发环境支持下,统一调度,协调处理,实现高效并行处理的系统,利用 ...
- citus介绍和centos7安装部署和集群搭建
文章目录 citus 简介 citus主要特性 部署 centos单节点版本部署启动 centos集群部署启动 要在所有节点上执行的步骤 要在协调器节点上执行的步骤 常用语句 遇到的问题 参考 cit ...
- k8s容器化部署及集群搭建笔记
kubeadm部署k8s 将此文章写给我最心爱的女孩 目录 kubeadm部署k8s 1.部署准备工作 小知识 2.安装具体步骤 1.安装docker 2.配置国内镜像加速器 3.添加k8s的阿里云y ...
- 初试 Centos7 上 Ceph 存储集群搭建
https://blog.csdn.net/aixiaoyang168/article/details/78788703 目录 Ceph 介绍 环境.软件准备 Ceph 预检 ...
- 好客租房 — 项目发布以及各种服务集群搭建
文章目录 1 .部署架构 2 .部署计划 2.1.MySQL服务 2.1.1.架构 2.1.2.规划 2.1.3.实施 2.1.3.1.部署pxc集群 2.1.3.2.部署MS架构 2.1.3.3.部 ...
- Ceph集群搭建及其运用(块存储、ceph文件系统)
一.ceph简介 ceph被称作面向未来的存储, 可以实现的存储方式: 块存储:提供像普通硬盘一样的存储,为使用者提供"硬盘" 文件系统存储:类似于NFS的共享方式,为使用者提供共 ...
- 【CEPH-初识篇】ceph详细介绍+“ 一 ” 篇解决ceph集群搭建, “ 三 ” 大(对象、块、文件)存储使用
文章目录 前言 简介(理论篇) 逻辑结构 数据存储原理 三大存储 RADOSGW(对象网关) BRD(块存储) CEPHFS(文件存储) 所有组件结合起来 POOL.PG简介 组件结合 搭建ceph( ...
- k8s高可用集群搭建部署
简介 k8s普通搭建出来只是单master节点,如果该节点挂掉,则整个集群都无法调度,K8s高可用集群是用多个master节点加负载均衡节点组成,外层再接高可用分布式存储集群例如ceph集群,实现计算 ...
最新文章
- api 创建zookeeper客户端_zookeeper分布式锁原理及实现
- mysql遇到your password does not satisfy the current policy requirements
- 产品经理技能树之 数据体系
- web developer tips (51):使用vs2005和IE8进行调试
- linux c指定相对路径,linux c编程,选用popen()得到一个相对路径的绝对路径
- python【数据结构与算法】Queue,LifoQueue,PriorityQueue
- win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
- git常见使用场景总结
- MongonDB 知识
- 两万字深度介绍分布式系统原理,一文入魂
- linux下的权限问题
- python 中的static-method (静态函数), classmethod(类函数 ), 成员函数
- vue --- 基本的表单元素
- Spring Cloud —— Gateway 服务网关
- 第十二届 2021年1月 蓝桥杯青少年组省赛C++组 第1题--第3题(python3实现)
- docker多个mysql实例_Docker创建运行多个mysql容器的方法示例
- c语言课程总结3000字,单片机课程设计心得体会范文3000字
- 在谷歌和ie上加入mp4格式的视频
- 数字转换成大写人民币
- 考研逻辑整理 - 选言判断和选言推理
热门文章
- PLSQL界面打不开、PLSQL无法启动解决办法
- 如何用递归思想 求n的阶乘 C语言
- 分段二次插值的matlab程序,一维优化方法之二次插值法matlab程序
- 前端面试官会问的问题
- linux系统安装时无线键盘吗,[操作系统]用无线键盘鼠标装多系统或者装红旗LINUX4.0的朋友们进...
- Windows 上 DeepLab v3+ 训练自己的数据集
- 【数据应用案例】隐私保护与PATE方法
- 啃k8s之安全机制与RBAC使用方法
- DCB学习之三(CN)
- CDISC SDTM IE domain学习笔记