Ceph-原理-安装-维护-Centos7
Ceph安装部署文档
Ceph安装部署文档目录一:简介 (1)二:部署环境介绍 (1)三:集群配置准备工作 (2)3.1 : 生成SSH证书,节点建立连接 (2)3.2 : 建立ip地址list, 修改host文件 (3)3.3 : 网络端口设置 (3)3.4 : 安装centos的yum源软件包=>全部节点安装 (4)3.5 : 添加时间同步定时任务 (4)3.6 : 安装yum-plugin-priorities. (8)四:安装ceph软件包 (8)4.1、安装ceph部署机,使用ceph-deploy方式安装部署 (8)4.2、安装ceph存储集群(包括ceph对象网关) (8)五:搭建ceph集群 (8)5.1 : 新建ceph集群 (9)5.2 : 添加mon节点 (9)5.3 : 添加osd节点 (9)六:安装过程出现的部分错误及解决方法 (11)七:常用命令 (11)一:简介Ceph 生态系统架构可以划分为四部分:1. Clients:客户端:数据用户2. mds:Metadata server cluster,元数据服务器:缓存和同步分布式元数据(此文档没有安装mds)3. osd:Object storage cluster,对象存储集群:将数据和元数据作为对象存储,执行其它关键职能4. mon:Cluster monitors,集群监视器:执行监视功能二:部署环境介绍三:集群配置准备工作3.1 : 生成SSH证书,节点建立连接1)所有节点修改hostnamevim /etc/sysconfig/network2)安装SSH (主节点)sudo apt-get install openssh-server3)ssh登陆证书(主节点)ssh-keygen将配置完成的证书传输到其它服务器:ssh-copy-id {其他节点用户名}@{其他节点IP} Example:ssh-copy-id root@anode24)创建并编辑~/.ssh/config 文件,添加其他Host Host {Hostname}Hostname {}User {Username}Example:Host anode1Hostname 172.16.100.35User rootHost anode2Hostname 172.16.100.36User rootHost anode3Hostname 172.16.100.37User root3.2 : 建立ip地址list, 修改host文件1)创建工作文件夹,建立ip地址list,为文件传输做准备主节点执行mkdir /workspace/cd /workspace/vim cephlist.txt 主机列表写入:anode1anode2anode32)修改host文件vim /etc/hosts追加内容如下:172.16.100.35 anode1172.16.100.36 anode2172.16.100.37 anode3将host文件传输到其它主机for ip in $(cat /workspace/cephlist.txt);do echo -----$ip-----;rsync -avp /etc/hosts $ip:/etc/;done3.3 : 网络端口设置检查网络设置,确定这些设置是永久生效的,重启之后不会改变。
ceph存储原理
ceph存储原理ceph是一种开源、分布式的对象存储和文件系统,它能够在大规模的集群中存储和管理海量数据。
在ceph中,数据被分割成对象,并将这些对象存储在不同的存储节点上以实现高可用性和容错性。
这篇文章将介绍ceph存储的原理,包括ceph的架构、数据的存储和调度方式以及ceph如何处理故障。
ceph架构ceph的架构包括三个主要组成部分:客户端、存储集群和元数据服务器。
客户端是使用ceph存储的应用程序,它们通常是通过ceph API或者对象存储接口来访问ceph集群。
存储集群由一个或多个monitors、object storage devices(OSD),以及可能的元数据服务器组成。
monitors是ceph集群的核心组件,它负责管理ceph的全局状态信息、监控OSD 状态,并为客户端提供服务发现和配置信息。
OSD是实际存储数据的存储节点,它负责存储和处理对象,并在节点故障时自动重新平衡数据。
元数据服务器用于管理ceph文件系统中的元数据信息,包括文件和目录的名称、属性和层次关系等。
ceph存储数据的方式ceph将数据分割成对象,并使用CRUSH算法将这些对象分布在集群中的OSD上。
CRUSH 算法是ceph中存储调度的核心算法,它通过一系列计算将对象映射到存储集群中的OSD。
CRUSH将对象映射到OSD的方式是通过建立CRUSH映射表以实现负载均衡和容错。
CRUSH映射表可以根据管理员的需求进行调整,以达到最佳的性能和可扩展性。
ceph的CRUSH算法有以下特点:1. CRUSH将对象映射到可扩展的存储后端,以实现分布式存储和高可用性。
2. CRUSH使用元数据信息来动态调整对象的存储位置,并根据OSD的状态和磁盘使用情况等信息来实现负载均衡。
3. CRUSH允许管理员对存储策略进行调整,以适应不同的应用场景。
ceph的故障处理ceph具有强大的故障处理机制,它能够自动处理节点故障和数据损坏等问题,以确保数据的完整性和可用性。
开源实践分享:Cephbluestore部署实践
开源实践分享:Cephbluestore部署实践Ceph bluestore部署⾸先为⼤家分享Ceph bluestore具体该如何部署,使⽤环境如下• 单节点• CentOS 7.4• 使⽤ ceph-deploy 进⾏部署准备 centos 7.4 系统的机器,并配置好 ssh 的⽆密码登录。
安装 ceph-deployyum install数据 ceph 安装包mkdir ceph-installcd ceph-installceph-deploy new node1把如下内容加⼊到 ceph.conf ⾥⾯,把默认的副本数据调成1。
[global]osd pool default size = 1osd pool default min size = 1安装 ceph 包ceph-deploy install --release luminous node2初始化 monceph-deploy mon create-initialceph-deploy admin node1这时 ceph 已经可以访问了$ ceph -scluster:id: 5b2f0020-fc24-44de-a6c9-a88efdc5074fhealth: HEALTH_OKservices:mon: 1 daemons, quorum node1mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0 bytesusage: 0 kB used, 0 kB / 0 kB availpgs:接下来要部署 ceph mgr, 这个组件在 Luminous ⾥⾯是必装组件ceph-deploy mgr create node1接下来部署 ceph osd, 现在推荐使⽤ ceph-volume lvm 来管理磁盘。
centos7 linux 系统维护计划制定建议
centos7 linux 系统维护计划制定建议[CentOS7 Linux 系统维护计划制定建议]CentOS7 是一种广泛使用的Linux 操作系统,它因其稳定性和安全性而备受推崇。
然而,为了确保服务器的顺利运行,必须制定一个系统维护计划,以确保系统的高可用性和安全性。
在本文中,我们将一步一步地回答如何制定一个CentOS7 Linux 系统维护计划的问题。
第一步:明确系统目标和需求在制定CentOS7 Linux 系统维护计划之前,您需要明确系统的目标和需求。
这可以包括服务器所承载的应用程序、数据处理量、用户数量等。
只有明确了这些目标和需求,您才能制定出适合系统的维护计划。
第二步:制定系统备份计划系统备份是保证系统可用性和安全性的关键步骤。
在制定系统备份计划时,您需要考虑以下几个方面:1. 定义备份频率:确定备份的频率是十分重要的,它应该基于您的数据处理量和数据重要性。
一般来说,每日备份是一个不错的选择。
2. 使用合适的备份工具:CentOS7 提供了许多备份工具供您选择,如rsync、tar、dump 等。
根据您的需求,选择适配的备份工具来确保备份的可靠性和有3. 存储位置和策略:确定备份数据的存储位置是至关重要的。
您可以选择外部存储设备、云存储等方案来存储备份数据。
另外,您还需要制定合适的备份策略,如每周保留一份完整备份等。
第三步:制定系统更新和安全补丁计划及时更新系统和安全补丁是保证系统安全的重要环节。
以下是一些建议:1. 定期更新系统:CentOS7 提供了yum 和dnf 这两个包管理器来更新软件包。
您可以定期运行相应命令,确保系统软件处于最新状态。
建议每月至少进行一次系统更新。
2. 定期安装安全补丁:及时安装系统的安全补丁是防止系统遭受攻击的关键步骤。
您可以通过CentOS 官方网站或订阅其安全通知来获取最新的安全补丁。
3. 自动化更新和补丁:为了节省时间和减少人为错误,您可以考虑使用自动化工具来定期更新系统和安装安全补丁。
centos7.2安装部署cloudstack4.9+ceph0.94
系统:centos 7.2ceph : 0.94cloudstack : 4.92mysql :5.726台机器:192.168.1.212 :cloudstack-management ,monitor192.168.1.165 :storage192.168.1.183 :cloudstack-agent,monitor,osd192.168.1.127 :cloudstack-agent,monitor,osd192.168.1.151 :cloudstack-agent,osd192.168.1.249 :cloudstack-agent,osd系统环境:一定要关闭selinux,在/etc/selinux/config修改iptables,firewalld 实验可以关掉,线上需要添加规则安装系统的时候最好把Development Tools安装上去修改主机名如下,其他节点类似hostnamectl set hostname=''因为没有dns所以修改hostscat >> /etc/hosts << EOF192.168.1.212 192.168.1.165 192.168.1.183 192.168.1.249 192.168.1.127 192.168.1.151 EOF上面没有添加短域名,通过sed修改,修改完成之后使用hostname --fqdnsed -ri 's/(\<[[:alpha:]].*\>)/& \1/g' /etc/hosts安装数据库rpm -ivh mysql57-community-release-el7-11.noarch.rpm ##在官网上下载的yum仓库安装包repo仓库如下,如果想用哪个把enabled改为1就可以,不用改为0[mysql-connectors-community]name=MySQL Connectors Communitybaseurl=/yum/mysql-connectors-community/el/7/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql-tools-community]name=MySQL Tools Communitybaseurl=/yum/mysql-tools-community/el/7/$basearch/ enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql# Enable to use MySQL 5.5[mysql55-community]name=MySQL 5.5 Community Serverbaseurl=/yum/mysql-5.5-community/el/7/$basearch/ enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql# Enable to use MySQL 5.6[mysql56-community]name=MySQL 5.6 Community Serverbaseurl=/yum/mysql-5.6-community/el/7/$basearch/ enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=/yum/mysql-5.7-community/el/7/$basearch/ enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql80-community]name=MySQL 8.0 Community Serverbaseurl=/yum/mysql-8.0-community/el/7/$basearch/ enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql-tools-preview]name=MySQL Tools Previewbaseurl=/yum/mysql-tools-preview/el/7/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql-cluster-7.5-community]name=MySQL Cluster 7.5 Communitybaseurl=/yum/mysql-cluster-7.5-community/el/7/$basearch/ enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql-cluster-7.6-community]name=MySQL Cluster 7.6 Communitybaseurl=/yum/mysql-cluster-7.6-community/el/7/$basearch/ enabled=0gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql下面就是安装yum clean allyum install -y mysql-community-serversystemctl start mysqldgrep 'temporary password' /var/log/mysqld.log ##5.7 初始密码在mysqld.log中mysql_secure_installationcat >> /etc/f <<EOFbinlog_ignore_db=mysqlinnodb_rollback_on_timeout=1innodb_lock_wait_timeout=600max_connections=350binlog-format = 'ROWEOFsystemctl restart mysqldmysql安装完成,可以进入mysql看下是否正常部署:cephceph中文网上有快速部署步骤可以借鉴ceph组件较之前的文件系统有所区别,建议先学习查看一下/start/quick-start-preflight/ceph部署环境sudo subscription-manager repos --enable=rhel-7-server-extras-rpmssudo yum install -y yum-utils && sudo yum-config-manager --add-repohttps:///pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm/etc/yum.repos.d/*配置ceph-deploy的安装目录[ceph-deploy]name=ceph-deploybaseurl=https:///ceph/archive/rpm-firefly/el7/noarc h/enabled=1gpgcheck=0然后安装ceph-deployyum update && yum install ceph-deploy配置ntp同步;如果不能连接公网的话可以自己搭建一个ntp服务器,能连接公网的话可以创建一个计划任务,没5分钟同步一次crontab -e*/5 * * * * /usr/sbin/ntpdate &> /dev/null*/5 * * * * /usr/sbin/hwclock -w在所有节点上添加openssh-serveryum install openssh-server创建cephuser官网建议使用不使用root用户安装ceph所以在各节点上创建用户:useradd ceph-user && echo "ceph-user" | passwd --stdin ceph-user修改sudo权限echo "ceph-user ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph-userchmod 0440 /etc/sudoers.d/ceph-user设置免密码ssh登入在ceph-user账号下执行ssh-keygen ## 全部回车ssh-copy-id secondaryssh-copy-id nodea1ssh-copy-id nodea2ssh-copy-id nodeb1ssh-copy-id nodeb2在ceph-user用户下修改~/.ssh/config文件,可以免delpoy的时候指定用户,这边config文件没有的话,创建之后注意下权限,后面可能会有报错Host secondaryHostname secondaryUser ceph-userHost nodea1Hostname nodea1User ceph-userHost nodea2Hostname nodea2User ceph-userHost nodeb1Hostname nodeb1User ceph-userHost nodeb2Hostname nodeb2User ceph-useriptables或者防火墙一定要注意还有selinux,这个也是。
ceph接口使用方法
ceph接口使用方法Ceph接口使用方法Ceph是一个开源的分布式存储系统,拥有强大的可扩展性和高可靠性。
它通过将数据分布在多个节点上,实现了数据冗余和负载均衡的功能。
Ceph提供了一系列的接口,让开发者可以轻松地使用其功能。
本文将介绍Ceph接口的使用方法,包括安装和配置Ceph、使用Ceph 接口进行数据操作等。
通过本文的指导,读者可以快速上手并深入了解Ceph接口的使用。
第一步:安装Ceph在开始使用Ceph接口之前,首先需要在集群中安装和配置Ceph。
Ceph 可以在Linux系统上运行,支持多种发行版。
以下是在Ubuntu上安装Ceph的步骤:1. 更新系统软件包:使用以下命令更新系统软件包以获取最新的软件包列表和安全修复程序。
sudo apt-get updatesudo apt-get upgrade2. 安装Ceph软件包:使用以下命令安装Ceph软件包。
sudo apt-get install ceph ceph-deploy3. 配置Ceph集群:使用Ceph提供的命令行工具ceph-deploy来配置Ceph集群。
首先需要创建一个新的目录作为Ceph集群的工作目录。
mkdir my-clustercd my-cluster然后,在此目录下,运行以下命令来初始化Ceph集群。
ceph-deploy new <MON节点>这将在当前目录下创建一个名为ceph.conf的配置文件,其中包含了集群的基本配置信息。
接下来,使用以下命令将Ceph软件包安装到集群的所有节点。
ceph-deploy install <所有节点>最后,使用以下命令来为集群添加MON节点。
ceph-deploy mon create-initial第二步:配置Ceph存储池一旦Ceph集群安装和配置完成,下一步是创建一个或多个存储池,以供存储数据。
存储池是Ceph中最基本的单元,用于管理数据的存储和分发。
ceph工作原理和安装
ceph工作原理和安装Ceph是一个开源的分布式存储系统,它提供了高可用性、高性能和可扩展性的存储解决方案。
本文将介绍Ceph的工作原理和安装过程,以帮助读者更好地理解和使用这个强大的存储系统。
一、Ceph的工作原理Ceph的核心是一个分布式对象存储系统,它将数据分散存储在多个节点上,通过复制和故障转移来保证数据的可靠性和高可用性。
Ceph采用了RADOS (Reliable Autonomic Distributed Object Store)作为底层存储引擎,它将数据划分为多个对象,并将这些对象分布在不同的存储设备上。
Ceph的工作原理可以简单描述为以下几个步骤:1. 客户端发送请求:当客户端需要读取或写入数据时,它会向Ceph集群发送请求。
这个请求包含了数据的标识符和操作类型。
2. CRUSH算法计算数据位置:Ceph集群中的OSD(Object Storage Device)使用CRUSH算法计算出数据存储的位置。
CRUSH算法基于一致性哈希和散列函数,可以将数据均匀地分布在不同的OSD上。
3. 数据访问和传输:一旦找到了数据存储的位置,客户端就可以直接与对应的OSD进行数据的读取和写入。
Ceph使用了RADOS协议来实现数据的传输和访问。
4. 数据复制和故障转移:Ceph通过数据的复制和故障转移来保证数据的可靠性和高可用性。
它使用了副本和恢复机制来处理节点故障和数据损坏的情况。
5. 数据一致性和完整性:Ceph使用了一致性哈希和版本控制等技术来保证数据的一致性和完整性。
它可以检测和修复数据的错误,并提供了数据的校验和功能。
二、Ceph的安装Ceph的安装过程相对复杂,但是通过正确的步骤和配置,可以顺利地搭建一个稳定可靠的存储系统。
下面是一个简要的安装过程:1. 准备环境:首先,需要准备一组服务器作为Ceph集群的节点。
这些服务器应该满足一定的硬件要求,并且已经安装了适当的操作系统。
2. 安装Ceph软件包:在每个节点上,需要安装Ceph软件包。
Ceph常见问题百科全书
Ceph常见问题百科全书Ceph是目前炙手可热的一个统一分布式存储系统,具有优异的性能、可靠性、可扩展性。
其可轻松扩展到数PB 容量,支持多种工作负载的高性能(每秒输入/输出操作[IOPS]和带宽),具有极其高的可靠性。
Ceph对比HDFS优势在于易扩展,无单点。
HDFS是专门为Hadoop这样的云计算而生,在离线批量处理大数据上有先天的优势,而Ceph是一个通用的实时存储系统,具有相当好的超大数量小文件处理能力,且现在Hadoop可以利用Ceph作为存储后端。
Ceph最近加入到Linux 中令人印象深刻的文件系统备选行列,能够在维护POSIX 兼容性的同时加入了复制和容错功能,成为现在分布式系统的掌上明珠。
而在Ceph系统的搭建过程中会出现种种意想不到问题,真的是稀奇古怪的让人意想不到的问题,整个过程中看似每一步都正确,感觉都对,结果还是出现各种问题,更可恨的是其中遇到的很多问题在网上并不能搜索到,有的从国外论坛上能搜索到但是并没有答案(正如硬件开发时候经常出现都对都不对,重启一下全都对的情况)。
然而对于Ceph这块重启并不能解决问题,还需一步一步踏踏实实的进行研究,分析解决问题,并进行总结。
笔者在此对Ceph开发过程中的血泪经验在此与大家分享,对本人在Ceph研发过程中遇到的错误进行记录并提出解决方案,一来是做个总结,二来是为此后进行Ceph开发的大家指出雷区,使大家少爬一点坑,希望能做出一点微小的贡献。
从基础环境开始在Ceph环境搭建过程中的常见问题有(在此按照问题出现的频率进行粗略排序)采用系统为Centos7(谨以此作为示例)1. 执行命令:#ceph-deploy install admin-node node1 node2 node3ERROR:[ceph_deploy][ERROR ]RuntimeError: Failed toexecute command: yum -y install epel-release解决办法:进入/etc/yum.repos.d中删除epel.repo和epel-testing.repo2. 执行命令:#ceph-deploy install admin-node node1 node2 node3ERROR:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: rpm -Uvh --replacepkgs解决办法:进入/etc/yum.repos.d/ceph.repo文件将所有的源改为网易163源,或者阿里源(经测试网易163源更好用点)编辑ceph 源的配置文件,vim /etc/yum.repo.d/ceph.repo,更改为如下内容:[Ceph]name=Ceph packages for $basearchbaseurl=http:// /ceph /rpm-jewel/el7/$basearchenabled=1gpgcheck=1type=rpm-mdgpgkey=https:// /ceph /keys/release.ascpriority=1[Ceph-noarch]name=Ceph noarch packagesbaseurl=http:// /ceph /rpm-jewel/el7/noarchenabled=1gpgcheck=1type=rpm-mdgpgkey=https:// /ceph /keys/release.ascpriority=1[ceph-source]name=Ceph source packagesbaseurl=http:// /ceph /rpm-jewel/el7/SRPMSenabled=1gpgcheck=1type=rpm-mdgpgkey=https:// /ceph /keys/release.ascpriority=1编辑完成之后保存退出并运行yum clean all && yum makecacheCeph官网提供的在一些情况下非常不好用。
ceph企业级分布式存储:原理与工程实践
在企业级应用中,数据存储的可靠性和性能至关重要。
随着数据规模的不断扩大,传统的存储方式已经无法满足需求。
分布式存储技术成为了企业数据管理的关键。
在众多分布式存储系统中,Ceph以其高可扩展性、高性能和高可靠性成为了备受关注的企业级分布式存储解决方案。
Ceph是一个开源的分布式存储系统,它通过将数据分布到多个节点上,实现了存储资源的共享和高可靠性。
Ceph的核心原理是将数据分块存储在各个节点上,并通过数据复制和数据恢复机制实现高可靠性和数据冗余。
Ceph还通过数据分布和负载均衡机制实现了高性能的数据访问,可以满足企业对大规模数据存储和高并发访问的需求。
在工程实践中,Ceph的部署和管理相对复杂,但是通过合理的架构设计和优化配置,可以充分发挥Ceph的优势。
企业需要根据自身业务需求和数据规模来设计Ceph的存储架构,包括确定不同类型数据的存储方式和容量规划。
需要合理的部署Ceph的各个组件,包括Ceph Monitor、Ceph OSD和Ceph Metadata Server等。
通过监控和调优,可以进一步提高Ceph的性能和稳定性。
总结来说,Ceph作为一种企业级分布式存储解决方案,通过其独特的原理和工程实践,为企业用户提供了高可靠性和高性能的数据存储解决方案。
在大规模数据管理和高并发访问的场景下,Ceph表现出了强大的优势,为企业数据管理带来了全新的可能性。
个人观点和理解:作为我的文章写手,我个人对Ceph的认识和理解是:Ceph作为一种开源的分布式存储系统,在企业级应用中有着广泛的应用前景。
通过对Ceph的深入研究和工程实践,可以充分发挥其优势,为企业数据管理带来了全新的可能性。
我相信,随着Ceph技术的不断发展和完善,它将成为企业级数据存储的首选解决方案,为企业用户带来更好的数据管理体验。
知识文章格式:1. 引言2. Ceph的原理和核心技术3. Ceph的优势和应用场景4. Ceph的工程实践和部署架构设计5. Ceph的性能监控和调优6. 总结与展望在文章中,我会多次提及“Ceph企业级分布式存储”的关键词,并以全面、深刻和灵活的方式探讨这一主题。
ceph rados架构原理
一、Ceph概述Ceph是一个开源的分布式存储系统,提供高性能、高可用性和易扩展性的存储解决方案。
Ceph的核心是采用RADOS(可扩展自组织分布式对象存储)作为存储系统的基础架构,其架构原理包括CRUSH算法、PG分布和OSD操作等。
二、Ceph架构概述1. Ceph架构主要由三个组件组成,分别是Ceph OSD、Ceph Monitor和Ceph Metadata Server(MDS)。
Ceph OSD负责存储数据,Ceph Monitor监控集裙的状态,Ceph MDS则负责管理分布式文件系统。
2. Ceph的架构采用无中心化设计,所有组件之间通过消息传递的方式相互通信,没有单点故障,可以实现高可用性和容错性。
3. Ceph的存储单元是一个个的对象,每个对象都有自己的唯一标识符,通过CRUSH算法将对象均匀分布在存储集裙中,实现负载均衡和数据冗余。
三、CRUSH算法1. CRUSH(Controlled Replication Under Scalable Hashing)算法是Ceph用于实现数据分布和数据冗余的关键算法。
CRUSH算法通过一种扩展的哈希算法来决定数据存储的位置,而不需要中心化的元数据服务器来管理存储规则和对象位置。
2. CRUSH算法将存储集裙抽象成一个树状的结构,每个存储设备和主机都是树的一个节点。
当需要将数据存储到集裙中时,CRUSH算法会根据数据的唯一标识符和集裙的拓扑结构,计算出数据存储的位置。
四、PG分布1. PG(Placement Group)是Ceph中一个重要的概念,它是存储集裙中数据的最小单元。
PG通过CRUSH算法将数据分布到不同的存储设备上,可以实现数据的负载均衡和数据冗余。
2. PG数量决定了Ceph存储集裙中数据的分布均衡程度,PG越多,数据分布得越均匀;PG越少,数据分布得越不均匀。
PG的数量需要根据存储集裙的规模和配置来合理调整。
五、OSD操作1. OSD(Object Storage Device)是Ceph存储集裙中的一个重要组件,负责存储对象和处理IO操作。
CentOS78上部署Ceph
CentOS78上部署CephCeph是⼀个分布式的存储系统,可以在统⼀的系统中提供唯⼀的对象、块和⽂件存储,Ceph的⼤致组件如下:1. Ceph监视器(ceph-mon):⽤来维护集群状态的映射,包括监视器映射,管理器映射,OSD映射,MDS映射和CRUSH映射,这些映射是ceph守护程序相互协调所需的关键状态,另外还负责客户端到ceph存储的⾝份验证;通常要实现⾼可⽤,需要3个或以上的ceph-mon服务2. Ceph管理器(ceph-mgr):ceph manager守护进程负责跟踪运⾏时指标和ceph集群当前的状态,包括存储利⽤率,当前性能指标和系统负载等,ceph-mgr还托管⼀些python模块,以实现基于web的ceph仪表盘和rest api,通常要实现⾼可⽤⾄少需要2个ceph-mgr进程,通常ceph-mon和ceph-mgr个数相同,1个ceph-mon同节点会伴随1个ceph-mgr守护进程3. Ceph对象存储(ceph-osd):Ceph OSD是对象存储守护程序,是⽤来存储数据的核⼼组件,实现数据存储、数据复制和恢复、数据的重新平衡,并会检查其他Ceph OSD守护程序的⼼跳来向ceph-mon和ceph-mgr提供⼀些监控信息,通常⾄少需要3个ceph-osd才能实现冗余和⾼可⽤性,部署的时候ceph-osd会和ceph-mon 分开节点部署.4. Ceph元数据服务(ceph-mds):Ceph MDS为ceph⽂件系统存储元数据,注意Ceph块设备和对象存储不⽤mds存储元数据,Ceph MDS允许POSIX⽂件系统⽤户执⾏基本命令,⽽不会将压⼒都集中到Ceph OSD集群上,通常mds可以选择部署⾄少2个节点,可以和其他组件⼀起也可以分开上⾯4个组件是构建ceph集群最基本的服务,下⾯就按照上⾯这4种顺序搭建完整的ceph集群,我们这⾥节点有以下3个:node1 192.168.3.237node2 192.168.3.238node3 192.168.3.239部署之前仍然要做好下⾯的准备⼯作:1. 所有节点都配置好主机名以及hosts,严格对应2. 所有节点的防⽕墙都要开放必要端⼝或者禁⽤防⽕墙,保证端⼝可以访问到;尽量关闭selinux3. 保证所有节点的时间是同步的,可以使⽤ntp/chrony进⾏时间同步另外ceph最新的版本⼯具完全使⽤python3实现,和python2的环境没有关系。
ceph工作原理和安装
Ceph是一个分布式存储系统,诞生于2004年,最早致力于开发下一代高性能分布式文件系统的项目。
随着云计算的发展,ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之一。
Ceph有以下优势:1. CRUSH算法Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。
CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
Crush算法有相当强大的扩展性,理论上支持数千个存储节点。
2. 高可用Ceph中的数据副本数量可以由管理员自行定义,并可以通过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性;ceph可以忍受多种故障场景并自动尝试并行修复。
3. 高扩展性Ceph不同于swift,客户端所有的读写操作都要经过代理节点。
一旦集群并发量增大时,代理节点很容易成为单点瓶颈。
Ceph本身并没有主控节点,扩展起来比较容易,并且理论上,它的性能会随着磁盘数量的增加而线性增长。
如上图所示,Ceph主要有三个基本进程•Osd用于集群中所有数据与对象的存储。
处理集群数据的复制、恢复、回填、再均衡。
并向其他osd守护进程发送心跳,然后向Mon提供一些监控信息。
当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要两个OSD 守护进程即两个OSD节点,集群才能达到active+clean状态。
•MDS(可选)为Ceph文件系统提供元数据计算、缓存与同步。
在ceph中,元数据也是存储在osd节点中的,mds类似于元数据的代理缓存服务器。
MDS进程并不是必须的进程,只有需要使用CEPHFS时,才需要配置MDS节点。
•Monitor监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性。
ClusterMAP描述了对象块存储的物理位置,以及一个将设备聚合到物理无论使用哪种存储方式(对象、块、挂载),存储的数据都会被切分成对象(Objects)。
CentOS7手动部署Ceph0.94
CentOS7手动部署Ceph0.94--------------------All-nodes--------------------1- 各节点设置 hosts# vim /etc/hosts192.168.121.25 monmds01192.168.121.26 storage01192.168.121.27 storage022- 设置源这里我的环境将 {ceph-release} 替换为 hammer 将 {distro} 替换为 el7# vim /etc/yum.repos.d/ceph.repo[ceph]name=Ceph packages for $basearchbaseurl=/rpm-{ceph-release}/{distro}/$basearch enabled=1priority=2gpgcheck=1type=rpm-mdgpgkey=https:///keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-{ceph-release}/{distro}/noarch enabled=1priority=2gpgcheck=1type=rpm-mdgpgkey=https:///keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/rpm-{ceph-release}/{distro}/SRPMS enabled=0priority=2gpgcheck=1type=rpm-mdgpgkey=https:///keys/release.asc# yum update && sudo yum install yum-plugin-priorities -y # yum install ceph -y--------------------Monitor--------------------1- 确定 fsid# uuidgen7172833a-6d3a-42fe-b146-e3389d6845982- 配置文件# vim /etc/ceph/ceph.conf[global]fsid = 7172833a-6d3a-42fe-b146-e3389d684598mon initial members = monmds01mon host = 192.168.121.25public network = 192.168.121.0/24auth cluster required = cephxauth service required = cephxauth client required = cephxosd journal size = 1024filestore xattr use omap = trueosd pool default size = 2 #设置两个副本osd pool default min size = 1osd pool default pg num = 128 # PGS = (Total_number_of_OSD * 100) / max_replication_count 得出数值较近的2的指数osd pool default pgp num = 128osd crush chooseleaf type = 13- 创建 keyring# ceph-authtool --create-keyring /tmp/ceph.mon.keyring \ > --gen-key -n mon. --cap mon 'allow *'4- 生成管理员 keyring# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring \> --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' \> --cap osd 'allow *' --cap mds 'allow'5- 将 client.admin key 导入 ceph.mon.keyring# ceph-authtool /tmp/ceph.mon.keyring \> --import-keyring /etc/ceph/ceph.client.admin.keyring6- 生成 monitor map# monmaptool --create --add monmds01 192.168.121.25 \> --fsid 7172833a-6d3a-42fe-b146-e3389d684598 /tmp/monmap7- 创建 monitor 数据目录 ceph-{hostname}# mkdir /var/lib/ceph/mon/ceph-monmds018- 导入 monitor map 和 keyring 信息# ceph-mon --mkfs -i monmds01 \> --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring9- 创建两个空文件# touch /var/lib/ceph/mon/ceph-monmds01/done# touch /var/lib/ceph/mon/ceph-monmds01/sysvinit10- 启动 monitor# service ceph start mon.monmds01=== mon.monmds01 ===Starting Ceph mon.monmds01 on monmds01...Running as unit run-5055.service.Starting ceph-create-keys on monmds01...检查一下# ceph -scluster 7172833a-6d3a-42fe-b146-e3389d684598health HEALTH_ERR64 pgs stuck inactive64 pgs stuck uncleanno osdsmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01osdmap e1: 0 osds: 0 up, 0 inpgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects0 kB used, 0 kB / 0 kB avail64 creating# ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.monmds01.asok mon_status11- 将 keyring 和 ceph.conf 拷贝到各个 osd 节点# scp /etc/ceph/ceph.conf storage-x:/etc/ceph/# scp /etc/ceph/ceph.client.admin.keyring storage-x:/etc/ceph/--------------------Osds--------------------1- Create OSD# uuidgen4cd76113-25d3-4dfd-a2fc-8ef34b87499c# uuidgene2c49f20-fbeb-449d-9ff1-49324b66da26--storage01--# ceph osd create 4cd76113-25d3-4dfd-a2fc-8ef34b87499c0 #返回值0表示osd-number=0--storage02--# ceph osd create e2c49f20-fbeb-449d-9ff1-49324b66da26 12- 创建数据存储目录--storage01--# mkdir -p /data/ceph/osd/ceph-0 #目录名为{cluster-name}-{osd-number}# ln -s /data/ceph/osd/ceph-0 /var/lib/ceph/osd/存储挂的磁阵,这里要把挂的硬盘分区、格式化,环境里使用了OpenStack云硬盘对接后端磁阵# fdisk /dev/vdb# mkfs.ext4 /dev/vdb1挂载# mount -o defaults,_netdev /dev/vdb1 /var/lib/ceph/osd/ceph-0写入分区表# vim /etc/fstab/dev/vdb1 /var/lib/ceph/osd/ceph-0 ext4 defaults,_netdev 0 0--storage02--# mkdir -p /data/ceph/osd/ceph-1# ln -s /data/ceph/osd/ceph-1 /var/lib/ceph/osd/# fdisk /dev/vdb# mkfs.ext4 /dev/vdb1# mount -o defaults,_netdev /dev/vdb1 /var/lib/ceph/osd/ceph-1# vim /etc/fstab/dev/vdb1 /var/lib/ceph/osd/ceph-1 ext4 defaults,_netdev 0 03- 初始化 OSD 数据目录--storage01--# ceph-osd -i 0 --mkfs --mkjournal --mkkey \> --osd-uuid 4cd76113-25d3-4dfd-a2fc-8ef34b87499c \> --cluster ceph \> --osd-data=/data/ceph/osd/ceph-0 \> --osd-journal=/data/ceph/osd/ceph-0/journal2015-11-11 13:51:21.950261 7fd64b796880 -1 journal FileJournal::_open: disabling aio for non-block journal. Use journal_force_aio to force use of aio anyway2015-11-11 13:51:22.461867 7fd64b796880 -1 journal FileJournal::_open: disabling aio for non-block journal. Use journal_force_aio to force use of aio anyway2015-11-11 13:51:22.463339 7fd64b796880 -1 filestore(/data/ceph/osd/ceph-0) could not find 23c2fcde/osd_superblock/0//-1 in index: (2) No such file ordirectory2015-11-11 13:51:22.971198 7fd64b796880 -1 created object store /data/ceph/osd/ceph-0 journal /data/ceph/osd/ceph-0/journal for osd.0 fsid 7172833a-6d3a-42fe-b146-e3389d6845982015-11-11 13:51:22.971377 7fd64b796880 -1 auth: error reading file: /data/ceph/osd/ceph-0/keyring: can't open /data/ceph/osd/ceph-0/keyring: (2) No such file or directory 2015-11-11 13:51:22.971653 7fd64b796880 -1 created new key in keyring /data/ceph/osd/ceph-0/keyring--storage02--# ceph-osd -i 1 --mkfs --mkjournal --mkkey \> --osd-uuid e2c49f20-fbeb-449d-9ff1-49324b66da26 \> --cluster ceph \> --osd-data=/data/ceph/osd/ceph-1 \> --osd-journal=/data/ceph/osd/ceph-1/journal2015-11-09 21:42:24.012339 7f6caebdb7c0 -1 journal FileJournal::_open: disabling aio for non-block journal. Use journal_force_aio to force use of aio anyway2015-11-09 21:42:24.126837 7f6caebdb7c0 -1 journal FileJournal::_open: disabling aio for non-block journal. Use journal_force_aio to force use of aio anyway2015-11-09 21:42:24.127570 7f6caebdb7c0 -1 filestore(/data/ceph/osd/ceph-1) could not find 23c2fcde/osd_superblock/0//-1 in index: (2) No such file or directory2015-11-09 21:42:24.221463 7f6caebdb7c0 -1 created object store /data/ceph/osd/ceph-1 journal /data/ceph/osd/ceph-1/journal for osd.1 fsid 7172833a-6d3a-42fe-b146-e3389d6845982015-11-09 21:42:24.221540 7f6caebdb7c0 -1 auth: error reading file: /data/ceph/osd/ceph-1/keyring: can't open /data/ceph/osd/ceph-1/keyring: (2) No such file or directory 2015-11-09 21:42:24.221690 7f6caebdb7c0 -1 created new key in keyring /data/ceph/osd/ceph-1/keyring4- 注册 OSD authentication key--storage01--# ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /data/ceph/osd/ceph-0/keyringadded key for osd.0--storage02--# ceph auth add osd.1 osd 'allow *' mon 'allow profile osd' -i /data/ceph/osd/ceph-1/keyringadded key for osd.15- 将 ceph 节点加入 CRUSH map--storage01--# ceph osd crush add-bucket storage01 hostadded bucket storage01 type host to crush map# ceph osd crush move storage01 root=defaultmoved item id -2 name 'storage01' to location {root=default} in crush map--storage02--# ceph osd crush add-bucket storage02 hostadded bucket storage02 type host to crush map# ceph osd crush move storage02 root=defaultmoved item id -3 name 'storage02' to location {root=default} in crush map6- 将 OSD 加入 CRUSH map 此处设置权重为1.0--storage01--# ceph osd crush add osd.0 1.0 host=storage01add item id 0 name 'osd.0' weight 1 at location {host=storage01} to crush map--storage02--# ceph osd crush add osd.1 1.0 host=storage02add item id 1 name 'osd.1' weight 1 at location {host=storage02} to crush map7- 创建初始化文件--storage01--# touch /var/lib/ceph/osd/ceph-0/sysvinit--storage02--# touch /var/lib/ceph/osd/ceph-1/sysvinit8- 启动服务--storage01--# service ceph start osd.0=== osd.0 ===create-or-move updated item name 'osd.0' weight 0.96 at location {host=storage01,root=default} to crush map Starting Ceph osd.0 on storage01...Running as unit run-27621.service.--storage02--# service ceph start osd.1=== osd.1 ===create-or-move updated item name 'osd.1' weight 0.05 at location {host=storage02,root=default} to crush map Starting Ceph osd.1 on storage02...Running as unit run-2312.service.9- 检查# ceph -scluster 7172833a-6d3a-42fe-b146-e3389d684598health HEALTH_OKmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01osdmap e13: 2 osds: 2 up, 2 inpgmap v33: 64 pgs, 1 pools, 0 bytes data, 0 objects6587 MB used, 974 GB / 1033 GB avail64 active+clean# ceph osd treeID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY-1 2.00000 root default-2 1.00000 host storage010 1.00000 osd.0 up 1.00000 1.00000-3 1.00000 host storage021 1.00000 osd.1 up 1.00000 1.00000--------------------MDS--------------------mds 的坑耽误了很久,官网里只有 ceph-deploy 一笔带过,一下手动过程基本靠摸索,此外启动后是看不到状态的,要创建了 pool 和fs 以后,才能观察到 mds 状态,比较奇特1- 创建mds数据目录# mkdir /var/lib/ceph/mds/ceph-monmds012- 创建keyring# ceph auth get-or-create mds.monmds01 \> mon 'allow rwx' osd 'allow *' \> mds 'allow *' -o /var/lib/ceph/mds/ceph-monmds01/keyring3- 创建初始化文件# touch /var/lib/ceph/mds/ceph-monmds01/sysvinit# touch /var/lib/ceph/mds/ceph-monmds01/done4- 启动mds# service ceph start mds.monmds015- 查看状态,此时还看不到mds信息,要在创建好pool以后才能看到# ceph -scluster 342311f7-c486-479e-9c36-71adf326693ehealth HEALTH_OKmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01osdmap e13: 2 osds: 2 up, 2 inpgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects2202 MB used, 1866 GB / 1968 GB avail64 active+clean--------------------CephFS--------------------1- 初始状态# ceph -scluster 342311f7-c486-479e-9c36-71adf326693ehealth HEALTH_OKmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01osdmap e13: 2 osds: 2 up, 2 inpgmap v29: 64 pgs, 1 pools, 0 bytes data, 0 objects2202 MB used, 1866 GB / 1968 GB avail64 active+clean2- 创建pool# ceph osd pool create cephfs_data 100# ceph osd pool create cephfs_metadata 1003- 查看此时状态# ceph osd lspools0 rbd,1 cephfs_data,2 cephfs_metadata,# ceph -scluster 342311f7-c486-479e-9c36-71adf326693ehealth HEALTH_OKmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01osdmap e17: 2 osds: 2 up, 2 inpgmap v52: 264 pgs, 3 pools, 0 bytes data, 0 objects2206 MB used, 1866 GB / 1968 GB avail264 active+clean4- 创建fs# ceph fs new cephfs cephfs_metadata cephfs_data5- 现在观察状态已经显示mds现状# ceph -scluster 342311f7-c486-479e-9c36-71adf326693ehealth HEALTH_OKmonmap e1: 1 mons at {monmds01=192.168.121.25:6789/0} election epoch 2, quorum 0 monmds01mdsmap e5: 1/1/1 up {0=monmds01=up:active}osdmap e18: 2 osds: 2 up, 2 inpgmap v56: 264 pgs, 3 pools, 1962 bytes data, 20 objects2207 MB used, 1866 GB / 1968 GB avail264 active+clean# ceph mds state5: 1/1/1 up {0=monmds01=up:active}# ceph fs lsname: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]6- 挂载CephFS# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 14G 25G 36% /devtmpfs 2.0G 0 2.0G 0% /devtmpfs 2.0G 220K 2.0G 1% /dev/shmtmpfs 2.0G 17M 2.0G 1% /runtmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup# mkdir /mnt/mycephfs# mount -t ceph monmds01:6789:/ \> /mnt/mycephfs \> -o name=admin,secret=AQCky1ZWYtdHKRAACe+Nk6gZ6rJerMrlOheG8Q==# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 14G 25G 36% /devtmpfs 2.0G 0 2.0G 0% /devtmpfs 2.0G 220K 2.0G 1% /dev/shmtmpfs 2.0G 17M 2.0G 1% /runtmpfs 2.0G 0 2.0G 0% /sys/fs/cgroupmonmds01:6789:/ 2.0T 103G 1.9T 6% /mnt/mycephfs挂载命令中的密码可以在monmds01节点查询# ceph auth listclient.adminkey: AQCky1ZWYtdHKRAACe+Nk6gZ6rJerMrlOheG8Q==auid: 0caps: [mds] allowcaps: [mon] allow *caps: [osd] allow *7- 持久挂载CentOS7中fstab挂载启动过早,网络还没通,会影响系统启动,需要加上'_netdev' 参数# vim /etc/fstabmonmds01:6789:/ /mnt/mycephfs ceph name=admin,secret=AQCky1ZWYtdHKRAACe+Nk6gZ6rJerMrlO heG8Q==,noatime,_netdev 0 2。
ceph ec实现原理
ceph ec实现原理引言概述:Ceph是一种分布式存储系统,其EC(Erasure Coding)实现原理是其性能和可靠性的重要组成部分。
本文将详细介绍Ceph EC实现原理的六个主要要点,并进行总结。
正文内容:1. EC的基本概念1.1 容错编码容错编码是一种通过将数据分割成多个编码块,并添加冗余信息以实现数据恢复的技术。
Ceph EC使用的是Erasure Coding,将数据分割成多个数据块和校验块,并通过冗余信息实现数据的恢复。
1.2 数据分块Ceph EC将原始数据分割成多个数据块,并通过编码算法生成校验块。
数据分块的大小可以根据需求进行调整,以平衡存储空间和计算开销。
1.3 冗余信息Ceph EC通过添加冗余信息,将原始数据块和校验块进行组合。
冗余信息可以用于恢复数据,即使部分数据块丢失也可以通过冗余信息进行重建。
2. EC的编码算法2.1 Reed-Solomon编码Ceph EC使用Reed-Solomon编码作为其主要的编码算法。
Reed-Solomon编码通过将数据分割成多个块,并生成冗余信息块,实现数据的恢复。
这种编码算法具有高效的纠错能力和低计算开销。
2.2 矩阵运算Reed-Solomon编码通过矩阵运算实现数据的编码和解码。
编码过程中,将数据块和校验块组合成矩阵,并进行矩阵运算生成编码块;解码过程中,通过矩阵运算将丢失的数据块恢复出来。
2.3 编码参数Ceph EC的编码参数包括数据块数量、校验块数量和编码块大小等。
这些参数可以根据系统的需求进行调整,以平衡存储空间和计算开销。
3. EC的数据恢复过程3.1 数据块丢失检测Ceph EC通过检测数据块的丢失情况来触发数据恢复过程。
当检测到数据块丢失时,系统会根据冗余信息进行恢复。
3.2 校验块重建在数据恢复过程中,Ceph EC会通过校验块重建丢失的数据块。
校验块的重建是通过矩阵运算实现的,将丢失的数据块恢复出来。
3.3 数据块重组数据恢复过程中,Ceph EC会将已经恢复的数据块和原始数据块进行重组,以恢复原始数据。
ceph 快照的原理与实现
Ceph快照的原理与实现北京休伦科技有限公司常涛ceph的基本的特性之一,就是支持rbd的snapshot和clone功能。
Ceph都可以完成秒级别的快照。
ceph支持两种类型的快照,一种是pool级别的快照,是给整个pool中的对象整体做一个快照。
另一个是rbd级别的快照的,给单个rbd的volume做一个快照。
ceph目前并没有给单独的对象做一个快照。
无论是pool级别的快照,还是rbd的快照,其实现的基本原理都是相同的。
都是基于对象COW(copy-on-write)机制。
本文举例时都用rbd实例。
基本概念和数据结构head对象:也就是对象的原始对象,该对象可以写操作snap对象:对某个对象做快照后的通过cow机制copy出来的快照对象,该对象只能读,不能写snap_seq or seq:快照序号,每次做snapshot操作,系统都分配一个相应快照序号,该快照序号在后面的写操作的实现发挥重要的作用。
在rbd端,librados/IoCtxImpl.h 定义了snap相关的数据结构struct librados::IoCtxImpl {......snapid_t snap_seq;::SnapContext snapc;......}struct SnapContext {snapid_t seq; // 'time' stampvector<snapid_t> snaps; // existent snaps, in descending order}SnapContext数据结构用来在客户端(rbd端)保存Snap相关的信息。
这个结构持久化存储在rbd的元数据中。
∙seq 为最新的快照序号∙snaps 降序保存了该rbd的所有的快照序号。
IOCtxImpl里的snapid_t snap_seq 一般也称之为snap_id, 如果open时,如果是snapshot,那么该snap_seq就是该snap对应的快照序号。
Ceph安装部署与测试调优
Ceph安装部署及测试调优目录1.熟悉Ceph存储的基本原理与架构2.掌握Ceph集群的安装部署方法3.掌握Ceph常见的性能测试调优方法目录1.基本概念及架构2.安装部署3.测试调优Ceph是一个统一的分布式存储系统,具有高扩展性、高可靠性、高性能,基于RADOS(reliable, autonomous, distributed object store ),可提供对象存储、块设备存储、文件系统存储三种接口RADOS:是Ceph集群的精华,为用户实现数据分配、Failover等集群操作。
LIBRADOS:Librados是RADOS的提供库,上层的RBD、RGW和CephFS都是通过LIBRADOS访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。
RBD:RBD全称RADOS block device,是Ceph对外提供的块设备服务。
RGW:RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
CephFS:CephFS全称Ceph File System,是Ceph对外提供的文件系统服务OSD :Ceph OSD 进程,功能是负责读写数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向Ceph Monitors 提供一些监控信息。
Monitor :集群的管理进程,维护着展示集群状态的各种图表,包括监视器图、OSD 图、归置组(PG )图、和CRUSH 图。
MDS :Ceph 元数据服务器,为Ceph 文件系统存储元数据(也就是说,Ceph 块存储和Ceph 对象存储不使用MDS )。
Ceph存储集群Object :Ceph 最底层的存储单元是Object 对象,每个Object 包含元数据和原始数据。
PG :PG 全称Placement Groups ,即归置组,是存放objects 的逻辑概念,一个PG 可映射到多个OSD 。
ceph安装部署手册1.0
Ceph安装部署手册1.需求1.1硬件环境3台PC机,安装操作系统centos7;分别创建一个主分区/dev/sda4 IP分别设置为192.168.0.2,192.168.0.3,192.168.0.4注:MON、OSD节点可以不再同一节点上1.2软件环境安装包:centos、ceph、ceph-deploy2.准备2.1关闭防火墙(所有节点)1. systemctl stop firewalldsystemctl disable firewalld2. vi /etc/sysconfig/selinux => SELINUX=disabled2.2主机配置(所有节点)[root@node1 ~]# vi /etc/hosts2.3软件安装1.安装vsftp:[root@node1 ~]# rpm -ivh/var/ftp/centos/Packages/vsftpd-3.0.2-9.el7.x86_6 4.rpm2.配置yumcentos、ceph、ceph-deploy3.启动vsftp4.安装(所有节点)分别安装ceph、ceph-deploy注:建议把NTP 服务安装到所有Ceph 节点上(特别是Ceph 监视器节点),以免因时钟漂移导致故障。
# yum install ntp# yum install ceph ceph-deploy3.搭建ceph1.进入/etc/ceph目录,确保下面所有操作都在此目录下:[root@node1 ~]# cd /etc/ceph/2.Create the cluster.(创建集群)[root@node1 ceph]# ceph-deploy new node13. create the monitor.(创建一个mon)[root@node1 ceph]# ceph-deploy mon create node1 4. gather the keys.(取得秘钥)[root@node1 ceph]# ceph-deploy gatherkeys node1 5.Verify that the monitor is running.(检查)3.1adding monitors在node1执行:1.Configuration(在/etc/ceph下面配置ceph.conf,保证fsid和上图标注部分一致)[global]fsid =e23ed29d-abb3-4050-bd40-ed2a07e70a7dmon initial members = node1,node2,node32.从node1分别拷贝证书和配置文件到node2,node33.Add two Ceph Monitors to the cluster.(添加两个monitor)4.Verify(检查)3.2adding osds(所有节点)1.Generate a UUID for the OSD.(获得UUID)[root@node1 ~]# uuidgen2.Create the OSD.[root@node1 ~]# ceph osd createf898402c-e395-4f57-9e33-89c6dd57edf63.Create the default directory on your new OSD.[root@node1 ~]# mkdir /var/lib/ceph/osd/ceph-0 4.Prepare a device for use with Ceph, and mount it to the directory you just create.[root@node1 ~]# mkfs -t xfs -f /dev/sda4[root@node1 ~]# mount /dev/sda4/var/lib/ceph/osd/ceph-0/5.Initialize the OSD data directory.[root@node1 ~]# ceph-osd -i 0 --mkfs --mkkey--osd-uuid f898402c-e395-4f57-9e33-89c6dd57edf66.Register the OSD authentication key.[root@node1 ~]# ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring7.Add the Ceph Node to the CRUSH map.[root@node1 ~]# ceph osd crush add-bucket node1host8.Place the Ceph Node under the root default.[root@node1 ~]# ceph osd crush move node1root=default9. Add the device as an item in the host, assign it a weight, recompile it and set it.[root@node1 ~]# ceph osd crush add osd.0 1.0host=node1只在一个节点执行:10.Configuration(在/etc/ceph/ceph.conf中添加以下内容,并且同步到node2,node3)# vi /etc/ceph/ceph.conf[osd]osd mkfs type = xfs[osd.0]host = node1devs = /dev/sda4[osd.1]host = node2devs = /dev/sda4[osd.2]host = node3devs = /dev/sda4#scp /etc/ceph/ceph.conf ************.0.12:/etc/ceph/# scp /etc/ceph/ceph.conf ************.0.13:/etc/ceph/ 11.Start the new OSD[root@node1 ~]# /etc/init.d/ceph start osd.012.Verify(检查)View the osd tree:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ceph在存储中的层次第一层:物理存储介质。
a.LUN:通常将硬件生成生成的虚拟磁盘叫LUN, 比如raid卡生成的虚拟磁盘。
b.Volume:通常将软件层次生成的虚拟磁盘叫做卷,比如LVM生成的逻辑卷。
c.Disk:就是物理磁盘第二层:内核层次的文件系统,维护文件到磁层磁盘的映射关系。
(用户一般不需要管)第三层:应用层次的文件系统(需要用户自己手工安装应用程序,启动应用进程)第四层:网络文件访问系统NFS, CIFS(服务器端装Server,客户端装Client,挂载目录远程访问) Ceph原理1.Ceph存储系统的逻辑结构2.Rados的系统逻辑结构3.Ceph寻址流程4.ceph部署网络拓扑备注:Cluster Network可选,但是最好建议有该网络,用于OSD扩展时,后端网络传输数据用。
在实际工作中时,深有体会,如果只有public network,在OSD扩展时,由于ceph需要重新“搬运”数据,导致升级长达5个小时。
如果有专门的集群网络(万兆交换机+光钎),几分钟升级完成。
Ceph安装(ceph-deploy)1.环境准备以及各ceph节点初始化➢部署逻辑架构节点安装组件备注该章节的操作均通过root执行且在各个ceph节点均要执行➢修改/etc/hostname#vi /etc/hostname #如果为其他节点调整为其他节点的名称ceph{number} #如ceph1#hostname -F /etc/hostname #立即生效,断开shell重新登录➢创建安装用户irteam且该用户不需要tty#useradd -d /home/irteam -k /etc/skel -m irteam#sudo passwd irteam#echo " irteam ALL = (root) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/irteam#chmod 0440 /etc/sudoers.d/irteam修改/etc/sudoers,irteam用户不需要tty#chmod 755 /etc/sudoers#vi /etc/sudoers #添加如下配置,而不是将原来的Default requiretty注释掉Defaults:irteam !requiretty#chmod 440 /etc/sudoers➢yum源以及ceph源设置#yum clean all#rm -rf /etc/yum.repos.d/*.repo#wget -O /etc/yum.repos.d/CentOS-Base.repo /repo/Centos-7.repo #wget -O /etc/yum.repos.d/epel.repo /repo/epel-7.repo#sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo#sed -i 's/$releasever/7.2.1511/g' /etc/yum.repos.d/CentOS-Base.repo#vi /etc/yum.repos.d/ceph.repo #增加ceph源[ceph]name=cephbaseurl=/ceph/rpm-jewel/el7/x86_64/gpgcheck=0[ceph-noarch]name=cephnoarchbaseurl=/ceph/rpm-jewel/el7/noarch/gpgcheck=0➢安装ceph#yum makecache#yum install -y ceph#ceph --version #版本查看ceph version 10.2.2 (45107e21c568dd033c2f0a3107dec8f0b0e58374)➢关闭selinux & firewalld#sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config#setenforce 0#systemctl stop firewalld#systemctl disable firewalld➢同步时间节点(rdate & ntp均可以)#timedatectl set-timezone Asia/Shanghai #设置时区#yum install -y rdate#rdate -s #选个可用且权威的服务器#echo "00 0 1 * * root rdate -s " >> /etc/crontab #加入调度2.部署Ceph集群备注:以下操作均在admin-node节点执行,在本文中,由于admin-node与ceph1共享,所以在ceph1执行就可以了,统一用用户:irteam执行➢修改/etc/hosts#sudo vi /etc/hosts192.168.11.119 ceph1192.168.11.124 ceph2192.168.11.112 ceph3➢生成密钥对& 复制秘钥到各节点(防止部署输入密码,即无密码验证)#sudo su - irteam#ssh-keygenGenerating public/private key pair.Enter file in which to save the key (/irteam/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /irteam/.ssh/id_rsa.Your public key has been saved in /irteam/.ssh/id_rsa.pub.#ssh-copy-id irteam@ceph1#ssh-copy-id irteam@ceph2#ssh-copy-id irteam@ceph3➢用户配置,防止部署时输入用户名#sudo su - irteam #如果当前登录用户是irteam,则忽略该步骤#vi ~/.ssh/configStrictHostKeyChecking noHost ceph1Hostname ceph1User irteamHost ceph2Hostname ceph2User irteamHost ceph3Hostname ceph3User irteam#chmod 600 ~/.ssh/config➢安装部署工具#sudo yum -y install ceph-deploy#ceph-deploy --version1.5.34➢创建集群#sudo su - irteam #如果当前登录用户是irteam,则不用执行#mkdir ~/my-cluster && cd ~/my-cluster#创建集群:在当前目录下生成ceph.conf以及ceph.mon.keyring#ceph-deploy new ceph1 ceph2 ceph3#ls ~/my-cluster #查看生成的文件ceph.conf ceph-deploy-ceph.log ceph.mon.keyring修改集群ceph.conf配置,增加public_network,增加monitor之间的时差(默认为0.05s,现改为2s),总共的副本数据调整为2#vi ceph.conf[global]fsid = 7cec0691-c713-46d0-bce8-5cb1d57f051fmon_initial_members = ceph1, ceph2, ceph3 #也可以用IP,用hostname最佳mon_host = 192.168.11.119,192.168.11.124,192.168.11.112auth_cluster_required = cephxauth_service_required = cephxauth_client_required = cephxpublic_network = 192.168.11.0/24mon_clock_drift_allowed = 2osd_pool_default_size = 2➢部署monitors#ceph-deploy mon create-initial#ll ~/my-clusterceph.bootstrap-mds.keyringceph.bootstrap-rgw.keyringceph.confceph.mon.keyringceph.bootstrap-osd.keyringceph.client.admin.keyringceph-deploy-ceph.log#sudo ceph -s #查看集群情况cluster 7cec0691-c713-46d0-bce8-5cb1d57f051fhealth HEALTH_ERRno osdsmonmap e1: 3 mons at {ceph1=192.168.11.119:6789/0,ceph2=192.168.11.124:6789/0,ceph3=192.168.11.112:6789/0} election epoch 4, quorum 0,1,2 ceph3,ceph1,ceph2osdmap e1: 0 osds: 0 up, 0 inflags sortbitwisepgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects0 kB used, 0 kB / 0 kB avail64 creating➢部署osds由于没有足够多的磁盘(如果用磁盘请参考维护章节),用文件夹:#以下创建文件夹,赋权的动作均在ceph1,ceph2,ceph3上执行#sudo mkdir /var/local/osd1 && sudo chmod 777 -R /var/local/osd1osd预处理与激活#ceph-deploy osd prepare ceph1:/var/local/osd1 ceph2:/var/local/osd1 ceph3:/var/local/osd1#ceph-deploy osd activate ceph1:/var/local/osd1 ceph2:/var/local/osd1 ceph3:/var/local/osd1备注:a.如果你有足够多的磁盘,你也可以直接对磁盘操作#ceph-deploy osd prepare ceph1:sdb#ceph-deploy osd activate ceph1:sdbb.对上述osd prepare & osd activate,也可以一步完成#ceph-deploy osd create ceph1:sdb查看集群状态#sudo ceph -scluster 7cec0691-c713-46d0-bce8-5cb1d57f051fhealth HEALTH_OKmonmap e1: 3 mons at{ceph1=192.168.11.119:6789/0,ceph2=192.168.11.124:6789/0,ceph3=192.168.11.112:6789/0} election epoch 4, quorum 0,1,2 ceph3,ceph1,ceph2osdmap e15: 3 osds: 3 up, 3 inflags sortbitwisepgmap v26: 64 pgs, 1 pools, 0 bytes data, 0 objects29590 MB used, 113 GB / 142 GB avail64 active+cleanCeph安装(kolla)除了官方推荐的ceph-deploy安装方式,你还可以选择如下安装方式:通过工具ansible,远程登录到各node节点安装,并且让mon,osd,rgw用docker方式来承载另外:由于我们使用docker的目的是想部署openstack,涉及到openstack部分,则不涉及。