ceph集群搭建手记
参考官方文档,记录一下ceph的安装过程,以备以后查阅。
先暂把集群搭起来,故只用了最低配置:用了三台服务器,一台mon节点(兼部署时的admin)节点,两台osd节点。一旦这个集群是active + clean状态, 通过增加第三个Ceph OSD 守护进程,一个元数据服务器(mds)和另外两个Ceph监控器(mon)来扩展它。
环境说明
host ip OS
mon-1 192.168.51.235 centos 6.6
osd-1 192.168.51.236 centos 6.6
osd-2 192.168.51.237 centos 6.6
预检
1.修改yum源,安装ceph-deploy
1 | vi /etc/yum.repos.d/ceph.repo |
添加如下内容,并修改ceph-release和distro。这里我ceph-release用的是giant,distro是centos6,故改成el6。
1 | [ceph-noarch] |
更新源后安装ceph-deploy
1 | sudo yum update && sudo yum install ceph-deploy |
2.更改节点的hostname
1 | vi /etc/sysconfig/network |
修改后的内容如下
1 | NETWORKING=yes |
其他机器的hostname依次改成osd-1,osd-2。重启后生效。
3.所有节点安装ntp服务,确保集群内所有节点时间一致。
安装ntp和ntpdate,并通过修改ntp配置文件(/etc/ntp.conf)使各节点从同一个服务器同步时间,从而保证所有节点时间一致。
1 | yum install ntp ntpdate |
4.新建ceph用户
admin节点需要可以无密码ssh访问其他节点,并且ssh的用户必须拥有sudo权限。
新建用户的操作需要在每台节点上都要操作。
1 | useradd -d /home/ceph -m ceph |
为新建用户添加sudo权限
1 | echo "ceph ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/ceph |
5.切换到ceph用户,生成ssh密钥对,并将公钥添加到其他节点的ceph用户信任公钥里。
在新建密钥对的时候,密码留空。
1 | [ceph@mon-1 ~]$ ssh-keygen |
将公钥复制到其他节点上
1 | ssh-copy-id ceph@osd-1 |
编辑.ssh/config文件,使admin节点ssh和scp到其他节点的时候不需要指定用户。修改后的文件如下:
1 | [ceph@mon-1 ~]$ vi .ssh/config |
并将权限设置为0600
1 | chmod 0600 .ssh/config |
6.配置防火墙,打开所需端口,monitor节点需要6789端口,osd节点需要6800:7000端口。配置方法这里不详述。
7.在centos和redhat里,还需要使用visudo命令编辑/etc/sudoers文件,修改#Defaults requiretty#这一行为#Defaults:ceph !requiretty#,或者将这一行注释掉。注:每个节点都
1 | #Defaults requiretty |
8.关闭安全策略
1 | setenforce 0 |
安装
以下操作均在admin节点的ceph用户环境下。
1.安装前准备
新建文件夹
1 | mkdir ceph |
如果以前有安装过ceph,或在安装过程出错需要重新安装时,请用以下的命令清除之前的安装信息
1 | ceph-deploy purgedata {ceph-node} [{ceph-node}] |
也可以用以下命令来清除指定节点上的ceph包
1 | ceph-deploy purge {ceph-node} [{ceph-node}] |
2.配置mon节点
1 | ceph-deploy new mon-1 |
执行完上面的命令后,使用ll命令可以看到ceph文件夹下的ceph.conf、ceph.log和ceph.mon.keyring三个文件。
修改ceph.conf文件。因为我们只有两个osd节点,要激活active+clean模式,必须修改此配置文件。在[gloable]下增加“osd pool default size = 2”,修改后的文件如下:
1 | [global] |
如果有多块网卡,还需要配置public network项。
3.安装ceph
1 | ceph-deploy install mon-1 osd-1 osd-2 |
注意:我在这里出现如下一个error:
1 | [mon-1][INFO ] Running command: rpm -Uvh --replacepkgs http://ceph.com/rpm-giant/el6/noarch/ceph-release-1-0.el6.noarch.rpm |
网上找到如下解决办法:
1 | ceph-deploy install --repo-url http://ceph.com/rpm-giant/el6/ mon-1 osd-1 osd-2 |
在安装过程中,如果出现超时错误,可以手动执行 sudo yum install ceph。
4.初始化监控节点,收集key
1 | ceph-deploy mon create-initial |
执行完这一步后,在文件夹里会看到ceph.bootstrap-mds.keyring
、ceph.bootstrap-osd.keyring
、ceph.client.admin.keyring
、ceph.mon.keyring
四个keyring文件。
5.准备并激活OSD节点
我在这里使用文件夹代替使用整块硬盘。
先ssh到各osd节点,在/var/local/下新建osd文件夹
1 | ssh osd-1 |
使用ceph-deploy osd prepare
命令准备osd节点
1 | ceph-deploy osd prepare osd-1:/var/local/osd1 osd-2:/var/local/osd2 |
然后激活osd
1 | ceph-deploy osd activate osd-1:/var/local/osd1 osd-2:/var/local/osd2 |
官方文档上说用ceph-deploy osd create
命令可以一步执行prepare和activate命令,没尝试成功。
6.复制配置文件和admin key到管理节点和osd节点
使用ceph-deploy命令将配置文件和管理密钥复制到管理节点和你的Ceph节点。下次你再使用ceph命令界面时就无需指定集群监视器地址,执行命令时也无需每次都指定ceph.client.admin.keyring。
1 | ceph-deploy admin mon-1 osd-1 osd-2 |
7.给ceph.client.admin.keyring
文件读权限
1 | sudo chmod +r /etc/ceph/ceph.client.admin.keyring |
8.检查ceph集群是否健康
1 | ceph health |
或用ceph status
查看集群的状态。ps:因为我在集群搭建完成后又添加了一个osd节点,故这里显示有3个osd节点。
1 | [ceph@mon-1 my-cluster]$ ceph status |
看到返回的结果为active+clean
状态,说明集群ok。
扩展
在这里演示扩展添加osd、mds、mon节点。采用centos 6.6操作系统。
首先,需要按照预检步骤里一样,添加ceph用户,修改hosts,在~/.ssh/config里添加osd、mds、mon节点信息,安装ntp服务确保集群里面的所有节点时间一致,关闭selinux,配置好iptables或关闭防火墙。
添加osd节点
host ip OS
osd-3 192.168.51.240 centos 6.6
1.在管理节点(我这里用的mon-1)使用ceph-deploy install
命令安装ceph到osd-3
1 | ceph-deploy install osd-3 |
在这里如果遇到[WARNIN] curl: (22) The requested URL returned error: 404 Not Found
的错误,请加上--repo-url
参数重新安装一遍。
1 | ceph-deploy install --repo-url http://ceph.com/rpm-giant/el6/ osd-3 |
2.ssh到osd3节点上,创建/var/local/osd3
文件夹
1 | ssh osd-3 |
3.准备并激活osd节点
1 | ceph-deploy osd prepare osd-3:/var/local/osd3 |
4.复制配置文件和admin key到osd节点
1 | ceph-deploy admin osd-3 |
5.查看集群状态
1 | ceph status |
添加mds节点
host ip OS
mds-1 192.168.51.141 centos 6.6
如同添加osd节点一样,先安装好ceph,然后用下面的命令添加mds节点到集群。
1 | ceph-deploy mds create mds-1 |
添加mon节点
host ip OS
mds-2 192.168.51.99 centos 6.6
mds-2 192.168.51.219 centos 6.6
一个Ceph存储集群至少需要一台Ceph监视器。为了保证高可用性,Ceph存储集群中通常会运行多个Ceph监视器,任意单台Ceph监视器的宕机都不会影响整个Ceph存储集群正常工作。由于Ceph使用Paxos算法,这需要多个Ceph监视器组成Quoram(如1,2:3,3:4,3:5,4:6等)。
安装好ceph后,利用下面命令将原有的mon节点和待添加的mon节点添加到集群中。
1 | ceph-deploy mon create mon-2 mon-3 |
当你增加Ceph监视器后,Ceph将开始同步各监视器并形成Quoram。你可通过如下方式检查Quoram状态:
1 | ceph quorum_status --format json-pretty |
使用ceph存储对象数据
为了能够操作Ceph存储集群中的对象数据,Ceph客户端必需满足:
1. 设置一个对象名
2. 指定一个数据池
Ceph客户端取回最新的集群映射表,并根据CRUSH算法先计算如何将对象映射到某个PG中,然后再计算如何将该PG动态映射入一个Ceph OSD进程上。为了查找对象位置,你需要的仅仅是对象名称和数据池名称,例如:
1 | ceph osd map {poolname} {object-name} |
练习:定位一个对象
作为一个练习,我们先创建一个对象。使用rados put命令指定对象名称、存储对象数据的测试文件路径和地址池名称。例如:
1 | rados put {object-name} {file-path} --pool=data |
为了验证Ceph存储集群已存储该对象,执行如下命令:
1 | rados -p data ls |
现在,可标识对象位置:
1 | ceph osd map {pool-name} {object-name} |
Ceph将输出对象位置信息,例如:
1 | osdmap e537 pool 'data' (0) object 'test-object-1' -> pg 0.d1743484 (0.4) -> up [1,0] acting [1,0] |
如果要删除测试对象,使用rados rm命令即可,例如:
1 | rados rm test-object-1 --pool=data |
当集群扩展后,对象位置可能会动态变更。Ceph动态平衡的一个好处就是Ceph可自动完成迁移而无须你手动操作。