Ceph Jewel 10.2.3 环境部署

Ceph 测试环境部署

本文档内容概要

  • 测试环境ceph集群部署规划
  • 测试环境ceph集群部署过程及块设备使用流程
  • mon节点扩容及osd节点扩容方法
  • 常见问题及解决方法

由于暂时没有用到对象存储,所以暂时没有配对象存储的网关。

回答:为什么docker里用到ceph?

环境里面每台机器挂载了个1T的数据盘,为了充分利用集群里所有数据磁盘的空间,使用ceph构建分布式环境,将数据盘联合到一起,看成一个盘。当然,这个主要是ceph的快存储功能。

集群部署规划

主机角色规划

主机名 系统 内核版本 IP地址 角色 部署服务
docker-rancher-server CentOS 7.1.1503 3.10.0-229 10.142.246.2 mon、osd
docker-rancher-client1 CentOS 7.1.1503 3.10.0-229 10.142.246.3 mon、osd
docker-rancher-client2 CentOS 7.1.1503 3.10.0-229 10.142.246.4 osd
hub.chinatelecom.cn CentOS 7.1.1503 3.10.0-229 10.142.246.5 osd

部署架构图

集群基础环境准备

基础环境是所有节点都需要做的,以下主要以docker-rancher-server为例做,其他三台雷同

0. 检查系统版本信息

四台机器都是一样的虚拟机,其中一台版本信息如下:

[op@docker-rancher-server ~]$ cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 
[op@docker-rancher-server ~]$ uname -r
3.10.0-229.el7.x86_64

1. 做域名解析

[op@docker-rancher-server ~]$ cat /etc/hosts
10.142.246.2  docker-rancher-server
10.142.246.3  docker-rancher-client1
10.142.246.4  docker-rancher-client2
10.142.246.5  hub.chinatelecom.cn    hub

2. 防火墙策略

ceph默认使用的端口

Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信,CentOS7默认使用的是firewall作为防火墙,不过我们已经改为iptables,所以直接在iptables里开放对应端口。

# 命令格式
sudo iptables -A INPUT -i {iface} -p tcp -s {ip-address}/{netmask} --dport 6789 -j ACCEPT
# 实战
[op@docker-rancher-server ~]$ sudo iptables -A INPUT -i eth0 -p tcp -s 10.142.0.0/16 --dport 6789 -j ACCEPT
[op@docker-rancher-server ~]$ sudo iptables -A INPUT -i eth0 -p tcp -s 10.142.0.0/16 --dport 6800:7300 -j ACCEPT
# 验证
[op@docker-rancher-server ~]$ sudo iptables -L
[op@docker-rancher-server ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:zabbix-agent
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8514
ACCEPT     udp  --  anywhere             anywhere             udp dpt:8514
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:shell
ACCEPT     udp  --  anywhere             anywhere             udp dpt:ipsec-nat-t
ACCEPT     udp  --  anywhere             anywhere             udp dpt:isakmp
ACCEPT     tcp  --  10.142.0.0/16        anywhere             tcp dpt:smc-https
ACCEPT     tcp  --  10.142.0.0/16        anywhere             tcp dpts:6800:7300
# 保存当前策略
[op@docker-rancher-server ~]$ sudo service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]

可以看到有有两条规则开放了相应端口

3. NTP时间同步

选用docker-rancher-server作为NTP时间服务器基准,其它三台同步时间到docker-rancher-server上

# 安装NTP服务,所有节点都需要
[op@docker-rancher-server ~]$ sudo yum install ntp -y
[op@docker-rancher-server ~]$ sudo vim /etc/ntp.conf 
# 允许内网其他机器同步时间
restrict 10.142.0.0 mask 255.255.0.0 nomodify notrap

server 10.142.246.2

# 外部时间服务器不可用时,以本地时间作为时间服务
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

# 另外把其他的server都注释掉

# 启动服务
[op@docker-rancher-server ~]$ sudo systemctl restart  ntpd.service

# 等上几分钟,看到
[op@docker-rancher-server ~]$ ntpstat
synchronised to local net at stratum 11 
   time correct to within 7948 ms
   polling server every 64 s
[op@docker-rancher-server ~]$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 docker-rancher- .INIT.          16 u    -   64    0    0.000    0.000   0.000
*LOCAL(0)        .LOCL.          10 l   19   64    3    0.000    0.000   0.000

# 把配置文件分发到其他几个节点
# 启动服务
[op@docker-rancher-server ~]$ sudo systemctl restart  ntpd.service
# 此处要等很久,可以先处理后面的,后期再来查看
[op@docker-rancher-client1 ~]$ ntpstat
synchronised to NTP server (10.142.246.2) at stratum 12 
   time correct to within 29 ms
   polling server every 1024 s
[op@docker-rancher-client1 ~]$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*docker-rancher- LOCAL(0)        11 u   51  512  377    1.700    1.735   1.302
 LOCAL(0)        .LOCL.          10 l 220m   64    0    0.000    0.000   0.000

4. 导入epel、ceph源

关于epel源,ceph源的制作,请看同步各种源一文。

之前我已经把epel的源放进去了,检查配置一下

[op@docker-rancher-server yum.repos.d]$ sudo vim /etc/yum.repos.d/epel.repo 
[epel]
name=Extra Packages for Enterprise Linux 7 - x86_64
baseurl=http://10.142.78.40/epel/7/x86_64
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=http://10.142.78.40/epel/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - x86_64 - Debug
baseurl=http://10.142.78.40/epel/7/x86_64/debug
failovermethod=priority
enabled=0
gpgkey=http://10.142.78.40/epel/RPM-GPG-KEY-EPEL-7
gpgcheck=1
priority=2

# 验证
[op@docker-rancher-server ~]$ yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识    源名称                                            状态
base      RHEL-7 - Base - http                               8,652
epel      Extra Packages for Enterprise Linux 7 - x86_64    10,846
updates   CentOS-7 - Updates                                 3,723
repolist: 23,221

Ceph的源也已经放在公司内部了,添加一下

[op@docker-rancher-server ~]$ sudo vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for x86_64
baseurl=http://10.142.78.40/ceph/rpm-jewel/el7/x86_64
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://10.142.78.40/ceph/keys/release.asc
priority=1

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://10.142.78.40/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://10.142.78.40/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://10.142.78.40/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=http://10.142.78.40/ceph/keys/release.asc
priority=1

# 验证
[op@docker-rancher-server ~]$ yum repolist
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
源标识      源名称                                          状态
base        RHEL-7 - Base - http                             8,652
ceph        Ceph packages for x86_64                           231
ceph-noarch Ceph noarch packages                                12
ceph-source Ceph source packages                                 0
epel        Extra Packages for Enterprise Linux 7 - x86_64  10,846
updates     CentOS-7 - Updates                               3,723
repolist: 23,464

5. 创建ceph以外的用户

默认公司的服务器有op用户,不需要再创建

另外,一定要赋给sudo权限

6. 节点直接无密钥访问

此处比较简单,不再赘述

另外,官网推荐配置一下 ~/.ssh/config 文件。,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了,而无需每次执行 ceph-deploy 都要指定 --username {username} 。这样做同时也简化了 ssh 和scp 的用法。

[op@docker-rancher-server ~]$ vim ~/.ssh/config
Host ceph-node1   # 相当于别名
   Hostname docker-rancher-server  # 实际主机名
   User op						# 实际连接时用户
Host ceph-node2
   Hostname docker-rancher-client1
   User op
Host ceph-node3
   Hostname docker-rancher-client2
   User op
Host ceph-node4
   Hostname hub.chinatelecom.cn
   User op
   
# 更改一下权限,一定要更改,否则不能用
[op@docker-rancher-server ~]$ chmod 600 .ssh/*

# 此处更改的意义在于,比如我使用root用户登录,配置一下config文件,可以使用root时用op连接

7. 设置了 requiretty

在 CentOS 和 RHEL 上执行 ceph-deploy 命令时可能会报错。如果你的 Ceph 节点默认设置了 requiretty ,执行 sudo visudo 禁用它,并找到 Defaults requiretty 选项,把它改为 Defaults:ceph !requiretty 或者直接注释掉,这样 ceph-deploy 就可以用之前创建的用户(创建部署 Ceph 的用户 )连接了。

# 所有节点执行,直接注掉
[op@docker-rancher-server ~]$ sudo vim /etc/sudoers
# Defaults    requiretty

8. 禁用selinux

vim /etc/selinux/config
SELINUX=disabled
# 立即生效
[op@ceph-node1 ~]$ sudo setenforce 0

9. 安装ceph-deploy

yum install ceph-deploy -y

集群环境部署

参考网站:ceph官网

以下在admin上操作

Important:如果你是用另一普通用户登录的,不要用 sudo 或在 root 身份运行 ceph-deploy ,因为它不会在远程主机上调用所需的 sudo 命令。

1. 创建集群

# 建立集群目录,未来一些配置文件会生成在这个目录下
[op@docker-rancher-server ~]$ mkdir ceph && cd ceph
# 创建monitor(至少一个)
[op@ceph-node1 ceph]$ ceph-deploy new docker-rancher-server docker-rancher-client1

# 验证是否产生配置文件
[op@docker-rancher-server ceph]$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

# 修改默认配置文件
vim ceph.conf
osd pool default min sisz=2
osd pool default size = 3

# 如果有多块网卡,可以配置数据交互使用万兆网卡,测试暂时不具备相应条件
# mon_clock_drift_allowed=5  # 单位是ms
# osd_pool_default_crush_rule=0
# osd_crush_chooseleaf_type=1
# public network=10.10.0.0/24  # 公网IP地址
# cluster network=192.168.0.0/24 # 内网IP地址

2. 安装ceph

[op@docker-rancher-server ceph]$ ceph-deploy install docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn
ceph_deploy.conf][DEBUG ] found configuration file at: /usr/op/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy install docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  testing                       : None
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f87fd8a7d40>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  dev_commit                    : None
[ceph_deploy.cli][INFO  ]  install_mds                   : False
[ceph_deploy.cli][INFO  ]  stable                        : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  adjust_repos                  : True
[ceph_deploy.cli][INFO  ]  func                          : <function install at 0x7f87fe79a578>
[ceph_deploy.cli][INFO  ]  install_all                   : False
[ceph_deploy.cli][INFO  ]  repo                          : False
[ceph_deploy.cli][INFO  ]  host                          : ['docker-rancher-server', 'docker-rancher-client1', 'docker-rancher-client2', 'hub.chinatelecom.cn']
[ceph_deploy.cli][INFO  ]  install_rgw                   : False
[ceph_deploy.cli][INFO  ]  install_tests                 : False
[ceph_deploy.cli][INFO  ]  repo_url                      : None
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  install_osd                   : False
[ceph_deploy.cli][INFO  ]  version_kind                  : stable
[ceph_deploy.cli][INFO  ]  install_common                : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  dev                           : master
[ceph_deploy.cli][INFO  ]  nogpgcheck                    : False
[ceph_deploy.cli][INFO  ]  local_mirror                  : None
[ceph_deploy.cli][INFO  ]  release                       : None
[ceph_deploy.cli][INFO  ]  install_mon                   : False
[ceph_deploy.cli][INFO  ]  gpg_url                       : None
[ceph_deploy.install][DEBUG ] Installing stable version jewel on cluster ceph hosts docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn
[ceph_deploy.install][DEBUG ] Detecting platform for host docker-rancher-server ...
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[ceph_deploy.install][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[docker-rancher-server][INFO  ] installing Ceph on docker-rancher-server
******
[hub.chinatelecom.cn][INFO  ] Running command: sudo ceph --version
[hub.chinatelecom.cn][DEBUG ] ceph version 10.2.3 (ecc23778eb545d8dd55e2e4735b53cc93f92e65b)

初始化集群

[op@docker-rancher-server ceph]$ ceph-deploy mon create-initial
[ceph_deploy.conf][DEBUG ] found configuration file at: /usr/op/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy mon create-initial
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create-initial
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0xd5c710>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mon at 0xd541b8>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  keyrings                      : None
[ceph_deploy.mon][DEBUG ] Deploying mon, cluster ceph hosts docker-rancher-server docker-rancher-client1
[ceph_deploy.mon][DEBUG ] detecting platform for host docker-rancher-server ...
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] find the location of an executable
[ceph_deploy.mon][INFO  ] distro info: CentOS Linux 7.1.1503 Core
[docker-rancher-server][DEBUG ] determining if provided host has same hostname in remote
[docker-rancher-server][DEBUG ] get remote short hostname
[docker-rancher-server][DEBUG ] deploying mon to docker-rancher-server
[docker-rancher-server][DEBUG ] get remote short hostname
[docker-rancher-server][DEBUG ] remote hostname: docker-rancher-server
[docker-rancher-server][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[docker-rancher-server][DEBUG ] create the mon path if it does not exist
[docker-rancher-server][DEBUG ] checking for done path: /var/lib/ceph/mon/ceph-docker-rancher-server/done
[docker-rancher-server][DEBUG ] done path does not exist: /var/lib/ceph/mon/ceph-docker-rancher-server/done
[docker-rancher-server][INFO  ] creating keyring file: /var/lib/ceph/tmp/ceph-docker-rancher-server.mon.keyring
[docker-rancher-server][DEBUG ] create the monitor keyring file
[docker-rancher-server][INFO  ] Running command: sudo ceph-mon --cluster ceph --mkfs -i docker-rancher-server --keyring /var/lib/ceph/tmp/ceph-docker-rancher-server.mon.keyring --setuser 167 --setgroup 167
[docker-rancher-server][DEBUG ] ceph-mon: mon.noname-a 10.142.246.2:6789/0 is local, renaming to mon.docker-rancher-server
[docker-rancher-server][DEBUG ] ceph-mon: set fsid to ef81681c-ee15-412e-a752-2c3e87b9e369
[docker-rancher-server][DEBUG ] ceph-mon: created monfs at /var/lib/ceph/mon/ceph-docker-rancher-server for mon.docker-rancher-server
[docker-rancher-server][INFO  ] unlinking keyring file /var/lib/ceph/tmp/ceph-docker-rancher-server.mon.keyring
[docker-rancher-server][DEBUG ] create a done file to avoid re-doing the mon deployment
[docker-rancher-server][DEBUG ] create the init path if it does not exist
[docker-rancher-server][INFO  ] Running command: sudo systemctl enable ceph.target
[docker-rancher-server][INFO  ] Running command: sudo systemctl enable ceph-mon@docker-rancher-server
[docker-rancher-server][WARNIN] Created symlink from /etc/systemd/system/ceph-mon.target.wants/ceph-mon@docker-rancher-server.service to /usr/lib/systemd/system/ceph-mon@.service.
[docker-rancher-server][INFO  ] Running command: sudo systemctl start ceph-mon@docker-rancher-server
[docker-rancher-server][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-server.asok mon_status
[docker-rancher-server][DEBUG ] ********************************************************************************
[docker-rancher-server][DEBUG ] status for monitor: mon.docker-rancher-server
[docker-rancher-server][DEBUG ] {
[docker-rancher-server][DEBUG ]   "election_epoch": 0, 
[docker-rancher-server][DEBUG ]   "extra_probe_peers": [
[docker-rancher-server][DEBUG ]     "10.142.246.3:6789/0"
[docker-rancher-server][DEBUG ]   ], 
[docker-rancher-server][DEBUG ]   "monmap": {
[docker-rancher-server][DEBUG ]     "created": "2016-11-28 12:38:30.861132", 
[docker-rancher-server][DEBUG ]     "epoch": 0, 
[docker-rancher-server][DEBUG ]     "fsid": "ef81681c-ee15-412e-a752-2c3e87b9e369", 
[docker-rancher-server][DEBUG ]     "modified": "2016-11-28 12:38:30.861132", 
[docker-rancher-server][DEBUG ]     "mons": [
[docker-rancher-server][DEBUG ]       {
[docker-rancher-server][DEBUG ]         "addr": "10.142.246.2:6789/0", 
[docker-rancher-server][DEBUG ]         "name": "docker-rancher-server", 
[docker-rancher-server][DEBUG ]         "rank": 0
[docker-rancher-server][DEBUG ]       }, 
[docker-rancher-server][DEBUG ]       {
[docker-rancher-server][DEBUG ]         "addr": "0.0.0.0:0/1", 
[docker-rancher-server][DEBUG ]         "name": "docker-rancher-client1", 
[docker-rancher-server][DEBUG ]         "rank": 1
[docker-rancher-server][DEBUG ]       }
[docker-rancher-server][DEBUG ]     ]
[docker-rancher-server][DEBUG ]   }, 
[docker-rancher-server][DEBUG ]   "name": "docker-rancher-server", 
[docker-rancher-server][DEBUG ]   "outside_quorum": [
[docker-rancher-server][DEBUG ]     "docker-rancher-server"
[docker-rancher-server][DEBUG ]   ], 
[docker-rancher-server][DEBUG ]   "quorum": [], 
[docker-rancher-server][DEBUG ]   "rank": 0, 
[docker-rancher-server][DEBUG ]   "state": "probing", 
[docker-rancher-server][DEBUG ]   "sync_provider": []
[docker-rancher-server][DEBUG ] }
[docker-rancher-server][DEBUG ] ********************************************************************************
[docker-rancher-server][INFO  ] monitor: mon.docker-rancher-server is running
[docker-rancher-server][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-server.asok mon_status
[ceph_deploy.mon][DEBUG ] detecting platform for host docker-rancher-client1 ...
[docker-rancher-client1][DEBUG ] connection detected need for sudo
[docker-rancher-client1][DEBUG ] connected to host: docker-rancher-client1 
[docker-rancher-client1][DEBUG ] detect platform information from remote host
[docker-rancher-client1][DEBUG ] detect machine type
[docker-rancher-client1][DEBUG ] find the location of an executable
[ceph_deploy.mon][INFO  ] distro info: CentOS Linux 7.1.1503 Core
[docker-rancher-client1][DEBUG ] determining if provided host has same hostname in remote
[docker-rancher-client1][DEBUG ] get remote short hostname
[docker-rancher-client1][DEBUG ] deploying mon to docker-rancher-client1
[docker-rancher-client1][DEBUG ] get remote short hostname
[docker-rancher-client1][DEBUG ] remote hostname: docker-rancher-client1
[docker-rancher-client1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[docker-rancher-client1][DEBUG ] create the mon path if it does not exist
[docker-rancher-client1][DEBUG ] checking for done path: /var/lib/ceph/mon/ceph-docker-rancher-client1/done
[docker-rancher-client1][DEBUG ] done path does not exist: /var/lib/ceph/mon/ceph-docker-rancher-client1/done
[docker-rancher-client1][INFO  ] creating keyring file: /var/lib/ceph/tmp/ceph-docker-rancher-client1.mon.keyring
[docker-rancher-client1][DEBUG ] create the monitor keyring file
[docker-rancher-client1][INFO  ] Running command: sudo ceph-mon --cluster ceph --mkfs -i docker-rancher-client1 --keyring /var/lib/ceph/tmp/ceph-docker-rancher-client1.mon.keyring --setuser 167 --setgroup 167
[docker-rancher-client1][DEBUG ] ceph-mon: mon.noname-b 10.142.246.3:6789/0 is local, renaming to mon.docker-rancher-client1
[docker-rancher-client1][DEBUG ] ceph-mon: set fsid to ef81681c-ee15-412e-a752-2c3e87b9e369
[docker-rancher-client1][DEBUG ] ceph-mon: created monfs at /var/lib/ceph/mon/ceph-docker-rancher-client1 for mon.docker-rancher-client1
[docker-rancher-client1][INFO  ] unlinking keyring file /var/lib/ceph/tmp/ceph-docker-rancher-client1.mon.keyring
[docker-rancher-client1][DEBUG ] create a done file to avoid re-doing the mon deployment
[docker-rancher-client1][DEBUG ] create the init path if it does not exist
[docker-rancher-client1][INFO  ] Running command: sudo systemctl enable ceph.target
[docker-rancher-client1][INFO  ] Running command: sudo systemctl enable ceph-mon@docker-rancher-client1
[docker-rancher-client1][WARNIN] Created symlink from /etc/systemd/system/ceph-mon.target.wants/ceph-mon@docker-rancher-client1.service to /usr/lib/systemd/system/ceph-mon@.service.
[docker-rancher-client1][INFO  ] Running command: sudo systemctl start ceph-mon@docker-rancher-client1
[docker-rancher-client1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-client1.asok mon_status
[docker-rancher-client1][DEBUG ] ********************************************************************************
[docker-rancher-client1][DEBUG ] status for monitor: mon.docker-rancher-client1
[docker-rancher-client1][DEBUG ] {
[docker-rancher-client1][DEBUG ]   "election_epoch": 2, 
[docker-rancher-client1][DEBUG ]   "extra_probe_peers": [
[docker-rancher-client1][DEBUG ]     "10.142.246.2:6789/0"
[docker-rancher-client1][DEBUG ]   ], 
[docker-rancher-client1][DEBUG ]   "monmap": {
[docker-rancher-client1][DEBUG ]     "created": "2016-11-28 12:38:30.861132", 
[docker-rancher-client1][DEBUG ]     "epoch": 1, 
[docker-rancher-client1][DEBUG ]     "fsid": "ef81681c-ee15-412e-a752-2c3e87b9e369", 
[docker-rancher-client1][DEBUG ]     "modified": "2016-11-28 12:38:30.861132", 
[docker-rancher-client1][DEBUG ]     "mons": [
[docker-rancher-client1][DEBUG ]       {
[docker-rancher-client1][DEBUG ]         "addr": "10.142.246.2:6789/0", 
[docker-rancher-client1][DEBUG ]         "name": "docker-rancher-server", 
[docker-rancher-client1][DEBUG ]         "rank": 0
[docker-rancher-client1][DEBUG ]       }, 
[docker-rancher-client1][DEBUG ]       {
[docker-rancher-client1][DEBUG ]         "addr": "10.142.246.3:6789/0", 
[docker-rancher-client1][DEBUG ]         "name": "docker-rancher-client1", 
[docker-rancher-client1][DEBUG ]         "rank": 1
[docker-rancher-client1][DEBUG ]       }
[docker-rancher-client1][DEBUG ]     ]
[docker-rancher-client1][DEBUG ]   }, 
[docker-rancher-client1][DEBUG ]   "name": "docker-rancher-client1", 
[docker-rancher-client1][DEBUG ]   "outside_quorum": [
[docker-rancher-client1][DEBUG ]     "docker-rancher-client1"
[docker-rancher-client1][DEBUG ]   ], 
[docker-rancher-client1][DEBUG ]   "quorum": [], 
[docker-rancher-client1][DEBUG ]   "rank": 1, 
[docker-rancher-client1][DEBUG ]   "state": "probing", 
[docker-rancher-client1][DEBUG ]   "sync_provider": []
[docker-rancher-client1][DEBUG ] }
[docker-rancher-client1][DEBUG ] ********************************************************************************
[docker-rancher-client1][INFO  ] monitor: mon.docker-rancher-client1 is running
[docker-rancher-client1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-client1.asok mon_status
[ceph_deploy.mon][INFO  ] processing monitor mon.docker-rancher-server
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] find the location of an executable
[docker-rancher-server][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-server.asok mon_status
[ceph_deploy.mon][INFO  ] mon.docker-rancher-server monitor has reached quorum!
[ceph_deploy.mon][INFO  ] processing monitor mon.docker-rancher-client1
[docker-rancher-client1][DEBUG ] connection detected need for sudo
[docker-rancher-client1][DEBUG ] connected to host: docker-rancher-client1 
[docker-rancher-client1][DEBUG ] detect platform information from remote host
[docker-rancher-client1][DEBUG ] detect machine type
[docker-rancher-client1][DEBUG ] find the location of an executable
[docker-rancher-client1][INFO  ] Running command: sudo ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.docker-rancher-client1.asok mon_status
[ceph_deploy.mon][INFO  ] mon.docker-rancher-client1 monitor has reached quorum!
[ceph_deploy.mon][INFO  ] all initial monitors are running and have formed quorum
[ceph_deploy.mon][INFO  ] Running gatherkeys...
[ceph_deploy.gatherkeys][INFO  ] Storing keys in temp directory /tmp/tmpCsnUv3
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] get remote short hostname
[docker-rancher-server][DEBUG ] fetch remote file
[docker-rancher-server][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --admin-daemon=/var/run/ceph/ceph-mon.docker-rancher-server.asok mon_status
[docker-rancher-server][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-docker-rancher-server/keyring auth get client.admin
[docker-rancher-server][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-docker-rancher-server/keyring auth get client.bootstrap-mds
[docker-rancher-server][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-docker-rancher-server/keyring auth get client.bootstrap-osd
[docker-rancher-server][INFO  ] Running command: sudo /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-docker-rancher-server/keyring auth get client.bootstrap-rgw
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO  ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO  ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO  ] Destroy temp directory /tmp/tmpCsnUv3

验证,应该产生下面几个文件

[op@docker-rancher-server ceph]$ ll
总用量 472
-rw------- 1 op op    113 11月 28 12:38 ceph.bootstrap-mds.keyring
-rw------- 1 op op    113 11月 28 12:38 ceph.bootstrap-osd.keyring
-rw------- 1 op op    113 11月 28 12:38 ceph.bootstrap-rgw.keyring
-rw------- 1 op op    129 11月 28 12:38 ceph.client.admin.keyring
-rw-rw-r-- 1 op op    302 11月 25 15:32 ceph.conf
-rw-rw-r-- 1 op op 422039 11月 28 12:38 ceph-deploy-ceph.log
-rw------- 1 op op     73 11月 25 15:31 ceph.mon.keyring

3. 增加OSD

由于测试环境的特殊性,本次安装暂时把一个目录(挂载的数据盘)作为OSD目录,未来生产环境要用磁盘来做。

准备工作

# 在所有节点创建目录
[op@docker-rancher-server data]$  sudo mkdir -p /data/ceph
# 更改权限,否则会报错
[op@docker-rancher-server data]$  sudo chown -R ceph:ceph /data/ceph

增加OSD

[op@docker-rancher-server ceph]$ ceph-deploy osd prepare  docker-rancher-server:/data/ceph docker-rancher-client1:/data/ceph docker-rancher-client2:/data/ceph hub.chinatelecom.cn:/data/ceph
[ceph_deploy.conf][DEBUG ] found configuration file at: /usr/op/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy osd prepare docker-rancher-server:/data/ceph docker-rancher-client1:/data/ceph docker-rancher-client2:/data/ceph hub.chinatelecom.cn:/data/ceph
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  disk                          : [('docker-rancher-server', '/data/ceph', None), ('docker-rancher-client1', '/data/ceph', None), ('docker-rancher-client2', '/data/ceph', None), ('hub.chinatelecom.cn', '/data/ceph', None)]
[ceph_deploy.cli][INFO  ]  dmcrypt                       : False
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  bluestore                     : None
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : prepare
[ceph_deploy.cli][INFO  ]  dmcrypt_key_dir               : /etc/ceph/dmcrypt-keys
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x15e97a0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  fs_type                       : xfs
[ceph_deploy.cli][INFO  ]  func                          : <function osd at 0x15dba28>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  zap_disk                      : False
[ceph_deploy.osd][DEBUG ] Preparing cluster ceph disks docker-rancher-server:/data/ceph: docker-rancher-client1:/data/ceph: docker-rancher-client2:/data/ceph: hub.chinatelecom.cn:/data/ceph:
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] Deploying osd to docker-rancher-server
[docker-rancher-server][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.osd][DEBUG ] Preparing host docker-rancher-server disk /data/ceph journal None activate False
[docker-rancher-server][DEBUG ] find the location of an executable
[docker-rancher-server][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /data/ceph
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --check-allows-journal -i 0 --cluster ceph
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --check-wants-journal -i 0 --cluster ceph
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --check-needs-journal -i 0 --cluster ceph
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=osd_journal_size
[docker-rancher-server][WARNIN] populate_data_path: Preparing osd data dir /data/ceph
[docker-rancher-server][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/ceph_fsid.68575.tmp
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/ceph_fsid.68575.tmp
[docker-rancher-server][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/fsid.68575.tmp
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/fsid.68575.tmp
[docker-rancher-server][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/magic.68575.tmp
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/magic.68575.tmp
[docker-rancher-server][INFO  ] checking OSD status...
[docker-rancher-server][DEBUG ] find the location of an executable
[docker-rancher-server][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host docker-rancher-server is now ready for osd use.
[docker-rancher-client1][DEBUG ] connection detected need for sudo
[docker-rancher-client1][DEBUG ] connected to host: docker-rancher-client1 
[docker-rancher-client1][DEBUG ] detect platform information from remote host
[docker-rancher-client1][DEBUG ] detect machine type
[docker-rancher-client1][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] Deploying osd to docker-rancher-client1
[docker-rancher-client1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.osd][DEBUG ] Preparing host docker-rancher-client1 disk /data/ceph journal None activate False
[docker-rancher-client1][DEBUG ] find the location of an executable
[docker-rancher-client1][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /data/ceph
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --check-allows-journal -i 0 --cluster ceph
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --check-wants-journal -i 0 --cluster ceph
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --check-needs-journal -i 0 --cluster ceph
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=osd_journal_size
[docker-rancher-client1][WARNIN] populate_data_path: Preparing osd data dir /data/ceph
[docker-rancher-client1][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/ceph_fsid.31263.tmp
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/ceph_fsid.31263.tmp
[docker-rancher-client1][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/fsid.31263.tmp
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/fsid.31263.tmp
[docker-rancher-client1][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/magic.31263.tmp
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/magic.31263.tmp
[docker-rancher-client1][INFO  ] checking OSD status...
[docker-rancher-client1][DEBUG ] find the location of an executable
[docker-rancher-client1][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host docker-rancher-client1 is now ready for osd use.
[docker-rancher-client2][DEBUG ] connection detected need for sudo
[docker-rancher-client2][DEBUG ] connected to host: docker-rancher-client2 
[docker-rancher-client2][DEBUG ] detect platform information from remote host
[docker-rancher-client2][DEBUG ] detect machine type
[docker-rancher-client2][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] Deploying osd to docker-rancher-client2
[docker-rancher-client2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[docker-rancher-client2][WARNIN] osd keyring does not exist yet, creating one
[docker-rancher-client2][DEBUG ] create a keyring file
[ceph_deploy.osd][DEBUG ] Preparing host docker-rancher-client2 disk /data/ceph journal None activate False
[docker-rancher-client2][DEBUG ] find the location of an executable
[docker-rancher-client2][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /data/ceph
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --check-allows-journal -i 0 --cluster ceph
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --check-wants-journal -i 0 --cluster ceph
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --check-needs-journal -i 0 --cluster ceph
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=osd_journal_size
[docker-rancher-client2][WARNIN] populate_data_path: Preparing osd data dir /data/ceph
[docker-rancher-client2][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/ceph_fsid.101240.tmp
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/ceph_fsid.101240.tmp
[docker-rancher-client2][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/fsid.101240.tmp
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/fsid.101240.tmp
[docker-rancher-client2][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/magic.101240.tmp
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/magic.101240.tmp
[docker-rancher-client2][INFO  ] checking OSD status...
[docker-rancher-client2][DEBUG ] find the location of an executable
[docker-rancher-client2][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host docker-rancher-client2 is now ready for osd use.
[hub.chinatelecom.cn][DEBUG ] connection detected need for sudo
[hub.chinatelecom.cn][DEBUG ] connected to host: hub.chinatelecom.cn 
[hub.chinatelecom.cn][DEBUG ] detect platform information from remote host
[hub.chinatelecom.cn][DEBUG ] detect machine type
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] Deploying osd to hub.chinatelecom.cn
[hub.chinatelecom.cn][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[hub.chinatelecom.cn][WARNIN] osd keyring does not exist yet, creating one
[hub.chinatelecom.cn][DEBUG ] create a keyring file
[ceph_deploy.osd][DEBUG ] Preparing host hub.chinatelecom.cn disk /data/ceph journal None activate False
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[hub.chinatelecom.cn][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v prepare --cluster ceph --fs-type xfs -- /data/ceph
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --check-allows-journal -i 0 --cluster ceph
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --check-wants-journal -i 0 --cluster ceph
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --check-needs-journal -i 0 --cluster ceph
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=osd_journal_size
[hub.chinatelecom.cn][WARNIN] populate_data_path: Preparing osd data dir /data/ceph
[hub.chinatelecom.cn][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/ceph_fsid.31875.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/ceph_fsid.31875.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/fsid.31875.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/fsid.31875.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/magic.31875.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/magic.31875.tmp
[hub.chinatelecom.cn][INFO  ] checking OSD status...
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[hub.chinatelecom.cn][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host hub.chinatelecom.cn is now ready for osd use.

激活OSD

[op@docker-rancher-server ceph]$  ceph-deploy osd activate  docker-rancher-server:/data/ceph docker-rancher-client1:/data/ceph docker-rancher-client2:/data/ceph hub.chinatelecom.cn:/data/ceph
[ceph_deploy.conf][DEBUG ] found configuration file at: /usr/op/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy osd activate docker-rancher-server:/data/ceph docker-rancher-client1:/data/ceph docker-rancher-client2:/data/ceph hub.chinatelecom.cn:/data/ceph
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : activate
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x28e87a0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function osd at 0x28daa28>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  disk                          : [('docker-rancher-server', '/data/ceph', None), ('docker-rancher-client1', '/data/ceph', None), ('docker-rancher-client2', '/data/ceph', None), ('hub.chinatelecom.cn', '/data/ceph', None)]
[ceph_deploy.osd][DEBUG ] Activating cluster ceph disks docker-rancher-server:/data/ceph: docker-rancher-client1:/data/ceph: docker-rancher-client2:/data/ceph: hub.chinatelecom.cn:/data/ceph:
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] activating host docker-rancher-server disk /data/ceph
[ceph_deploy.osd][DEBUG ] will use init type: systemd
[docker-rancher-server][DEBUG ] find the location of an executable
[docker-rancher-server][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /data/ceph
[docker-rancher-server][WARNIN] main_activate: path = /data/ceph
[docker-rancher-server][WARNIN] activate: Cluster uuid is ef81681c-ee15-412e-a752-2c3e87b9e369
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-server][WARNIN] activate: Cluster name is ceph
[docker-rancher-server][WARNIN] activate: OSD uuid is ad4397de-63cf-4d7d-84ce-947450b4780d
[docker-rancher-server][WARNIN] allocate_osd_id: Allocating OSD id...
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd create --concise ad4397de-63cf-4d7d-84ce-947450b4780d
[docker-rancher-server][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/whoami.69785.tmp
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/whoami.69785.tmp
[docker-rancher-server][WARNIN] activate: OSD id is 0
[docker-rancher-server][WARNIN] activate: Initializing OSD...
[docker-rancher-server][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /data/ceph/activate.monmap
[docker-rancher-server][WARNIN] got monmap epoch 1
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/timeout 300 ceph-osd --cluster ceph --mkfs --mkkey -i 0 --monmap /data/ceph/activate.monmap --osd-data /data/ceph --osd-journal /data/ceph/journal --osd-uuid ad4397de-63cf-4d7d-84ce-947450b4780d --keyring /data/ceph/keyring --setuser ceph --setgroup ceph
[docker-rancher-server][WARNIN] activate: Marking with init system systemd
[docker-rancher-server][WARNIN] activate: Authorizing OSD key...
[docker-rancher-server][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring auth add osd.0 -i /data/ceph/keyring osd allow * mon allow profile osd
[docker-rancher-server][WARNIN] added key for osd.0
[docker-rancher-server][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/active.69785.tmp
[docker-rancher-server][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/active.69785.tmp
[docker-rancher-server][WARNIN] activate: ceph osd.0 data dir is ready at /data/ceph
[docker-rancher-server][WARNIN] activate_dir: Creating symlink /var/lib/ceph/osd/ceph-0 -> /data/ceph
[docker-rancher-server][WARNIN] start_daemon: Starting ceph osd.0...
[docker-rancher-server][WARNIN] command_check_call: Running command: /usr/bin/systemctl enable ceph-osd@0
[docker-rancher-server][WARNIN] Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@0.service to /usr/lib/systemd/system/ceph-osd@.service.
[docker-rancher-server][WARNIN] command_check_call: Running command: /usr/bin/systemctl start ceph-osd@0
[docker-rancher-server][INFO  ] checking OSD status...
[docker-rancher-server][DEBUG ] find the location of an executable
[docker-rancher-server][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[docker-rancher-server][WARNIN] there is 1 OSD down
[docker-rancher-server][WARNIN] there is 1 OSD out
[docker-rancher-server][INFO  ] Running command: sudo systemctl enable ceph.target
[docker-rancher-client1][DEBUG ] connection detected need for sudo
[docker-rancher-client1][DEBUG ] connected to host: docker-rancher-client1 
[docker-rancher-client1][DEBUG ] detect platform information from remote host
[docker-rancher-client1][DEBUG ] detect machine type
[docker-rancher-client1][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] activating host docker-rancher-client1 disk /data/ceph
[ceph_deploy.osd][DEBUG ] will use init type: systemd
[docker-rancher-client1][DEBUG ] find the location of an executable
[docker-rancher-client1][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /data/ceph
[docker-rancher-client1][WARNIN] main_activate: path = /data/ceph
[docker-rancher-client1][WARNIN] activate: Cluster uuid is ef81681c-ee15-412e-a752-2c3e87b9e369
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-client1][WARNIN] activate: Cluster name is ceph
[docker-rancher-client1][WARNIN] activate: OSD uuid is d7160d58-ff8d-4779-a1b6-cb3a1f645c96
[docker-rancher-client1][WARNIN] allocate_osd_id: Allocating OSD id...
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd create --concise d7160d58-ff8d-4779-a1b6-cb3a1f645c96
[docker-rancher-client1][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/whoami.32435.tmp
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/whoami.32435.tmp
[docker-rancher-client1][WARNIN] activate: OSD id is 1
[docker-rancher-client1][WARNIN] activate: Initializing OSD...
[docker-rancher-client1][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /data/ceph/activate.monmap
[docker-rancher-client1][WARNIN] got monmap epoch 1
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/timeout 300 ceph-osd --cluster ceph --mkfs --mkkey -i 1 --monmap /data/ceph/activate.monmap --osd-data /data/ceph --osd-journal /data/ceph/journal --osd-uuid d7160d58-ff8d-4779-a1b6-cb3a1f645c96 --keyring /data/ceph/keyring --setuser ceph --setgroup ceph
[docker-rancher-client1][WARNIN] activate: Marking with init system systemd
[docker-rancher-client1][WARNIN] activate: Authorizing OSD key...
[docker-rancher-client1][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring auth add osd.1 -i /data/ceph/keyring osd allow * mon allow profile osd
[docker-rancher-client1][WARNIN] added key for osd.1
[docker-rancher-client1][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/active.32435.tmp
[docker-rancher-client1][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/active.32435.tmp
[docker-rancher-client1][WARNIN] activate: ceph osd.1 data dir is ready at /data/ceph
[docker-rancher-client1][WARNIN] activate_dir: Creating symlink /var/lib/ceph/osd/ceph-1 -> /data/ceph
[docker-rancher-client1][WARNIN] start_daemon: Starting ceph osd.1...
[docker-rancher-client1][WARNIN] command_check_call: Running command: /usr/bin/systemctl enable ceph-osd@1
[docker-rancher-client1][WARNIN] Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@1.service to /usr/lib/systemd/system/ceph-osd@.service.
[docker-rancher-client1][WARNIN] command_check_call: Running command: /usr/bin/systemctl start ceph-osd@1
[docker-rancher-client1][INFO  ] checking OSD status...
[docker-rancher-client1][DEBUG ] find the location of an executable
[docker-rancher-client1][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[docker-rancher-client1][WARNIN] there are 2 OSDs down
[docker-rancher-client1][WARNIN] there are 2 OSDs out
[docker-rancher-client1][INFO  ] Running command: sudo systemctl enable ceph.target
[docker-rancher-client2][DEBUG ] connection detected need for sudo
[docker-rancher-client2][DEBUG ] connected to host: docker-rancher-client2 
[docker-rancher-client2][DEBUG ] detect platform information from remote host
[docker-rancher-client2][DEBUG ] detect machine type
[docker-rancher-client2][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] activating host docker-rancher-client2 disk /data/ceph
[ceph_deploy.osd][DEBUG ] will use init type: systemd
[docker-rancher-client2][DEBUG ] find the location of an executable
[docker-rancher-client2][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /data/ceph
[docker-rancher-client2][WARNIN] main_activate: path = /data/ceph
[docker-rancher-client2][WARNIN] activate: Cluster uuid is ef81681c-ee15-412e-a752-2c3e87b9e369
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[docker-rancher-client2][WARNIN] activate: Cluster name is ceph
[docker-rancher-client2][WARNIN] activate: OSD uuid is 68cf33ef-d805-41df-8683-cd6ff94c8f18
[docker-rancher-client2][WARNIN] allocate_osd_id: Allocating OSD id...
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd create --concise 68cf33ef-d805-41df-8683-cd6ff94c8f18
[docker-rancher-client2][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/whoami.102520.tmp
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/whoami.102520.tmp
[docker-rancher-client2][WARNIN] activate: OSD id is 2
[docker-rancher-client2][WARNIN] activate: Initializing OSD...
[docker-rancher-client2][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /data/ceph/activate.monmap
[docker-rancher-client2][WARNIN] got monmap epoch 1
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/timeout 300 ceph-osd --cluster ceph --mkfs --mkkey -i 2 --monmap /data/ceph/activate.monmap --osd-data /data/ceph --osd-journal /data/ceph/journal --osd-uuid 68cf33ef-d805-41df-8683-cd6ff94c8f18 --keyring /data/ceph/keyring --setuser ceph --setgroup ceph
[docker-rancher-client2][WARNIN] activate: Marking with init system systemd
[docker-rancher-client2][WARNIN] activate: Authorizing OSD key...
[docker-rancher-client2][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring auth add osd.2 -i /data/ceph/keyring osd allow * mon allow profile osd
[docker-rancher-client2][WARNIN] added key for osd.2
[docker-rancher-client2][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/active.102520.tmp
[docker-rancher-client2][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/active.102520.tmp
[docker-rancher-client2][WARNIN] activate: ceph osd.2 data dir is ready at /data/ceph
[docker-rancher-client2][WARNIN] activate_dir: Creating symlink /var/lib/ceph/osd/ceph-2 -> /data/ceph
[docker-rancher-client2][WARNIN] start_daemon: Starting ceph osd.2...
[docker-rancher-client2][WARNIN] command_check_call: Running command: /usr/bin/systemctl enable ceph-osd@2
[docker-rancher-client2][WARNIN] Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@2.service to /usr/lib/systemd/system/ceph-osd@.service.
[docker-rancher-client2][WARNIN] command_check_call: Running command: /usr/bin/systemctl start ceph-osd@2
[docker-rancher-client2][INFO  ] checking OSD status...
[docker-rancher-client2][DEBUG ] find the location of an executable
[docker-rancher-client2][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[docker-rancher-client2][INFO  ] Running command: sudo systemctl enable ceph.target
[hub.chinatelecom.cn][DEBUG ] connection detected need for sudo
[hub.chinatelecom.cn][DEBUG ] connected to host: hub.chinatelecom.cn 
[hub.chinatelecom.cn][DEBUG ] detect platform information from remote host
[hub.chinatelecom.cn][DEBUG ] detect machine type
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[ceph_deploy.osd][INFO  ] Distro info: CentOS Linux 7.1.1503 Core
[ceph_deploy.osd][DEBUG ] activating host hub.chinatelecom.cn disk /data/ceph
[ceph_deploy.osd][DEBUG ] will use init type: systemd
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[hub.chinatelecom.cn][INFO  ] Running command: sudo /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /data/ceph
[hub.chinatelecom.cn][WARNIN] main_activate: path = /data/ceph
[hub.chinatelecom.cn][WARNIN] activate: Cluster uuid is ef81681c-ee15-412e-a752-2c3e87b9e369
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph-osd --cluster=ceph --show-config-value=fsid
[hub.chinatelecom.cn][WARNIN] activate: Cluster name is ceph
[hub.chinatelecom.cn][WARNIN] activate: OSD uuid is 5cba26ef-de7d-4ddc-8fcd-f800a84b8255
[hub.chinatelecom.cn][WARNIN] allocate_osd_id: Allocating OSD id...
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring osd create --concise 5cba26ef-de7d-4ddc-8fcd-f800a84b8255
[hub.chinatelecom.cn][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/whoami.33404.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/whoami.33404.tmp
[hub.chinatelecom.cn][WARNIN] activate: OSD id is 3
[hub.chinatelecom.cn][WARNIN] activate: Initializing OSD...
[hub.chinatelecom.cn][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring mon getmap -o /data/ceph/activate.monmap
[hub.chinatelecom.cn][WARNIN] got monmap epoch 1
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/timeout 300 ceph-osd --cluster ceph --mkfs --mkkey -i 3 --monmap /data/ceph/activate.monmap --osd-data /data/ceph --osd-journal /data/ceph/journal --osd-uuid 5cba26ef-de7d-4ddc-8fcd-f800a84b8255 --keyring /data/ceph/keyring --setuser ceph --setgroup ceph
[hub.chinatelecom.cn][WARNIN] activate: Marking with init system systemd
[hub.chinatelecom.cn][WARNIN] activate: Authorizing OSD key...
[hub.chinatelecom.cn][WARNIN] command_check_call: Running command: /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring auth add osd.3 -i /data/ceph/keyring osd allow * mon allow profile osd
[hub.chinatelecom.cn][WARNIN] added key for osd.3
[hub.chinatelecom.cn][WARNIN] command: Running command: /sbin/restorecon -R /data/ceph/active.33404.tmp
[hub.chinatelecom.cn][WARNIN] command: Running command: /usr/bin/chown -R ceph:ceph /data/ceph/active.33404.tmp
[hub.chinatelecom.cn][WARNIN] activate: ceph osd.3 data dir is ready at /data/ceph
[hub.chinatelecom.cn][WARNIN] activate_dir: Creating symlink /var/lib/ceph/osd/ceph-3 -> /data/ceph
[hub.chinatelecom.cn][WARNIN] start_daemon: Starting ceph osd.3...
[hub.chinatelecom.cn][WARNIN] command_check_call: Running command: /usr/bin/systemctl enable ceph-osd@3
[hub.chinatelecom.cn][WARNIN] Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@3.service to /usr/lib/systemd/system/ceph-osd@.service.
[hub.chinatelecom.cn][WARNIN] command_check_call: Running command: /usr/bin/systemctl start ceph-osd@3
[hub.chinatelecom.cn][INFO  ] checking OSD status...
[hub.chinatelecom.cn][DEBUG ] find the location of an executable
[hub.chinatelecom.cn][INFO  ] Running command: sudo /bin/ceph --cluster=ceph osd stat --format=json
[hub.chinatelecom.cn][INFO  ] Running command: sudo systemctl enable ceph.target

拷贝密钥

# 用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了
[op@docker-rancher-server ceph]$ ceph-deploy admin docker-rancher-server docker-rancher-client1
[ceph_deploy.conf][DEBUG ] found configuration file at: /usr/op/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (1.5.36): /usr/bin/ceph-deploy admin docker-rancher-server docker-rancher-client1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x26724d0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['docker-rancher-server', 'docker-rancher-client1']
[ceph_deploy.cli][INFO  ]  func                          : <function admin at 0x7faecb068050>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to docker-rancher-server
[docker-rancher-server][DEBUG ] connection detected need for sudo
[docker-rancher-server][DEBUG ] connected to host: docker-rancher-server 
[docker-rancher-server][DEBUG ] detect platform information from remote host
[docker-rancher-server][DEBUG ] detect machine type
[docker-rancher-server][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to docker-rancher-client1
[docker-rancher-client1][DEBUG ] connection detected need for sudo
[docker-rancher-client1][DEBUG ] connected to host: docker-rancher-client1 
[docker-rancher-client1][DEBUG ] detect platform information from remote host
[docker-rancher-client1][DEBUG ] detect machine type
[docker-rancher-client1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

确保你对 ceph.client.admin.keyring 有正确的操作权限

# 只在admin主机执行即可
sudo chmod +r /etc/ceph/ceph.client.admin.keyring

检查集群状态

[op@docker-rancher-server ceph]$ ceph health
HEALTH_ERR 64 pgs are stuck inactive for more than 300 seconds; 64 pgs stuck inactive
# 出现这个问题,常见报错解决方案3

正常的情况如下:

[op@docker-rancher-server ceph]$ ceph health
HEALTH_OK
[op@docker-rancher-server ceph]$ ceph -s
    cluster ef81681c-ee15-412e-a752-2c3e87b9e369
     health HEALTH_OK
     monmap e1: 2 mons at {docker-rancher-client1=10.142.246.3:6789/0,docker-rancher-server=10.142.246.2:6789/0}
            election epoch 8, quorum 0,1 docker-rancher-server,docker-rancher-client1
     osdmap e18: 4 osds: 4 up, 4 in
            flags sortbitwise
      pgmap v182: 64 pgs, 1 pools, 0 bytes data, 0 objects
            281 GB used, 3455 GB / 3936 GB avail
                  64 active+clean
                  
[op@docker-rancher-server ceph]$ ceph osd tree
ID WEIGHT  TYPE NAME                       UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 3.84436 root default                                                      
-2 0.96109     host docker-rancher-server                                    
 0 0.96109         osd.0                        up  1.00000          1.00000 
-3 0.96109     host docker-rancher-client1                                   
 1 0.96109         osd.1                        up  1.00000          1.00000 
-4 0.96109     host docker-rancher-client2                                   
 2 0.96109         osd.2                        up  1.00000          1.00000 
-5 0.96109     host hub                                                      
 3 0.96109         osd.3                        up  1.00000          1.00000 

4. 增加块

默认安装完成后,会有个rbd的存储池。由于本ceph环境当前只用于docker volume后端存储,所以直接用默认的rbd存储池,后期生产环境如果多个系统使用,则构建volume自己的存储池。

1. 查看资源池

以下操作要在admin节点执行

# 列出已存在的存储池
[op@docker-rancher-server ~]$ rados lspools
rbd
[op@docker-rancher-server ~]$ ceph df
GLOBAL:
    SIZE      AVAIL     RAW USED     %RAW USED 
    3936G     3455G         281G          7.14 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0         0         0         1072G           0 
rbd默认有1072G可用
如果后期磁盘空间不够用,可以将size的个数调整
[op@docker-rancher-server ~]$ ceph osd pool set rbd size 2
set pool 0 size to 2
[op@docker-rancher-server ~]$  ceph df 
GLOBAL:
    SIZE      AVAIL     RAW USED     %RAW USED 
    3936G     3455G         281G          7.14 
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS 
    rbd      0         0         0         1608G           0 

创建块,该块设备推荐使用format 2的格式,这样后期可以做镜像和快照。但是问题来了,由于内核版本是3.10,不支持format 2的部分新特性。常见常见错误5,此处改用format 1 默认格式。

2. 创建块设备与映射

# 创建1T
[op@docker-rancher-server ceph]$ rbd create docker-volume --size 1T --pool rbd  --image-format 1
rbd: image format 1 is deprecated
# 此处提示1 已经是废弃的了
# 补充一点命令
[op@docker-rancher-server ceph]$ rbd help create
usage: rbd create [--pool <pool>] [--image <image>] 
                  [--image-format <image-format>] [--new-format] 
                  [--order <order>] [--object-size <object-size>] 
                  [--image-feature <image-feature>] [--image-shared] 
                  [--stripe-unit <stripe-unit>] 
                  [--stripe-count <stripe-count>] 
                  [--journal-splay-width <journal-splay-width>] 
                  [--journal-object-size <journal-object-size>] 
                  [--journal-pool <journal-pool>] --size <size> 
                  <image-spec> 

Create an empty image.

Positional arguments
  <image-spec>              image specification
                            (example: [<pool-name>/]<image-name>)

Optional arguments
  -p [ --pool ] arg         pool name
  --image arg               image name
  --image-format arg        image format [1 (deprecated) or 2]
  --new-format              use image format 2
                            (deprecated)
  --order arg               object order [12 <= order <= 25]
  --object-size arg         object size in B/K/M [4K <= object size <= 32M]
  --image-feature arg       image features
                            [layering(+), striping, exclusive-lock(+*),
                            object-map(+*), fast-diff(+*), deep-flatten(+-),
                            journaling(*)]
  --image-shared            shared image
  --stripe-unit arg         stripe unit
  --stripe-count arg        stripe count
  --journal-splay-width arg number of active journal objects
  --journal-object-size arg size of journal objects
  --journal-pool arg        pool for journal objects
  -s [ --size ] arg         image size (in M/G/T)

Image Features:
  (*) supports enabling/disabling on existing images
  (-) supports disabling-only on existing images
  (+) enabled by default for new images if features not specified

# 验证
[op@docker-rancher-server ceph]$ rbd ls
docker-volume
# 查看详情
[op@docker-rancher-server ceph]$ rbd info docker-volume
rbd image 'docker-volume':
	size 1024 GB in 262144 objects
	order 22 (4096 kB objects)
	block_name_prefix: rb.0.acb6.2ae8944a
	format: 1

# 此步骤备选;后期如果磁盘不够,可以用以扩展。resize可大,也可小。根据需求定。
rbd resizs docker-volume --size 更改的值  

# 映射块设备,注意此处要用sudo来做,否则报错,无法写入。
[op@docker-rancher-server ceph]$ sudo rbd map docker-volume --pool rbd --id admin
/dev/rbd0

# 验证映射
[op@docker-rancher-server ceph]$ rbd showmapped
id pool image         snap device    
0  rbd  docker-volume -    /dev/rbd0 

# 备注,取消映射的方法:
rbd unmap /dev/rbd/{pool-nmae}/{image-name}
rbd unmap /dev/rbd/rbd/docker-volume
# 或者使用
rbd unmap /dev/rbd0

3. 使用块设备

# 首先格式化块
[op@docker-rancher-server ceph]$ sudo mkfs.ext4 -q /dev/rbd0

# 建立Linux挂载目录
[root@docker-rancher-server ~]# sudo mkdir /ceph-rbd

# 挂载
[op@docker-rancher-server ceph]$ sudo mount -t /dev/rbd0 /ceph-rbd

# 配置开机自动挂载
1. 修改ceph自动挂载
[op@docker-rancher-server ~]$ sudo vim /etc/ceph/rbdmap 
# RbdDevice             Parameters
#poolname/imagename     id=client,keyring=/etc/ceph/ceph.client.keyring
rbd/docker-volume       id=admin,keyring=/etc/ceph/ceph.client.admin.keyring

2. 修改fstab开机自启动,增加挂载项
vim /etc/fstab
/dev/rbd0                   /ceph-rbd   ext4  defaults        1 2


# 验证
Filesystem                  Size  Used Avail Use% Mounted on
/dev/mapper/centos-root      45G  2.9G   42G   7% /
devtmpfs                     16G     0   16G   0% /dev
tmpfs                        16G     0   16G   0% /dev/shm
tmpfs                        16G  1.5G   15G  10% /run
tmpfs                        16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/datavg-lv_data  985G   62G  873G   7% /data
/dev/xvda1                  497M  135M  362M  28% /boot
10.142.246.2:/data/nfs      985G   62G  873G   7% /var/lib/rancher/convoy/convoy-nfs-85120bf6-2d8d-44e1-b868-bde8284a3b4c/mnt
tmpfs                       3.1G     0  3.1G   0% /run/user/0
/dev/rbd0                  1008G   77M  957G   1% /ceph-rbd

# 现在可以去ceph-rbd里面创建个文件或者其他东西

4. 未来删除块设备的流程

# 1. 取消挂载
umount /ceph-rbd
# 2. 先去fstab和rbdmap里面删除增加的开机自动挂载信息,否则下次开机无法启动。
# 注意,一定要将ceph设置为开机自动启动,否则也是无法开机

# 3. 取消映射
rbd unmap /dev/rbd0
# 验证
rbd showmapped
# 4. 删除对应的快
rbd rm docker-volume

附录

1. 增加mon节点

上述配置过程中只配置了两个mon,生产环境应该配置3个或以上的mon节点

# 编辑配置文件,增加mon
[op@docker-rancher-server ceph]$ vim ceph.conf 
mon_initial_members = docker-rancher-server, docker-rancher-client1, docker-rancher-client2
mon_host = 10.142.246.2,10.142.246.3,10.142.246.4

# 增加mon
[op@docker-rancher-server ceph]$ ceph-deploy --overwrite-conf   mon  create docker-rancher-client2

# 同步其他节点的配置
[op@docker-rancher-server ceph]$ ceph-deploy  --overwrite-conf config push docker-rancher-server
[op@docker-rancher-server ceph]$ ceph-deploy  --overwrite-conf config push docker-rancher-client1
# 检查结果
[op@docker-rancher-server ceph]$ ceph -s
    cluster ef81681c-ee15-412e-a752-2c3e87b9e369
     health HEALTH_OK
     monmap e2: 3 mons at {docker-rancher-client1=10.142.246.3:6789/0,docker-rancher-client2=10.142.246.4:6789/0,docker-rancher-server=10.142.246.2:6789/0}
            election epoch 10, quorum 0,1,2 docker-rancher-server,docker-rancher-client1,docker-rancher-client2
     osdmap e28: 4 osds: 4 up, 4 in
            flags sortbitwise
      pgmap v10836: 64 pgs, 1 pools, 0 bytes data, 0 objects
            281 GB used, 3454 GB / 3936 GB avail
                  64 active+clean

可以看到已经有3个mon了

2. 删除mon节点

# 先去修改ceph.conf文件,删除对应的mon

# 再去推送到其他mon节点

# 执行删除
ceph-deploy mon destroy  $HOSTNAME

# 检测
ceph -s

2. 增加删除osd

1. 增加osd

# 增加的过程和之前部署的一样
# 此处以文件夹为代表演示
# 1. 先创建对应文件夹,将权限更改为ceph
# 2. ceph-deploy osd prepare $hostname:目录
# 3.  ceph-deploy osd activate $hostname:目录
# 4. 使用ceph -s和ceph osd tree查看

2. 删除osd

  1. 停进程
# 检查当前osd
ceph osd tree
  1. 其他具体删除时查看官网

测试块读写速度

1. 测试Linux磁盘读写速度

# 测试写速度
[root@docker-rancher-server ~]# time dd if=/dev/zero of=/test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 2.60019 s, 945 MB/s

real	0m2.602s
user	0m0.054s
sys	0m2.542s
# 测试读速度
[root@docker-rancher-server ~]# time dd if=/test.dbf of=/dev/null bs=8k count=300000 
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 0.804974 s, 3.1 GB/s

real	0m0.806s
user	0m0.028s
sys	0m0.778s

2. 测试挂载的/data数据盘读写速度

# 测试写速度
[root@docker-rancher-server ceph-rbd]# time dd if=/dev/zero of=/data/test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 3.38757 s, 725 MB/s

real	0m3.407s
user	0m0.053s
sys	0m3.248s
# 测试读速度
[root@docker-rancher-server ~]# time dd if=/data/test.dbf of=/dev/null bs=8k count=300000 
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 0.899513 s, 2.7 GB/s

real	0m0.901s
user	0m0.029s
sys	0m0.872s

3. 测试ceph 块存储读写速度

# 测试写速度
[root@docker-rancher-server ceph-rbd]# time dd if=/dev/zero of=/ceph-rbd/test.dbf bs=8k count=300000
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 3.31538 s, 741 MB/s

real	0m3.335s
user	0m0.060s
sys	0m3.253s0
# 测试读速度
[root@docker-rancher-server ceph-rbd]# time dd if=/ceph-rbd/test.dbf of=/dev/null bs=8k count=300000
300000+0 records in
300000+0 records out
2457600000 bytes (2.5 GB) copied, 0.963309 s, 2.6 GB/s

real	0m0.965s
user	0m0.024s
sys	0m0.938s

由于测试环境等各种原因,并不能很全面反映ceph 快存储的读写速度,大概可以看出,和华为云平台挂载的数据盘读写速度差不多。原因可能是本次ceph用的就是华为云平台挂载的数据盘。后期具体生产环境可以再次测试一下。不过可以大概了解到网络方面对读写的影响不是很大。在本次实验中并不是一个影响很大的因素。

常见错误

1. 执行 ceph-deploy new 创建监视器时报错

# 报错代码
[op@docker-rancher-server ceph]$ ceph-deploy new docker-rancher-server docker-rancher-client1
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in <module>
    from ceph_deploy.cli import main
ImportError: No module named ceph_deploy.cli

产生原因 : 由于之前升级了CentOS7默认的python版本导致的,解决方法是修改ceph-deploy,使其指向默认python版本

解决方法:

[op@docker-rancher-server ceph]$ sudo vim /usr/bin/ceph-deploy
将#!/usr/bin/env python
修改为#!/usr/bin/python2.7

2. 执行ceph-deploy时报错,无法去ceph官网下包

[op@docker-rancher-server ceph]$ ceph-deploy install docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn
......
[docker-rancher-server][DEBUG ] 完毕!
[docker-rancher-server][DEBUG ] Configure Yum priorities to include obsoletes
[docker-rancher-server][WARNIN] check_obsoletes has been enabled for Yum priorities plugin
[docker-rancher-server][INFO  ] Running command: sudo rpm --import https://download.ceph.com/keys/release.asc
[docker-rancher-server][WARNIN] curl: (6) Could not resolve host: download.ceph.com; 未知的名称或服务
[docker-rancher-server][WARNIN] 错误:https://download.ceph.com/keys/release.asc: import read failed(2).
[docker-rancher-server][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: rpm --import https://download.ceph.com/keys/release.asc

问题原因:由于内网无法联网,导致无法去官网下包

解决办法:修改ceph-deploy中对应下载地址到自己的ceph源。

修改3个文件

# 1. 修改第一个文件
[op@docker-rancher-server ~]$ cd /usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos/
[op@docker-rancher-server centos]$ sudo vim install.py
 79 #            remoto.process.run(
 80 #                distro.conn,
 81 #                [
 82 #                    'rpm',
 83 #                    '-Uvh',
 84 #                    '--replacepkgs',
 85 #                    '{url}noarch/ceph-release-1-0.{dist}.noarch.rpm'.format(url=url, dist=dist),
 86 #                ],
 87 #           )

 # 2. 修改第二个文件
[op@docker-rancher-server centos]$ cd /usr/lib/python2.7/site-packages/ceph_deploy/util/
[op@docker-rancher-server util]$ sudo vim constants.py
# 修改为自己的keys地址
32 gpg_key_base_url = "10.142.78.40/ceph/keys/"

# 3. 修改第三个文件
[op@docker-rancher-server util]$ cd /usr/lib/python2.7/site-packages/ceph_deploy/util/paths/
[op@docker-rancher-server paths]$ sudo vim gpg.py
# 把https改为http
 3 def url(key_type, protocol="http"):
  4     return "{protocol}://{url}{key_type}.asc".format(
  5         protocol=protocol,
  6         url=constants.gpg_key_base_url,
  7         key_type=key_type
  8     )
 
# 将三个文件同步到其他各个节点
#! /bin/bash
set -ex
hosts="docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn"

file="/usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos/install.py /usr/lib/python2.7/site-packages/ceph_deploy/util/constants.py /usr/lib/python2.7/site-packages/ceph_deploy/util/paths/gpg.py"

destinationDirectory="~"

for i in $hosts
do
    scp $file $i:$destinationDirectory
    ssh $i sudo mv $destinationDirectory/install.py /usr/lib/python2.7/site-packages/ceph_deploy/hosts/centos/
    ssh $i sudo mv $destinationDirectory/constants.py  /usr/lib/python2.7/site-packages/ceph_deploy/util/
    ssh $i sudo mv $destinationDirectory/gpg.py  /usr/lib/python2.7/site-packages/ceph_deploy/util/paths/
done

该修改参考资料

本地源安装ceph

[op@docker-rancher-server ceph]$ ceph-deploy install docker-rancher-server docker-rancher-client1 docker-rancher-client2 hub.chinatelecom.cn
......
[docker-rancher-server][DEBUG ] ---> 软件包 spax.x86_64.0.1.5.2-13.el7 将被 安装
[docker-rancher-server][DEBUG ] ---> 软件包 time.x86_64.0.1.7-45.el7 将被 安装
[docker-rancher-server][DEBUG ] --> 解决依赖关系完成
[docker-rancher-server][DEBUG ]  您可以尝试添加 --skip-broken 选项来解决该问题
[docker-rancher-server][WARNIN] 错误:软件包:1:ceph-selinux-10.2.3-0.el7.x86_64 (ceph)
[docker-rancher-server][WARNIN]           需要:selinux-policy-base >= 3.13.1-60.el7_2.7
[docker-rancher-server][WARNIN]           已安装: selinux-policy-targeted-3.13.1-23.el7.noarch (@anaconda)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-23.el7
[docker-rancher-server][WARNIN]           可用: selinux-policy-minimum-3.13.1-23.el7.noarch (base)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-23.el7
[docker-rancher-server][WARNIN]           可用: selinux-policy-minimum-3.13.1-60.el7.noarch (updates)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-60.el7
[docker-rancher-server][WARNIN]           可用: selinux-policy-mls-3.13.1-23.el7.noarch (base)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-23.el7
[docker-rancher-server][WARNIN]           可用: selinux-policy-mls-3.13.1-60.el7.noarch (updates)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-60.el7
[docker-rancher-server][WARNIN]           可用: selinux-policy-targeted-3.13.1-60.el7.noarch (updates)
[docker-rancher-server][WARNIN]               selinux-policy-base = 3.13.1-60.el7
[docker-rancher-server][WARNIN] 错误:软件包:1:python-flask-0.10.1-3.el7.noarch (epel)
[docker-rancher-server][WARNIN]           需要:python-itsdangerous
[docker-rancher-server][DEBUG ]  您可以尝试执行:rpm -Va --nofiles --nodigest
[docker-rancher-server][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install ceph ceph-radosgw

这是yum源里的selinux-policy-targeted版本不够造成的,下载对应的包放进去

selinux-policy-3.13.1-60.el7_2.7.noarch.rpm

selinux-policy-targeted-3.13.1-60.el7_2.7.noarch.rpm

# 在所有的节点都执行
[op@docker-rancher-server ~]$ sudo yum localinstall selinux-policy-3.13.1-60.el7_2.7.noarch.rpm 
[op@docker-rancher-server ~]$ sudo yum localinstall selinux-policy-targeted-3.13.1-60.el7_2.7.noarch.rpm

3. ceph健康检查一个osd都没有

[op@docker-rancher-server ceph]$ ceph health
HEALTH_ERR 64 pgs are stuck inactive for more than 300 seconds; 64 pgs stuck inactive
[op@docker-rancher-server ceph]$ ceph -s
    cluster ef81681c-ee15-412e-a752-2c3e87b9e369
     health HEALTH_ERR
            64 pgs are stuck inactive for more than 300 seconds
            64 pgs stuck inactive
     monmap e1: 2 mons at {docker-rancher-client1=10.142.246.3:6789/0,docker-rancher-server=10.142.246.2:6789/0}
            election epoch 8, quorum 0,1 docker-rancher-server,docker-rancher-client1
     osdmap e9: 4 osds: 0 up, 0 in
            flags sortbitwise
      pgmap v10: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                  64 creating

经排查错误日志:

[root@docker-rancher-client2 data]# tail -f /var/log/ceph/ceph-osd.2.log 
2016-11-28 14:25:03.603389 7f0ccf069800  0 genericfilestorebackend(/var/lib/ceph/osd/ceph-2) detect_features: syncfs(2) syscall fully supported (by glibc and kernel)
2016-11-28 14:25:03.607758 7f0ccf069800  0 filestore(/var/lib/ceph/osd/ceph-2) limited size xattrs
2016-11-28 14:25:03.608339 7f0ccf069800  1 leveldb: Recovering log #16
2016-11-28 14:25:03.613865 7f0ccf069800  1 leveldb: Delete type=0 #16

2016-11-28 14:25:03.613927 7f0ccf069800  1 leveldb: Delete type=3 #15

2016-11-28 14:25:03.614165 7f0ccf069800  0 filestore(/var/lib/ceph/osd/ceph-2) mount: enabling WRITEAHEAD journal mode: checkpoint is not enabled
2016-11-28 14:25:03.614331 7f0ccf069800 -1 journal FileJournal::_open: disabling aio for non-block journal.  Use journal_force_aio to force use of aio anyway
2016-11-28 14:25:03.614341 7f0ccf069800  1 journal _open /var/lib/ceph/osd/ceph-2/journal fd 18: 5368709120 bytes, block size 4096 bytes, directio = 1, aio = 0
2016-11-28 14:25:03.614665 7f0ccf069800  1 journal _open /var/lib/ceph/osd/ceph-2/journal fd 18: 5368709120 bytes, block size 4096 bytes, directio = 1, aio = 0
2016-11-28 14:25:03.614947 7f0ccf069800  1 filestore(/var/lib/ceph/osd/ceph-2) upgrade
2016-11-28 14:25:03.615114 7f0ccf069800 -1 osd.2 0 backend (filestore) is unable to support max object name[space] len
2016-11-28 14:25:03.615140 7f0ccf069800 -1 osd.2 0    osd max object name len = 2048
2016-11-28 14:25:03.615142 7f0ccf069800 -1 osd.2 0    osd max object namespace len = 256
2016-11-28 14:25:03.615144 7f0ccf069800 -1 osd.2 0 (36) File name too long
2016-11-28 14:25:03.615498 7f0ccf069800  1 journal close /var/lib/ceph/osd/ceph-2/journal
2016-11-28 14:25:03.616473 7f0ccf069800 -1  ** ERROR: osd init failed: (36) File name too long

log意思是说,文件名太长。各种google搜索一番后,发现原来我用的文件系统是ext4,CentOS推荐使用xfs的文件系统。但是磁盘不能重新格式化,所以我就在ceph配置文件中增加参数,限制文件名的长度。

# 注意,四个节点都要做
[op@docker-rancher-client2 ~]$ sudo vim /etc/ceph/ceph.conf 
osd max object name len = 256
osd max object namespace len = 64

# 之后重启osd服务
[op@docker-rancher-client2 ~]$ sudo systemctl restart  ceph-osd.target 

参考资料:

The ceph OSD deamon is not activated with ext4 file system

http://tracker.ceph.com/issues/16187

4. rbd create失败

在配置好集群以后,rbd create一直失败,情况如下

[op@docker-rancher-server ceph]$ rbd create docker-volume --size 1024
2016-11-29 12:22:57.485826 7faa2e05c700  0 -- 10.142.246.2:0/3639593179 >> 10.142.246.5:6800/109587 pipe(0x7faa57bb46c0 sd=4 :0 s=1 pgs=0 cs=0 l=1 c=0x7faa57bb5980).fault

但是整个集群的状态是好的

[op@docker-rancher-server ceph]$ ceph osd tree
ID WEIGHT  TYPE NAME                       UP/DOWN REWEIGHT PRIMARY-AFFINITY 
-1 3.84436 root default                                                      
-2 0.96109     host docker-rancher-server                                    
 0 0.96109         osd.0                        up  1.00000          1.00000 
-3 0.96109     host docker-rancher-client1                                   
 1 0.96109         osd.1                        up  1.00000          1.00000 
-4 0.96109     host docker-rancher-client2                                   
 2 0.96109         osd.2                        up  1.00000          1.00000 
-5 0.96109     host hub                                                      
 3 0.96109         osd.3                        up  1.00000          1.00000 
[op@docker-rancher-server ceph]$ ceph -s
    cluster ef81681c-ee15-412e-a752-2c3e87b9e369
     health HEALTH_OK
     monmap e2: 3 mons at {docker-rancher-client1=10.142.246.3:6789/0,docker-rancher-client2=10.142.246.4:6789/0,docker-rancher-server=10.142.246.2:6789/0}
            election epoch 18, quorum 0,1,2 docker-rancher-server,docker-rancher-client1,docker-rancher-client2
     osdmap e82: 4 osds: 4 up, 4 in
            flags sortbitwise
      pgmap v42631: 64 pgs, 1 pools, 0 bytes data, 0 objects
            283 GB used, 3452 GB / 3936 GB avail
                  64 active+clean

后来换了个节点docker-rancher-client1节点,查看osd的日志信息

[root@docker-rancher-client1 ceph]# tail -f ceph-osd.1.log 
2016-11-29 12:26:32.770143 7ffbc37c5700 -1 osd.1 82 heartbeat_check: no reply from osd.3 ever on either front or back, first ping sent 2016-11-29 12:21:21.113662 (cutoff 2016-11-29 12:26:12.770139)
2016-11-29 12:26:33.558821 7ffbaadfe700 -1 osd.1 82 heartbeat_check: no reply from osd.3 ever on either front or back, first ping sent 2016-11-29 12:21:21.113662 (cutoff 2016-11-29 12:26:13.558819)
2016-11-29 12:26:33.770524 7ffbc37c5700 -1 osd.1 82 heartbeat_check: no reply from osd.3 ever on either front or back, first ping sent 2016-11-29 12:21:21.113662 (cutoff 2016-11-29 12:26:13.770520)
2016-11-29 12:26:34.659291 7ffbaadfe700 -1 osd.1 82 heartbeat_check: no reply from osd.3 ever on either front or back, first ping sent 2016-11-29 12:21:21.113662 (cutoff 2016-11-29 12:26:14.659289)
2016-11-29 12:26:34.770786 7ffbc37c5700 -1 osd.1 82 heartbeat_check: no reply from osd.3 ever on either front or back, first ping sent 2016-11-29 12:21:21.113662 (cutoff 2016-11-29 12:26:14.770781)

发现原来是osd.3心跳检查不通过。经排查是防火墙问题

[op@hub hue-metadata]$ sudo iptables -I INPUT -p tcp --dport 6789 -j ACCEPT
[op@hub hue-metadata]$ sudo iptables -I INPUT -p tcp -m multiport --dports 6800:7100 -j ACCEPT
# 再看一下iptables filter表
[op@hub hue-metadata]$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 6800:7100
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6789
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8888
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8001
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:10050
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
ACCEPT     tcp  --  10.142.0.0/16        0.0.0.0/0            tcp dpt:6789
ACCEPT     tcp  --  10.142.0.0/16        0.0.0.0/0            tcp dpts:6800:7300
ACCEPT     all  --  10.142.0.0/16        0.0.0.0/0 
# 其实之前配了,可能是因为配置源IP地址的原因吧,现在配置的是任意源地址都可以通过,至此,问题得以解决。

5. rbd map失败

创建rbd后,打算映射一下,但是报错

[op@docker-rancher-server ceph]$ rbd map docker-volume --pool rbd --id admin
modprobe: ERROR: could not insert 'rbd': Operation not permitted
rbd: failed to load rbd kernel module (1)
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (2) No such file or directory
[op@docker-rancher-server ceph]$ sudo rbd map docker-volume --pool rbd --id admin
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (6) No such device or address

故障排查:

rbd 块ceph 支持两种格式:1和2

format 1 - 新建 rbd 映像时使用最初的格式。此格式兼容所有版本的 librbd 和内核模块,但是不支持较新的功能,像克隆。

format 2 - 使用第二版 rbd 格式, librbd 和 3.11 版以上内核模块才支持(除非是分拆的模块)。此格式增加了克隆支持,使得扩展更容易,还允许以后增加新功能。

为使用rbd 块新特性,使用格式2,在map 时发生以上报错:

查找官网相关资料,找到信息如下:

我们安装的是jewel 版本,新建rbd块指定格式2,默认格式2的rbd 块支持如下特性,默认全部开启;

layering: 支持分层

striping: 支持条带化 v2

exclusive-lock: 支持独占锁

object-map: 支持对象映射(依赖 exclusive-lock )

fast-diff: 快速计算差异(依赖 object-map )

deep-flatten: 支持快照扁平化操作

journaling: 支持记录 IO 操作(依赖独占锁)

笔者使用系统为centos7.1 ,内核版本3.10.0-229.el7.x86_64,根据报错内容提示可知,服务器系统内核版本,不支持有些格式2 的新特性导致。可以使用--image-feature   选项指定使用特性,不用全部开启。我们的需求仅需要使用快照等特性,开启layering即可,

经测试,内核版本 3.10,仅支持此特性(layering),其它特性需要使用更高版本内核,或者从新编译内核加载特性模块才行。

参考资料

  1. ceph集群jewel版本 rbd 块map 报错-故障排查

  2. RBD – MANAGE RADOS BLOCK DEVICE (RBD) IMAGES

参考资料

  1. Ceph官网-中文版
  2. Ceph官网-英文版
  3. 本地源安装ceph
既然优秀不够,那就让自己无可替代
原文地址:https://www.cnblogs.com/icloud/p/6115447.html