简单介绍
Ceph的部署模式下主要包含以下几个类型的节点
• Ceph OSDs: A Ceph OSD 进程主要用来存储数据,处理数据的replication,恢复,填充,调整资源组合以及通过检查其他OSD进程的心跳信息提供一些监控信息给Ceph Monitors . 当Ceph Storage Cluster 要准备2份数据备份时,要求至少有2个Ceph OSD进程的状态是active+clean状态 (Ceph 默认会提供两份数据备份).
• Monitors: Ceph Monitor 维护了集群map的状态,主要包括monitor map, OSD map, Placement Group (PG) map, 以及CRUSH map. Ceph 维护了 Ceph Monitors, Ceph OSD Daemons, 以及PGs状态变化的历史记录 (called an “epoch”).
• MDSs: Ceph Metadata Server (MDS)存储的元数据代表Ceph的文件系统 (i.e., Ceph Block Devices 以及Ceph Object Storage 不适用 MDS). Ceph Metadata Servers 让系统用户可以执行一些POSIX文件系统的基本命令,例如ls,find 等.
硬件的选择
CPU
Ceph metadata server会动态的重新分配负载,它是CPU敏感性的,所以Metadata Server应该有比较好的处理器性能 (比如四核CPU). Ceph OSDs运行RADOS服务,需要通过CRUSH来计算数据的存放位置,replicate数据,以及维护Cluster Map的拷贝,因此OSD也需要合适的处理性能Ceph Monitors 简单的维护了Cluster Map的主干信息所以这个是CPU不敏感的.RAM
Metadata servers 以及Monitors 必须能够快速的提供数据,因此必须有充足的内存(e.g., 1GB of RAM per daemon instance). OSDs 在执行正常的操作时不需要过多的内存 (e.g., 500MB of RAM per daemon instance);但是 执行恢复操作时,就需要大量的内存(e.g., ~1GB per 1TB of storage per daemon). Generally, 而且是越多越好.Data Storage
规划数据存储时要考虑成本和性能的权衡。同时OS操作,同时多个后台程序对单个驱动器进行读写操作会显着降低性能。也有文件系统的限制考虑:BTRFS对于生产环境来说不是很稳定,但有能力记录journal和并行的写入数据,而XFS和EXT4会好一点。
其他注意事项
您可以在每台主机上运行多个OSD进程,但你应该确保OSD硬盘的吞吐量总和不超过客户端读取或写入数据所需的网络带宽。你也应该考虑在每个主机上数据的存储率。如果一个特定的主机上的百分比较大,它可能会导致问题:为了防止数据丢失,会导致Ceph停止操作。
当您运行每台主机上运行多个OSD进程时,你还需要保证内核是最新的。 当您运行每台主机上运行多个OSD进程时(如>20)会产生很多的线程,特别是进行recovery和relalancing操作。许多Linux内核默认线程限最大数量比较小(例如,32k的)。如果您遇到这方面的问题,可以考虑把kernel.pid_max设置的高一点。理论上的最大值为4,194,303。
Networks
我们建议每个主机至少有两个1Gbps的网络接口控制器(NIC)。由于大多数硬盘驱动器的吞吐量大约为100MB/秒,你的网卡应该能够处理OSD主机上磁盘的流量。我们建议至少两个NIC一个作为公共的网络和一个作为集群的网络。集群网络(最好是未连接到互联网)处理数据replication,并帮助阻止拒绝服务攻击(阻止active+clean状态的PG跨集群复制数据)。考虑开始在你的机架中使用10Gbps网络。通过1Gbps的网络复制1TB的数据需要3个小时,3TBs(一个典型的驱动器配置)需要9个小时。相比之下,具有10Gbps的网络中,复制时间就分别为20分钟至1小时。
部署
部署主要在四个节点上进行
IP | hostname | 描述 |
192.168.40.106 | dataprovider | 部署管理节点 |
192.168.40.107 | mdsnode | MDS,MON节点 |
192.168.40.108 | osdnode1 | OSD节点 |
192.168.40.148 | osdnode2 | OSD节点 |
-
Ceph 部署节点
-
编辑repo文件
sudo vim /etc/yum.repos.d/ceph.repo[ceph-noarch]
name=Ceph noarch packages
baseurl=http://ceph.com/rpm-{ceph-release}/{distro}/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
-
-
安装ceph-deploy
-
sudo yum install ceph-deploy
-
-
编辑/etc/hosts
-
在/etc/hosts文件中改成如下内容#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 dataprovider
192.168.40.107 mdsnode
192.168.40.108 osdnode1
192.168.40.148 osdnode2
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
-
Ceph Node Setup
每个节点都执行下面的命令yum install -y ntp ntpdate ntp-doc
yum install -y openssh-server
-
-
创建专用的用户
-
为了使用简单,在每个节点上都创建leadorceph用户,并且密码都设置为leadorceph
sudo useradd -d /home/leadorceph -m leadorceph
sudo passwd leadorceph
-
-
在每个Ceph节点中为用户增加 root 权限
-
echo "leadorceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/leadorceph
sudo chmod 0440 /etc/sudoers.d/leadorceph
配置正确会出现如下截图
-
Enable Password-less SSH
在deploy节点上切换到leadorceph用户,生成 无密码的SSH key,并拷贝到每个节点上
[leadorceph@dataprovider root]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/leadorceph/.ssh/id_rsa):
Created directory '/home/leadorceph/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/leadorceph/.ssh/id_rsa.
Your public key has been saved in /home/leadorceph/.ssh/id_rsa.pub.
The key fingerprint is:
a8:fb:b8:3a:bb:62:dc:25:a6:58:7b:9d:97:00:30:ec leadorceph@dataprovider
The key's randomart image is:
+--[ RSA 2048]----+
| . |
| + |
| . o |
| E . . |
| .. S |
| .o o. |
|o.+.+. o . |
|o+o..oo o |
|..+*+o.. |
+-----------------+拷贝到每个节点ssh-copy-id leadorceph@mdsnode
ssh-copy-id leadorceph@osdnode1
ssh-copy-id leadorceph@osdnode2
-
存储集群
-
创建集群
在deploy节点上创建配置目录,下面的所有deploy节点上的操作都在该目录进行
mkdir my-cluster
cd my-cluster
-
-
部署失败
-
如果部署失败了可以用下面的命令恢复
如果要是整个环境重新安装的话,dataprovider也要进行purge操作 ceph-deploy purge {ceph-node} [{ceph-node}] ceph-deploy purgedata {ceph-node} [{ceph-node}] ceph-deploy forgetkeys 如果删除的是osd节点,还需要删除osd的数据目录,然后再重新创建对应的目录
-
-
创建一个集群
-
在admin node 上用ceph-deploy创建集群,new后面跟的是mds节点的hostnameceph-deploy new mdsnode
执行成功后该目录下会增加三个文件
-
-
修改默认的副本数为2
-
修改ceph.conf,使osd_pool_default_size的值为2
-
-
开始安装
-
ceph-deploy install deploynode mdsnode osdnode1 osdnode2
安装成功:
-
创建 Ceph MON 集群监视器
在deploy上依次执行下面的命令ceph-deploy mon create-initial
ceph-deploy mon create mdsnode
ceph-deploy gatherkeys mdsnode执行成功后会出现下面的文件
-
- 创建OSD节点
为了达到快速演示的效果,OSD后台进程使用目录而非独立的磁盘,分别在两个osd节点上创建目录ssh osdnode1
sudo mkdir /var/local/osd0
exit
ssh osdnode2
sudo mkdir /var/local/osd1
exit
-
-
准备osd节点
-
ceph-deploy osd prepare osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
ceph-deploy osd activate osdnode1:/var/local/osd0 osdnode2:/var/local/osd1
-
-
拷贝配置文件以及key文件
-
ceph-deploy admin dataprovider mdsnode osdnode1 osdnode2
-
-
-
确保ceph.client.admin.keyring.有正确的权限
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
-
-
-
-
-
查看集群状态
-
-
问题总结
-
问题1
问题描述:[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure ``requiretty`` is disabled for mdsnode解决方法: 需要在mdsnode,osdnode1,osdnode2三个节点中使用leadorceph用户的身份执行sudo visudo命令,然后修改Defaults requiretty 为Defaults:ceph !requiretty
-
-
问题2
执行ceph-deploy admin命令的时候出现下面的异常 -
-
解决办法1 修改/usr/lib/python2.6/site-packages/ceph_deploy/hosts/centos/install.py 文件取消install的执行,修改方式如下:
2 执行的时候加上--repo参数