环境

两个节点:ceph0、ceph1

ceph0: mon.a、mds、mgr、osd.0、osd.1
ceph1: mon.b、osd.2、osd.3

操作系统:ubuntu14.04

网络配置:

ceph1: 管理网络,eth0,192.168.31.100
       存储网络,eth1, 172.16.31.100
ceph2: 管理网络,eth0,192.168.31.101
       存储网络,eth1, 172.16.31.101

安装

root@:~# wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
root@:~# echo deb http://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
root@:~# apt-get update && apt-get upgrade
root@:~# apt-get install ceph-mds ceph

部署mon

两台机器都部署mon: a、b

mon.a

配置:

[global]
max open files = 131072
fsid = a7f64266-0894-4f1e-a635-d0aeaca0e993
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 1024
osd pool default pgp num = 1024
osd crush chooseleaf type = 1
mon osd full ratio = .95
mon osd nearfull ratio = .85
public network = 192.168.31.0/24
cluster network = 172.168.31.0/24
[mon]
mon initial members = a
mon data = /var/lib/ceph/mon/$cluster-$id
mon allow pool delete = true
[mon.a]
host = ceph0
mon addr = 192.168.31.100:6789

为群集创建密钥环, 并生成monitor secret key:

root@:~# sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

生成管理员密钥环,生成client.admin用户并将该用户添加到密钥环:

root@:~#  sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

生成bootstrap-osd密钥环,生成一个client.bootstrap-osd用户并将该用户添加到密钥环:

root@:~#  sudo -u ceph ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'

将管理员密钥环、bootstrap-osd密钥环添加到ceph.mon.keyring:

root@:~#  sudo -u ceph ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring 
root@:~#  sudo -u ceph ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

用规划好的主机名、对应IP地址、和 fsid 生成一个monitor map,并保存为 /etc/ceph/monmap:

root@:~#  sudo -u ceph monmaptool --create --add a 192.168.31.100 --fsid a7f64266-0894-4f1e-a635-d0aeaca0e993 /etc/ceph/monmap 

创建monitor数据目录:

root@:~#  sudo -u ceph mkdir /var/lib/ceph/mon/ceph-a

用monitor map和密钥环初始化数据:

root@:~# sudo -u ceph ceph-mon --cluster ceph --mkfs -i a --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring

启动mon.a:

root@:~# /etc/init.d/ceph start mon.a

mon.b

添加配置,并同步到新节点:

[mon]
mon initial members = a b
[mon.b]
host = ceph1
mon addr = 192.168.31.101:6789

/etc/ceph/monmap /etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.mon.keyring 也一起同步到新节点

获取集群已有的mon.keyring:

root@:~# sudo -u ceph ceph auth get mon. -o /tmp/mon.keyring

获取集群已有的mon.map:

root@:~# sudo -u ceph ceph mon get map -o /tmp/mon.map

将/tmp/mon.keyring、/tmp/mon.map同步到新节点

新节点创建mon目录:

root@:~# sudo -u ceph mkdir /var/lib/ceph/mon/ceph-b 

用monitor map和密钥环初始化新节点mon数据:

root@:~# sudo -u ceph ceph-mon --cluster ceph --mkfs -i b --monmap /tmp/mon.map  --keyring /tmp/mon.keyring 

#或者
root@:~# sudo -u ceph ceph-mon --cluster ceph --mkfs -i b --monmap /etc/ceph/monmap  --keyring /etc/ceph/ceph.mon.keyring

启动新节点:

root@:~# /etc/init.d/ceph start mon.b 

查看:

root@:~# ceph -s 
  services:
    mon: 2 daemons, quorum a,b

部署OSD

配置:

[osd.0]
host =  ceph0
devs = /dev/sdb1
public addr = 192.168.31.100
cluster addr = 172.16.31.100
[osd.1]
host =  ceph0
devs = /dev/sdc1
public addr = 192.168.31.100
cluster addr = 172.16.31.100
[osd.2]
host =  ceph1
devs = /dev/sdb1
public addr = 192.168.31.101
cluster addr = 172.16.31.101
[osd.3]
host =  ceph1
devs = /dev/sdc1
public addr = 192.168.31.101
cluster addr = 172.16.31.101

将配置文件同步到各个OSD节点,同时需要同步:

/etc/ceph/ceph.client.admin.keyring

/var/lib/ceph/bootstrap-osd/ceph.keyring

/etc/ceph/ceph.mon.keyring

方法一:

每个节点都xfs格式化好硬盘并挂载并挂载到对应的OSD目录

root@ceph0:~# mkfs.xfs  /dev/sdb1 
root@ceph0:~# mkfs.xfs  /dev/sdc1 
root@ceph0:~# mkdir -p /var/lib/ceph/osd/ceph-0/
root@ceph0:~# mkdir -p /var/lib/ceph/osd/ceph-1/
root@ceph0:~# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0/
root@ceph0:~# mount /dev/sdc1 /var/lib/ceph/osd/ceph-1/

部署osd.0

ps:无论osd在哪个节点上,ceph osd create都要在mon所在服务器上执行

root@ceph0:~# ceph osd create 
root@ceph0:~# ceph-osd -i 0 --mkfs --mkkey   
root@ceph0:~# ceph auth add osd.0 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-0/keyring 
root@ceph0:~# ceph osd crush add osd.0 0.2 root=default host=ceph1
root@ceph0:~# ceph-osd -i 0

同理部署其他osd

ps: 不同服务器时,需先复制ceph.conf到对应服务器上

root@ceph0:~# ceph osd tree
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 0.79999 root default                                     
-2 0.39999     host ceph1                                   
 0 0.20000         osd.0       up  1.00000          1.00000 
 1 0.20000         osd.1       up  1.00000          1.00000 
-3 0.39999     host ceph2                                   
 2 0.20000         osd.2       up  1.00000          1.00000 
 3 0.20000         osd.3       up  1.00000          1.00000 

方法二:

方法二直接参考自官网:https://docs.ceph.com/docs/master/install/manual-deployment/

为OSD生成UUID:

root@ceph0:~# UUID=$(uuidgen)

为OSD生成一个cephx密钥:

root@ceph0:~# OSD_SECRET=$(ceph-authtool --gen-print-key)

创建OSD:

root@ceph0:~# ID=$(echo "{\"cephx_secret\": \"$OSD_SECRET\"}" | \
ceph osd new $UUID -i - \
-n client.bootstrap-osd -k /var/lib/ceph/bootstrap-osd/ceph.keyring)

创建OSD数据目录,并格式化挂载设备到数据目录

root@ceph0:~# mkdir /var/lib/ceph/osd/ceph-$ID
root@ceph0:~# mkfs.xfs /dev/${DEV}
root@ceph0:~# mount /dev/${DEV} /var/lib/ceph/osd/ceph-$ID

将秘钥写入OSD keyring文件:

root@ceph0:~# ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-$ID/keyring \
--name osd.$ID --add-key $OSD_SECRET

初始化OSD数据目录

root@ceph0:~# ceph-osd -i $ID --mkfs --osd-uuid $UUID
root@ceph0:~# chown -R ceph:ceph /var/lib/ceph/osd/ceph-$ID

启动OSD:

root@ceph0:~# ceph-osd -i $ID #或者:/etc/init.d/ceph start osd.$ID

查看:

root@ceph0:~# ceph osd tree
ID CLASS WEIGHT  TYPE NAME      STATUS REWEIGHT PRI-AFF 
-1       0.34639 root default                           
-2       0.24879     host ceph0                         
 0   hdd 0.20000         osd.0      up  1.00000 1.00000 
 1   hdd 0.04880         osd.1      up  1.00000 1.00000 
-5       0.09760     host ceph1                         
 2   hdd 0.04880         osd.2      up  1.00000 1.00000 
 3   hdd 0.04880         osd.3      up  1.00000 1.00000 

OSD应用:

创建存储池:

root@ceph0:~# rados mkpool database_pool

在该存储池里新建镜像:

root@ceph0r:~# rbd create database_pool/db0 --size 4096 --image-feature layering

映射到块设备中:

root@ceph0ter:~# rbd map database_pool/db0
/dev/rbd0
root@ceph0:~# rbd showmapped 
id pool          image snap device    
0  database_pool db0   -    /dev/rbd0 

格式化并挂载:

root@ceph0:~# mkfs.xfs /dev/rbd0 
root@ceph0:~# mount /dev/rbd0 /rbdfs

部署mgr

配置:

[mgr]
mgr modules = dashboard balancer
mgr data = /var/lib/ceph/mgr/$cluster-$id

创建mgr数据目录:

root@:~# sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-m/

create an authentication key for your daemon:

root@:~# sudo -u ceph ceph auth get-or-create mgr.m  mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-m/keyring

启动mgr:

root@:~# ceph-mgr --cluster ceph  -i m

列出mgr module

root@:~# ceph mgr module ls
{
    "enabled_modules": [
        "balancer",
        "restful",
        "status"
    ],
    "disabled_modules": [
        "dashboard",
        "influx",
        "localpool",
        "prometheus",
        "selftest",
        "zabbix"
    ]
}

启用dashboard

root@:~#  ceph mgr module enable dashboard

列出由mgr模块提供的服务endpoint

root@:~# ceph mgr services
{
    "dashboard": "http://ceph0:7000/"
}

部署mds

配置:

[mds.m]
host = ceph0

创建mgs数据目录:

root@:~#  sudo -u ceph mkdir -p /var/lib/ceph/mds/ceph-m/

创建秘钥环:

root@:~#   ceph-authtool --create-keyring /var/lib/ceph/mds/ceph-m/keyring --gen-key -n mds.m

导入秘钥环:

root@:~# ceph auth add mds.m osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/ceph-m/keyring

启动mds:

root@:~# ceph-mds --cluster ceph -i m -m 192.168.31.100:6789  

cephfs应用:

新建cephfs:

root@ceph0:~# ceph osd pool create cephfs_data 64
root@ceph0:~# ceph osd pool create cephfs_m 16
root@ceph0:~# ceph fs new mycephfs cephfs_m cephfs_data 
root@ceph0:~# ceph fs ls
name: mycephfs, metadata pool: cephfs_m, data pools: [cephfs_data ]

挂载:

root@ceph0:~# mount -t ceph 192.168.31.100:6789:/ /cephfs/ -o name=admin,secret=$(cat /etc/ceph/ceph.client.admin.keyring  | grep -A1 "\[client.admin\]" | awk -F"[ =]+" '/key/{print $2}')

因为开启了cephx认证,所以mount需要添加-o name=admin,secret=xxxx进行认证,否者直接挂载会报如下错误:

root@ceph0:~# mount -t ceph 192.168.31.100:6789:/ /cephfs/
mount error 22 = Invalid argument
root@ceph0:~# dmesg | tail
[346660.559547] libceph: error -22 on auth protocol 2 init
[346660.560991] libceph: client24278 fsid a7f64266-0894-4f1e-a635-d0aeaca0e993

一些报错的解决

rbd: map failed: (110) Connection timed out:

root@ceph0:~# rbd map database-pool/db1 
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (110) Connection timed out
root@ceph0:~# dmesg | tail
[343915.358184] libceph: mon1 192.168.31.101:6789 feature set mismatch, my 106b84a842a42 < server's 40106b84a842a42, missing 400000000000000
[343915.363139] libceph: mon1 192.168.31.101:6789 missing required protocol features

解决:

root@ceph0:~# ceph osd pool set database-pool  hashpspool false  --yes-i-really-mean-it 
set pool 3 hashpspool to false
root@ceph0:~# 
root@ceph0:~# rbd map database-pool/db1                             
/dev/rbd0

参考链接:http://cephnotes.ksperis.com/blog/2014/01/21/feature-set-mismatch-error-on-ceph-kernel-client

另一种解决方式,用nbd:

root@ceph0:~# apt-get install rbd-nbd
root@ceph0:~# rbd-nbd map db_pool/db0
/dev/nbd0

参考链接:

https://blog.csdn.net/ygtlovezf/article/details/79107755

https://www.jianshu.com/p/bb9d14bd897c

Ceph集群部署(基于Luminous版)的更多相关文章

  1. ceph集群部署(基于jewel版)

    环境 两个节点:ceph1.ceph2 ceph1: mon.mds.osd.0.osd.1 ceph2: osd.2.osd.3 网络配置: ceph1: 管理网络,eth0,10.0.0.20 存 ...

  2. 分布式存储系统之Ceph集群部署

    前文我们了解了Ceph的基础架构和相关组件的介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16720234.html:今天我们来部署一个ceph集群: 部 ...

  3. ceph集群部署

    最近在学习 kubernetes 过程中,想实现 pod 数据的持久化.在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业.在选型方面,个人更加倾向于社区火热的项目,Gluste ...

  4. 基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。

    1.ceph简介 Ceph在一个统一的系统中独特地提供对象.块和文件存储 1.1 ceph官网架构图 1.2 架构解释   CEPH 对象存储 CEPH 块设备 CEPH 文件系统 RESTful 接 ...

  5. 理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  6. openstack(pike 版)集群部署(一)----基础环境部署

    一.环境 1.系统: a.CentOS Linux release 7.4.1708 (Core) b.更新yum源和安装常用软件 #  yum -y install  epel-release ba ...

  7. 2.Ceph 基础篇 - 集群部署及故障排查

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485243&idx=1&sn=e425c31a ...

  8. 分布式存储ceph集群实践

    1.环境规划,三台主机 10.213.14.51/24            10.213.14.52/24       10.213.14.53/24    集群网络 172.140.140.11. ...

  9. ceph集群

    ceph集群部署 ceph理解: Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.其他具体介绍可见官网简介:http://docs.cep ...

随机推荐

  1. 013 Enhancer创建动态代理

    在上一章使用了Enhancer,没有仔细说明代理的问题,在这一章进行详细的说明. 原本想使用cf包的,后来发现使用framework包下的包也没有问题,程序中就一直使用framework中的类. 一: ...

  2. Mybatis源码研究7:缓存的设计和实现

    Mybatis源码研究7:缓存的设计和实现 2014年11月19日 21:02:14 酷酷的糖先森 阅读数:1020   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  3. QStackedWidget居中布局

    QStackedWidget* m_pStackedWidget= new QStackedWidget(this); QWidget* btnWidget = new QWidget; QWidge ...

  4. 关于PLSQL配置了正确的Oracle客户端但是不能识别tnsnames.ora问题

    场景描述: 在通过安装Oracle客户端使用PLSQL的时候发现PLSQL在已经正常配置了Oracle Home和Ocdi library的情况下不能识别tnsnames.ora中的有效配置. 正常安 ...

  5. Java获取执行进程的dump文件及获取Java stack

    转发自https://blog.csdn.net/MCC_MCC_MCC/article/details/80623156 1.Windows/Linux环境下查看Java进程ID方法 使用Java自 ...

  6. Kubernetes 使用 ingress 配置 https 集群(十五)

    目录 一.背景 1.1 需求 1.2 Ingress 1.3 环境介绍 二.安装部署 2.1.创建后端 Pod 应用 2.2 创建后端 Pod Service 2.3.创建 ingress 资源 2. ...

  7. vs中调试程序查看变量在内存中的内容的方法

    vs中调试程序 查看变量在内存中的内容的方法 https://blog.csdn.net/guojg1988/article/details/42922149 原文链接:http://www.sows ...

  8. Android刘海屏适配 ----- ImmersionBar

    android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换.刘海屏.软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity.Fr ...

  9. Python 推导式详解

    各种推导式详解 推导式的套路 之前我们已经学习了最简单的列表推导式和生成器表达式.但是除此之外,其实还有字典推导式.集合推导式等等. 下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. ...

  10. python基础(二)-- 列表、字典、集合、字符串操作

    4.列表: 基本操作: 索引 切片 追加 删除 长度 切片 循环 包含 import copy i=0 #persons=['dailaoban','xiekeng',['age',100,50],' ...