Ceph学习----Ceph 分布式部署

时间:2023-01-13 12:36:17

目前,公司所用的云环境在计算,网络和存储三大方面,只在计算做了虚拟化,对于网络和存储都只是用了最简单的方式,网络用linux bridge,存储用cinder直接管理NAS,为了增加弹性,应对互联网业务的冲击,就启动了存储和网络虚拟化的研究,其中我就负责存储虚拟化的项目。Ceph作为OpenStack的backend之一,必然需要对其进行研究,首先写一篇Ceph的分布式部署手册。

一 、环境准备:

该部署使用3台机器(ubuntu 14.04),两台机器做osd,一台机器做mon和mds,具体服务情况如下:

  • ceph1(192.168.21.140):osd.0
  • ceph2(192.168.21.141):osd.1 osd.2
  • ceph3(192.168.21.142):mon mds
  • 修改各自的hostname,并能够通过hostname来互相访问。
  • 各节点能够ssh互相访问而不输入密码(通过ssh-keygen命令)。

二、配置免密码登陆:

在每个节点上:

ssh-keygen -t rsa
touch /root/.ssh/authorized_keys

首先配置ceph1

scp /root/.ssh/id_rsa.pub ceph2:/root/.ssh/id_rsa.pub_ceph1

scp /root/.ssh/id_rsa.pub ceph3:/root/.ssh/id_rsa.pub_ceph1

ssh ceph2 "cat /root/.ssh/id_rsa.pub_ceph1>> /root/.ssh/authorized_keys"

ssh ceph3 "cat /root/.ssh/id_rsa.pub_ceph1 >> /root/.ssh/authorized_keys"

节点ceph2和ceph3也需要参照上面的命令进行配置。

三、安装ceph 库

在每个节点上安装Ceph库:

apt-get install ceph ceph-common ceph-mds

显示ceph 版本信息:

ceph -v

四、在ceph1上创建ceph 配置文件

vim /etc/ceph/ceph.conf
[global]

max open files = 131072

auth cluster required = none

auth service required = none

auth client required = none

osd pool default size = 2

[osd]

osd journal size = 1000

filestore xattruse omap = true

osd mkfs type = xfs

osd mkfs options xfs = -f #default for xfs is "-f"

osd mount options xfs = rw,noatime # default mount option is"rw,noatime"

[mon.a]

host = ceph3

mon addr = 192.168.21.142:6789



[osd.0]

host = ceph1
devs = /dev/sdb



[osd.1]

host= ceph2
devs= /dev/sdc

[osd.2]

host = ceph2
devs = /dev/sdb


[mds.a]

host= ceph3


配置文件创建成功之后,还需要拷贝到除纯客户端之外的每个节点中(并且后续也要始终保持一致):

scp /etc/ceph/ceph.conf ceph2:/etc/ceph/ceph.conf

scp /etc/ceph/ceph.conf ceph3:/etc/ceph/ceph.conf

五、创建数据目录:

在每个节点上执行

mkdir -p /var/lib/ceph/osd/ceph-0

mkdir -p /var/lib/ceph/osd/ceph-1

mkdir -p /var/lib/ceph/osd/ceph-2

mkdir -p /var/lib/ceph/mon/ceph-a

mkdir -p /var/lib/ceph/mds/ceph-a

六、创建分区并挂载:

对于osd所在的节点ceph1和ceph2,需要对新分区进行xfs格式化并mount到指定目录:

ceph1:

mkfs.xfs -f /dev/sdb

mount /dev/sdb /var/lib/ceph/osd/ceph-0

ceph2:

mkfs.xfs -f /dev/sdc

mount /dev/sdc /var/lib/ceph/osd/ceph-1

mkfs.xfs -f /dev/sdb

mount /dev/sdb /var/lib/ceph/osd/ceph-2

七、初始化

注意,每次执行初始化之前,都需要在每个节点上先停止Ceph服务,并清空原有数据目录:

/etc/init.d/ceph stop

rm -rf /var/lib/ceph/*/ceph-*/*

然后,就可以在mon所在的节点ceph3上执行初始化了:

sudo mkcephfs -a -c /etc/ceph/ceph.conf -k /etc/ceph/ceph3.keyring

注意,一旦配置文件ceph.conf发生改变,初始化最好重新执行一遍。

八 、启动ceph

在mon所在的节点ceph3上执行:

sudo service ceph -a start

注意,执行上面这步时,可能会遇到如下提示:

=== osd.0 ===

Mounting xfs onceph4:/var/lib/ceph/osd/ceph-0

Error ENOENT: osd.0 does not exist.  create it before updating the crush map

执行如下命令后,再重复执行上面那条启动服务的命令,就可以解决:

 ceph osd create

九 、遇到的坑

  • ubuntu不能远程通过root用户登录
    修改 vim /etc/ssh/sshd_config  将 PermitEmptyPasswords  修改为no 重启ssh
  • ceph osd tree 看到3个osd的host同为ubuntu因为我是用虚拟机做的实验,虚拟机是clone得到的,因此hostname相同,vim /etc/hostname
  • ceph osd tree 看到3个osd的host同为ceph3在ceph1和ceph2上重启ceph服务 /etc/init.d/ceph restart
  • ceph -s 看到有warning 不是ok
    root@ceph3:/var/lib/ceph/osd# ceph -s
    cluster 57b27255-c63d-4a70-8561-99e76615e10f
    health HEALTH_WARN 576 pgs stuck unclean
    monmap e1: 1 mons at {a=192.168.21.142:6789/0}, election epoch 1, quorum 0 a
    mdsmap e6: 1/1/1 up {0=a=up:active}
    osdmap e57: 3 osds: 3 up, 3 in
    pgmap v108: 576 pgs, 3 pools, 1884 bytes data, 20 objects
    3125 MB used, 12204 MB / 15330 MB avail
    576 active+remapped

    解决办法,在/etc/ceph/ceph.conf 中[global]加入

    osd pool default size = 2

    推测应该是osd的数量应该大于副本数,ceph才可以正常运行


原文地址:http://airheaven.cn/2016/01/11/ceph%E5%AD%A6%E4%B9%A0-ceph-%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2/