分布式云存储Ceph部署方法

Ceph是一个分布式存储系统,提供对象,块和文件存储,是一个免费开源软件的存储解决方案,随着云计算的发展,Ceph搭上Openstack这趟快车,成为了开源社区备受关注的项目之一。

系统配置

系统架构

主机名 主机IP 功能
cephmgr 10.10.200.150 ceph-deploy
ceph01 10.10.200.181 ceph-mon
ceph02 10.10.200.182
ceph03 10.10.200.183
osd01 10.10.100.201 ceph-osd
osd02 10.10.100.202

说明:

  • Ceph管理节点可以安装在openstack的控制节点,甚至可以部署集群。
  • 可以将ceph-deploy部署在任意节点,建议部署在一个独立的节点。
  • 建议每个osd节点单独一块系统磁盘(sda),用于安装操作系统。
  • 建议每个osd节点单独一块日志磁盘(sdb),而且最好是SSD,用于存储OSD日志。
  • 日志磁盘分成与挂载的OSD磁盘等数量的分区,即挂载了多少块OSD磁盘就分多少个区。
  • 文件系统均使用官方推荐的xfs,OSD日志分区不需要创建文件系统,由ceph自己管理。
  • 也可以使用现成的文件系统划分目录或分区给OSD,但不建议这种方案,本文也不讲。

所有节点需要调整防火墙规则、解析主机名、同步时钟,以及最好免密登录等,方法略……

配置yum源(所有节点)
编辑/etc/yum.repos.d/CentOS-Ceph-Luminous.repo

[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc

[ceph-source]
name=ceph-source
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.aliyun.com/ceph/keys/release.asc
yum clean all
yum makecache
# yum repolist

部署ceph-deploy(管理节点)

可以将ceph集群直接部署在openstack的控制节点,如果独立安排服务器,同样需要调整防火墙规则、解析主机名、同步时钟,以及免密登录等。

以下操作均在管理节点执行,部署前先了解几个名词:

名词 说明
fsid 集群唯一标识,通常用uuid表示
cluster name 集群名称,可以不指定,默认是ceph
monitor map 集群内MON节点的map,用于MON节点之间互相发现
monitor keyring 集群内MON节点之间通信所用的KEY
administrator keyring 客户端通过admin用户及KEY与服务端通信

0x01 创建工作目录

mkdir ceph-cluster
cd ~/ceph-cluster
uuidgen >> fsid.txt
#cat fsid.txt
#d9de3482-448c-4fc4-8ccc-f32e00b8764e

0x02 安装ceph-deploy

yum -y install ceph-deploy
ceph-deploy --version

部署ceph-mon(管理节点)

1x01 安装ceph-mon

# 通过ceph-deploy自动为管理节点和OSD节点安装ceph-mon
ceph-deploy install ceph0{1,2,3}
ceph-deploy install osd0{1,2}
ceph-deploy install controller
ceph-deploy install compute

# 若自动安装失败,则手动为管理节点和OSD节点安装ceph-mon
# for i in 1 2 3; do ssh root@ceph0$i "yum install -y ceph ceph-radosgw";done
# for i in 1 2 ; do ssh root@osd0$i "yum install -y ceph ceph-radosgw";done

# 配置ceph-mon开机启动
for i in 1 2 3; do ssh root@ceph0$i "systemctl enable ceph";done
for i in 1 2 ; do ssh root@osd0$i "systemctl enable ceph";done

1x02 创建ceph-mon集群

# 创建ceph-mon管理集群
ceph-deploy new ceph0{1,2,3}

集群创建成功后,会自动生成配置文件/etc/ceph/ceph.conf,默认无需修改,建议根据实际需求进行调整。

[global]
fsid = d9de3482-448c-4fc4-8ccc-f32e00b8764e
mon_initial_members = ceph01, ceph02, ceph03
mon_host = 10.10.100.181,10.10.100.182,10,10,100,183
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
cluster network = 10.10.100.0/24    #OSD间数据复制专用网络
public network = 10.10.200.0/16     #公共访问网络
#以下参数,请根据实际情况配置
osd pool default size = 3
osd pool default pg nmu = 128
osd pool default pgp nmu = 128
osd crush update on start = false
max open files = 262144
rbd_default_features = 1
mon_clock_drift_allowed = 1
mon clock drift warn backoff = 30
#mon_allow_pool_delete = true

[mgr]
mgr modules = dashboard

[mon]
mon data = /var/lib/ceph/mon/ceph-$id

[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd journal size = 20000
osd mkfs type = xfs
osd mkfs options xfs = -f
filestore xattr use omap = true
filestore min sync interval = 10
filestore max sync interval = 15
filestore queue max ops = 25000
filestore queue max bytes = 1048576000
filestore queue committing max ops = 5000
filestore queue committing max bytes = 10485760000
filestore op threads = 32
journal max write bytes = 1073714824
journal max write entries = 10000
journal queue max ops = 50000
journal queue max bytes = 10485760000
osd max write size = 512
osd client message size cap = 2147483648
osd deep scrub stride = 131072
osd op threads = 8
osd disk threads = 4
osd map cache size = 1024
osd map cache bl size = 128
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier"
osd recovery op priority = 4
osd recovery max active = 10
osd max backfills = 4

[client]
rbd cache = true
rbd cache size = 268435456
rbd cache max dirty = 134217728
rbd cache target dirty = 67108864
rbd cache max dirty age = 5

备注:所有需要连接ceph的openstack节点都需要安装ceph,并复制如上配置文件。

关于pgp的说明,具体请参照官方文档

  • OSD<5         pg_num=128
  • 5<OSD<10   pg_num=512
  • 10<OSD<50 pg_num=4096

1x03 配置ceph-mon

ceph-deploy mon create-initial
systemctl status ceph-mon@ceph01

部署ceph-mgr(管理节点)

# 创建ceph-mgr
ceph-deploy mgr create ceph01:ceph01_mgr ceph02:ceph02_mgr ceph03:ceph03_mgr
# 查看ceph-mgr状态
systemctl status ceph-mgr@ceph01_mgr ceph-mgr@ceph02_mgr ceph-mgr@ceph03_mgr

# 启动ceph-mgr
ceph mgr module enable dashboard
# 检查ceph-mgr运行状态
netstat -tunlp | grep mgr

启动后,访问控制面板:http://10.10.200.181:7000,可以考虑加入haproxy。

附加知识

重建Ceph集群:

ceph-deploy purge ceph01 ceph02 ceph03 osd01 osd02
ceph-deploy purgedata ceph01 ceph02 ceph03 osd01 osd02
ceph-deploy forgetkeys

管理ceph-mon:

monitor start | stop | restart
OSD start | stop | restart
ceph osd tree

初始化磁盘(所有OSD节点)

在安装好ceph-mon后,即可初始化磁盘,本文案例以每个OSD节点4块数据盘、1块日志盘、1块系统盘为例。

3x01 对OSD数据盘分区

parted /dev/sdc
mklable gpt
mkpart primary xfs 0%100%
quit
mkfs.xfs /dev/sdc1

3x02 对OSD日志盘分区

每个数据盘对应一个日志分区,即有多少个数据盘,日志盘就得分多少个区。

parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb mkpart primary 0%25%
parted -s /dev/sdb mkpart primary 26%50%
parted -s /dev/sdb mkpart primary 51%75%
parted -s /dev/sdb mkpart primary 76%100%
quit

建议搞一个自动分区脚本,以下是4个OSD磁盘的例子,请根据实际情况修改:

#!/bin/bash
set-e
if[!-x "/sbin/parted"];then
  echo "Parted is needed!">&2
  exit 1
fi

#OSD分区
DISKS="c d e f"
for i in ${DISKS};do
  parted -a optimal --script /dev/sd${i}-- mktable gpt
  parted -a optimal --script /dev/sd${i}-- mkpart primary xfs 0%100%
  sleep 1
  mkfs.xfs -f /dev/sd${i}1&
done

#日志分区
parted -s /dev/sdb mklabel gpt
parted -s /dev/sdb mkpart primary 0%25%
parted -s /dev/sdb mkpart primary 26%50%
parted -s /dev/sdb mkpart primary 51%75%
parted -s /dev/sdb mkpart primary 76%100%

创建并激活OSD(所有OSD节点)

为防止磁盘格式不匹配,建议先通过disk zap命令重置磁盘后再创建OSD数据盘:

ceph-deploy disk zap osd01:sdc osd01:sdd osd01:sde osd01:sdf
ceph-deploy osd create osd01:sdc osd01:sdd osd01:sde osd01:sdf
ceph-deploy disk zap osd02:sdc osd02:sdd osd02:sde osd02:sdf
ceph-deploy osd create osd02:sdc osd02:sdd osd02:sde osd02:sdf

重复操作可以写成脚本:

#!/bin/bash
for((i=1;i<=2;i++))
do
  # for j in `ls /dev/sd[a-z]`
  for j in c d e f
  do
    #ceph-deploy osd create osd$i:$j
    ceph-deploy osd create osd$i:sd$j
  done
done

以上操作也可以通过如下命令完成(先做osd01再做osd02):

ceph-deploy disk zap \
osd01:/dev/sdc \
osd01:/dev/sdd \
osd01:/dev/sde \
osd01:/dev/sdf
ceph-deploy osd prepare \
osd01:/dev/sdc:/dev/sdb1 \
osd01:/dev/sdd:/dev/sdb2 \
osd01:/dev/sde:/dev/sdb3 \
osd01:/dev/sdf:/dev/sdb4
ceph-deploy osd activate \
osd01:/dev/sdc:/dev/sdb1 \
osd01:/dev/sdd:/dev/sdb2 \
osd01:/dev/sde:/dev/sdb3 \
osd01:/dev/sdf:/dev/sdb4

查看OSD运行情况

OSD状态:

ceph osd stat      #OSD状态
ceph osd dump      #查看OSD的状态
ceph osd dump <ID> #查看指定的OSD的状态
ceph osd tree      #OSD目录树
ceph df            #查看使用情况

OSD节点:

lsblk
systemctl status ceph-osd@0

OSD端口:

netstat -tunlp | grep osd

原创文章禁止转载:技术学堂 » 分布式云存储Ceph部署方法

精彩评论

2+1=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏