环境准备

  • 机器(操作系统 CentOS)
  • 192.168.61.30 c0 - admin-node, deploy-node
  • 192.168.61.31 c1 - mon
  • 192.168.61.32 c2 - osd.1
  • 192.168.61.33 c3 - osd.2

配置各个节点的host文件:

1192.168.61.31 c0
2192.168.61.31 c1
3192.168.61.32 c2
4192.168.61.33 c3

管理节点c0上配置Ceph yum源 /etc/yum.repos.d/ceph.repo

1[ceph-noarch]
2name=Ceph noarch packages
3baseurl=https://download.ceph.com/rpm-jewel/el7/noarch
4enabled=1
5priority=2
6gpgcheck=1
7gpgkey=https://download.ceph.com/keys/release.asc

更新软件库并安装 ceph-deploy

1yum update && sudo yum install ceph-deploy

在各节点创建部署ceph的用户(不建议为ceph),这里创建的用户名为sdsceph,设置一个密码,并确保该用户具有sudo权限。

1useradd -d /home/sdsceph -m sdsceph
2passwd sdsceph
3
4echo "sdsceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sdsceph
5chmod 0440 /etc/sudoers.d/sdsceph

禁用 requiretty,修改各节点sdsceph用户不需要控制终端,visudo找到Defaults requiretty修改成Defaults:sdsceph !requiretty

配置c0到各节点无密码登录,直接回车保持密码为空

1ssh-keygen

将key拷贝到c1~c3各节点:

1ssh-copy-id sdsceph@c1
2ssh-copy-id sdsceph@c2
3ssh-copy-id sdsceph@c3

修改c0上~/.ssh/config文件,设置当不指定用户时登录到c1~c3的用户为sdsceph

1Host c1
2   Hostname c1
3   User sdsceph
4Host c2
5   Hostname c2
6   User sdsceph
7Host c3
8   Hostname c3
9   User sdsceph

配置成功后从c0测试ssh到c1~c3确认可以无密码以sdsceph用户登录:

1ssh c1
2
3ssh c2
4
5ssh c3

在各节点上安装ntp服务:

1sudo yum install -y ntp
2
3sudo systemctl enable ntpd
4sudo systemctl start ntpd

安装

创建集群

使用ceph-deploy创建集群,在此过程中会生成一些配置文件,因此可以先在c0上创建一个目录ceph-cluster,并进入到这个目录中。

1mkdir ceph-cluster
2cd ceph-cluster/

接下来执行命令ceph-deploy new {initial-monitor-node(s)}将创建一个名称ceph的ceph cluster。 再看一遍要安装的环境安排:

1192.168.61.30 c0 - admin-node, deploy-node
2192.168.61.31 c1 - mon
3192.168.61.32 c2 - osd.1
4192.168.61.33 c3 - osd.2

ceph monitor node是c1服务器,因此执行下面的命令:

1ceph-deploy new c1

ceph-cluster目录下会生成下面3个文件:

1ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

因为只有两个OSD节点,在c2和c3服务器上,需要把Ceph 配置文件里的ceph.conf里的默认副本数从 3 改成 2, 这样只有两个 OSD 也可以达到 active + clean 状态。把下面这行加入 [global] 段:

1osd pool default size = 2

安装ceph

从管理节点c0执行在各节点安装ceph:

1ceph-deploy install c0 c1 c2 c3

配置初始化ceph monitor nodes,这里只有c1,收集所有密钥:

1ceph-deploy mon create-initial

执行成功后当前目录下会出现以下key:

1ceph.bootstrap-mds.keyring
2ceph.bootstrap-osd.keyring
3ceph.bootstrap-rgw.keyring
4ceph.client.admin.keyring

在c1上 ps -ef | grep ceph-mon可以看到ceph monitor进程已经启动。

接下来添加两个OSD到c2和c3。OSD是存储数据的节点,实际上需要为OSD提供独立的存储空间,如一个独立的磁盘。这里条件所限直接在系统本地磁盘上创建目录提供给OSD使用。

1ssh c2
2sudo mkdir /var/local/osd0
3sudo chown -R ceph:ceph /var/local/osd0
4exit
5
6ssh c3
7sudo mkdir /var/local/osd1
8sudo chown -R ceph:ceph /var/local/osd1
9exit

准备OSD:

1ceph-deploy osd prepare c2:/var/local/osd0 c3:/var/local/osd1

激活OSD:

1ceph-deploy osd activate c2:/var/local/osd0 c3:/var/local/osd1

分发admin密钥,将admin密钥拷贝到各节点,这样每次执行ceph命令行时就无需指定monitor地址和 ceph.client.admin.keyring了。

1ceph-deploy admin c0 c1 c2 c3

查看ceph集群中OSD节点的状态:

1ceph osd tree
2ID WEIGHT  TYPE NAME     UP/DOWN REWEIGHT PRIMARY-AFFINITY
3-1 0.19080 root default
4-2 0.09540     host c2
5 0 0.09540         osd.0      up  1.00000          1.00000
6-3 0.09540     host c3
7 1 0.09540         osd.1      up  1.00000          1.00000

查看集群健康状态:

1ceph health
2HEALTH_OK

如果安装过程中遇到问题可以使用下面的命令清理,重装:

1ceph-deploy purge c0 c1 c2 c3
2ceph-deploy purgedata c0 c1 c2 c3
3ceph-deploy forgetkeys

对象存入/读取测试

查看集群中的存储池:

1ceph osd lspools
20 rbd,

新建的集群上只有rbd一个存储池,下面创建一个名称为data的存储池:

1ceph osd pool create data 100

使用rados pus {object-name} {file-path} --pool=data存入数据:

1rados put test-object1 ceph.conf --pool=data

确认Ceph存储了此对象:

1rados -p data ls
2test-object1

定位对象:

1ceph osd map data test-object1
2osdmap e12 pool 'data' (1) object 'test-object1' -> pg 1.bfe3960b (1.b) -> up ([0,1], p0) acting ([0,1], p0)

删除测试对象:

1rados rm test-object1 --pool=data

参考