部署 ceph

1、部署方式

  • ceph-ansible:https://github.com/ceph/ceph-ansible #python
  • ceph-salt:https://github.com/ceph/ceph-salt #python
  • ceph-container:https://github.com/ceph/ceph-container #shell
  • ceph-chef:https://github.com/ceph/ceph-chef #Ruby
  • ceph-deploy:https://github.com/ceph/ceph-deploy #python

Ceph-deploy是一个 ceph 官方维护的基于 ceph-deploy 命令行部署 ceph 集群的工具,基于 ssh 执行可以sudo 权限的 shell 命令以及一些 python 脚本 实现 ceph 集群的部署和管理维护。

Ceph-deploy 只用于部署和管理 ceph 集群,客户端需要访问 ceph,需要部署客户端工具。

2、服务器准备

三台服务器作为 ceph 集群 OSD 存储服务器,每台服务器支持两个网络,public 网络针对客户端访问,cluster 网络用于集群管理及数据同步,每台三块或以上的磁盘

192.168.1.111/192.168.10.111
192.168.1.112/192.168.10.112
192.168.1.113/192.168.10.113

三台存储服务器磁盘划分:
/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf #100G
/dev/sdg /dev/sdh /dev/sdi #200G

三台服务器作为 ceph 集群 Mon 监视服务器,每台服务器可以和 ceph 集群的 cluster 网络通信。

192.168.1.114/192.168.10.114
192.168.1.115/192.168.10.115
192.168.1.116/192.168.10.116

两个 ceph-mgr 管理服务器,可以和 ceph 集群的 cluster 网络通信

192.168.1.117/192.168.10.117
192.168.1.118/192.168.10.118

一个服务器用于部署 ceph 集群即安装 Ceph-deploy,也可以和 ceph-mgr 等复用。

192.168.1.110/192.168.10.110

创建一个普通用户,能够通过 sudo 执行特权命令,配置主机名解析,ceph 集群依赖于主机名,关闭各服务器防火墙、selinux

图片[1]-部署 ceph-李佳程的个人主页

3、系统环境准备

时间同步
关闭 selinux 和防火墙
配置域名解析或通过 DNS 解析

192.168.1.110 deploy.ceph.com deploy
192.168.1.111 node01.ceph.com node01
192.168.1.112 node02.ceph.com node02
192.168.1.113 node03.ceph.com node03
192.168.1.114 mon01.ceph.com mon01
192.168.1.115 mon02.ceph.com mon02
192.168.1.116 mon03.ceph.com mon03
192.168.1.117 mgr01.ceph.com mgr01
192.168.1.118 mgr02.ceph.com mgr02

4、部署 RADOS 集群

  • https://mirrors.aliyun.com/ceph/ #阿里云镜像仓库
  • http://mirrors.163.com/ceph/ #网易镜像仓库
  • https://mirrors.tuna.tsinghua.edu.cn/ceph/ #清华大学镜像源

4.1、仓库准备

各节点配置 ceph yum 仓库:

[root@deploy ~]# yum install https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm

[root@deploy ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r-- 1 root root 535 May  5  2018 ceph.repo
-rw-r--r-- 1 root root 368 Nov 13 16:37 local.repo

各节点配置 epel 仓库:

[root@deploy ~]# yum install epel-release -y

4.2、创建 ceph 用户

推荐使用指定的普通用户部署和运行 ceph 集群,普通用户只要能以非交互方式执行 sudo 命令执行一些特权命令即可,新版的 ceph-deploy 可以指定包含 root 的在内只要可以执行 sudo命令的用户,不过仍然推荐使用普通用户,比如 ceph、cephuser、cephadmin 这样的用户去管理 ceph 集群。

在包含 ceph-deploy 节点的存储节点、mon 节点和 mgr 节点等创建 ceph 用户

[root@deploy ~]# groupadd ceph -g 2023 && useradd -u 2023 -g 2023 ceph && echo "123456" | passwd --stdin ceph

各服务器允许 ceph 用户以 sudo 执行特权命令:

[root@deploy ~]# vim /etc/sudoers
root    ALL=(ALL)       ALL
ceph    ALL=(ALL)       NOPASSWD: ALL

配置免秘钥登录:

在 ceph-deploy 节点配置允许以非交互的方式登录到各 ceph node/mon/mgr 节点,即在ceph-deployment 节点生成秘钥对,然后分发公钥到各被管理节点:

[ceph@deploy ~]$ vim sshpass.sh

#!/bin/bash

IPLIST="
192.168.1.110
192.168.1.111
192.168.1.112
192.168.1.113
192.168.1.114
192.168.1.115
192.168.1.116
192.168.1.117
192.168.1.118"

sudo rpm -q sshpass &> /dev/null || sudo yum -y install sshpass
[ -f /home/ceph/.ssh/id_rsa ] || ssh-keygen -f /home/ceph/.ssh/id_rsa  -P ''

export SSHPASS=123456

for IP in $IPLIST;do
    { sshpass -e ssh-copy-id $IP; } &
done
wait

[ceph@deploy ~]$ bash sshpass.sh 

4.3、配置主机名解析

[ceph@deploy ~]$ vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.110 deploy.ceph.com deploy
192.168.1.111 node01.ceph.com node01
192.168.1.112 node02.ceph.com node02
192.168.1.113 node03.ceph.com node03
192.168.1.114 mon01.ceph.com mon01
192.168.1.115 mon02.ceph.com mon02
192.168.1.116 mon03.ceph.com mon03
192.168.1.117 mgr01.ceph.com mgr01
192.168.1.118 mgr02.ceph.com mgr02

4.4、安装 ceph 部署工具

在 ceph 部署服务器安装部署工具 ceph-deploy

[ceph@deploy ~]$ sudo yum install ceph-deploy python-setuptools python2-subprocess3 -y

4.5、初始化 mon 节点

在管理节点初始化 mon 节点

[ceph@deploy ~]$ mkdir ceph-cluster
[ceph@deploy ~]$ cd ceph-cluster/
[ceph@deploy ceph-cluster]$ ceph-deploy --help

new:开始部署一个新的 ceph 存储集群,并生成 CLUSTER.conf 集群配置文件和 keyring 认证
文件。
install: 在远程主机上安装 ceph 相关的软件包, 可以通过--release 指定安装的版本。
rgw:管理 RGW 守护程序(RADOSGW,对象存储网关)。
mgr:管理 MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。
mds:管理 MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。
mon:管理 MON 守护程序(ceph-mon,ceph 监视器)。
gatherkeys:从指定获取提供新节点的验证 keys,这些 keys 会在添加新的 MON/OSD/MD 加
入的时候使用。
disk:管理远程主机磁盘。
osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到 ceph 集群作为 osd 使
用。
repo: 远程主机仓库管理。
admin:推送 ceph 集群配置文件和 client.admin 认证文件到远程主机。
config:将 ceph.conf 配置文件推送到远程主机或从远程主机拷贝。
uninstall:从远端主机删除安装包。
purgedata:从/var/lib/ceph 删除 ceph 数据,会删除/etc/ceph 下的内容。
purge: 删除远端主机的安装包和所有数据。
forgetkeys:从本地主机删除所有的验证 keyring, 包括 client.admin, monitor, bootstrap 等认证文件。
pkg: 管理远端主机的安装包。
calamari:安装并配置一个 calamari web 节点,calamari 是一个 web 监控平台

初始化 mon 节点过程:

[ceph@deploy ceph-cluster]$ ceph-deploy new --cluster-network 192.168.10.0/24 --public-network 192.168.1.0/24 mon01
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy new --cluster-network 192.168.10.0/24 --public-network 192.168.1.0/24 mon01.ceph.com
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  func                          : <function new at 0x7fc0c0264de8>
[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 0x7fc0bf9dc878>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['mon01.ceph.com']
[ceph_deploy.cli][INFO  ]  public_network                : 192.168.1.0/24
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  cluster_network               : 192.168.10.0/24
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.cli][INFO  ]  fsid                          : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[mon01.ceph.com][DEBUG ] connected to host: deploy.ceph.com
[mon01.ceph.com][INFO  ] Running command: ssh -CT -o BatchMode=yes mon01.ceph.com
[mon01.ceph.com][DEBUG ] connection detected need for sudo
[mon01.ceph.com][DEBUG ] connected to host: mon01.ceph.com
[mon01.ceph.com][DEBUG ] detect platform information from remote host
[mon01.ceph.com][DEBUG ] detect machine type
[mon01.ceph.com][DEBUG ] find the location of an executable
[mon01.ceph.com][INFO  ] Running command: sudo /usr/sbin/ip link show
[mon01.ceph.com][INFO  ] Running command: sudo /usr/sbin/ip addr show
[mon01.ceph.com][DEBUG ] IP addresses found: [u'192.168.1.114', u'192.168.10.114']
[ceph_deploy.new][DEBUG ] Resolving host mon01.ceph.com
[ceph_deploy.new][DEBUG ] Monitor mon01 at 192.168.1.114
[ceph_deploy.new][DEBUG ] Monitor initial members are ['mon01']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'192.168.1.114']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf...

验证初始化:

[ceph@deploy ceph-cluster]$ ll
total 12
-rw-rw-r-- 1 ceph ceph  262 Jan  6 09:39 ceph.conf #自动生成的配置文件
-rw-rw-r-- 1 ceph ceph 3411 Jan  6 09:39 ceph-deploy-ceph.log #初始化日志
-rw------- 1 ceph ceph   73 Jan  6 09:39 ceph.mon.keyring #用于 ceph mon 节点内部通讯认证的秘钥环文件

[ceph@deploy ceph-cluster]$ cat ceph.conf
[global]
fsid = 23b6c4fc-1093-4f99-ba20-f225797c9503 #ceph 的集群 ID
public_network = 192.168.1.0/24
cluster_network = 192.168.10.0/24
mon_initial_members = mon01 #可以用逗号做分割添加多个 mon 节点
mon_host = 192.168.1.114
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

4.6、初始化 ceph 存储节点

初始化存储节点等于在存储节点安装了 ceph 及 ceph-rodsgw 安装包,但是使用默认的官方仓库会因为网络原因导致初始化超时,因此推荐修改 ceph 仓库为阿里或者清华等国内的镜像源

[ceph@deploy ceph-cluster]$ ceph-deploy install --no-adjust-repos --nogpgcheck node01 node02 node03

此过程会在指定的 ceph node 节点按照串行的方式逐个服务器安装 epel 源和 ceph 源并按安
装 ceph ceph-radosgw

图片[2]-部署 ceph-李佳程的个人主页
图片[3]-部署 ceph-李佳程的个人主页
图片[4]-部署 ceph-李佳程的个人主页

初始化完成

图片[5]-部署 ceph-李佳程的个人主页

4.7、配置 mon 节点并收集秘钥

通过读取当前目录下的 ceph.conf 配置文件初始化 mon 节点,mon 节点 ha 还可以后期横向扩容。

[root@mon01 ~]# yum install ceph-mon -y

[ceph@deploy ceph-cluster]$ ceph-deploy mon create-initial
图片[6]-部署 ceph-李佳程的个人主页

4.8、验证 mon 节点

验证在指定节点已经自动配置并启动了 ceph-mon 服务,并且在初始化当前目录会生成一些bootstrap ceph mds/mgr/osd/rgw 的 keyring 认证文件,这些初始化文件拥有对 ceph 集群的最高权限,所以一定要保存好。

[root@mon01 ~]# ps -ef | grep ceph-mon
ceph       1852      1  0 10:01 ?        00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id mon01 --setuser ceph --setgroup ceph

4.9、分发 admin 秘钥

把配置文件和 admin 密钥拷贝至 Ceph 集群需要执行 ceph 管理命令的节点,从而不需要后期通过 ceph 命令访问与对 ceph 集群进行管理配置的时候每次都需要指定 ceph-mon 节点地址和 ceph.client.admin.keyring 文件。

[ceph@deploy ceph-cluster]$ ceph-deploy admin node01 node02 node03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy admin node01 node02 node03
[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 0x7faab0d30440>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['node01', 'node02', 'node03']
[ceph_deploy.cli][INFO  ]  func                          : <function admin at 0x7faab1857230>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to node01
[node01][DEBUG ] connection detected need for sudo
[node01][DEBUG ] connected to host: node01
[node01][DEBUG ] detect platform information from remote host
[node01][DEBUG ] detect machine type
[node01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to node02
[node02][DEBUG ] connection detected need for sudo
[node02][DEBUG ] connected to host: node02
[node02][DEBUG ] detect platform information from remote host
[node02][DEBUG ] detect machine type
[node02][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to node03
[node03][DEBUG ] connection detected need for sudo
[node03][DEBUG ] connected to host: node03
[node03][DEBUG ] detect platform information from remote host
[node03][DEBUG ] detect machine type
[node03][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

4.10、ceph 节点验证秘钥

到 node 节点验证 key 文件

[ceph@node01 ~]$ ll /etc/ceph/
total 12
-rw------- 1 root root 151 Jan  6 10:04 ceph.client.admin.keyring
-rw-r--r-- 1 root root 262 Jan  6 10:04 ceph.conf
-rw-r--r-- 1 root root  92 Apr 24  2020 rbdmap
-rw------- 1 root root   0 Jan  6 10:04 tmpdX2y7L

认证文件的属主和属组为了安全考虑,默认设置为了 root 用户和 root 组,如果需要 ceph 用户也能执行 ceph 命令,那么就需要对 ceph 用户进行授权

[root@node01 ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
[root@node02 ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
[root@node03 ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring

4.11、配置 manager 节点

ceph 的 Luminious 及以上版本有 manager 节点,早期的版本没有。

4.12、部署 ceph-mgr 节点

mgr 节点需要读取 ceph 的配置文件,即/etc/ceph 目录中的配置文件

[root@mgr01 ~]# yum install -y ceph-mgr

[ceph@deploy ceph-cluster]$ ceph-deploy mgr create mgr01
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy mgr create mgr01
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  mgr                           : [('mgr01', 'mgr01')]
[ceph_deploy.cli][INFO  ]  overwrite_conf                : False
[ceph_deploy.cli][INFO  ]  subcommand                    : create
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f0b35c5d8c0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mgr at 0x7f0b364d8140>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mgr][DEBUG ] Deploying mgr, cluster ceph hosts mgr01:mgr01
Warning: Permanently added 'mgr01' (ECDSA) to the list of known hosts.
[mgr01][DEBUG ] connection detected need for sudo
[mgr01][DEBUG ] connected to host: mgr01
[mgr01][DEBUG ] detect platform information from remote host
[mgr01][DEBUG ] detect machine type
[ceph_deploy.mgr][INFO  ] Distro info: CentOS Linux 7.9.2009 Core
[ceph_deploy.mgr][DEBUG ] remote host will use systemd
[ceph_deploy.mgr][DEBUG ] deploying mgr bootstrap to mgr01
[mgr01][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[mgr01][WARNIN] mgr keyring does not exist yet, creating one
[mgr01][DEBUG ] create a keyring file
[mgr01][DEBUG ] create path recursively if it doesn't exist
[mgr01][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/ceph/bootstrap-mgr/ceph.keyring auth get-or-create mgr.mgr01 mon allow profile mgr osd allow * mds allow * -o /var/lib/ceph/mgr/ceph-mgr01/keyring
[mgr01][INFO  ] Running command: sudo systemctl enable ceph-mgr@mgr01
[mgr01][WARNIN] Created symlink from /etc/systemd/system/ceph-mgr.target.wants/ceph-mgr@mgr01.service to /usr/lib/systemd/system/ceph-mgr@.service.
[mgr01][INFO  ] Running command: sudo systemctl start ceph-mgr@mgr01
[mgr01][INFO  ] Running command: sudo systemctl enable ceph.target

4.13、验证 ceph-mgr 节点

[root@mgr01 ~]# ps -ef | grep ceph
root       1759      1  0 10:09 ?        00:00:00 /usr/bin/python2.7 /usr/bin/ceph-crash
ceph       1873      1  0 10:10 ?        00:00:00 /usr/bin/ceph-mgr -f --cluster ceph --id mgr01 --setuser ceph --setgroup ceph
root       1936   1578  0 10:11 pts/0    00:00:00 grep --color=auto ceph

4.14、ceph-deploy 管理 ceph 集群

在 ceph-deploy 节点配置一下系统环境,以方便后期可以执行 ceph 管理命令。

[ceph@deploy ceph-cluster]$ sudo yum install -y ceph-common

# 推送证书给自己
[ceph@deploy ceph-cluster]$ ceph-deploy admin deploy
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy admin deploy
[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 0x7f185ddc95f0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  client                        : ['deploy']
[ceph_deploy.cli][INFO  ]  func                          : <function admin at 0x7f185e8f1230>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.admin][DEBUG ] Pushing admin keys and conf to deploy
[deploy][DEBUG ] connection detected need for sudo
[deploy][DEBUG ] connected to host: deploy
[deploy][DEBUG ] detect platform information from remote host
[deploy][DEBUG ] detect machine type
[deploy][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf

# 授权
[ceph@deploy ceph-cluster]$ sudo setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring

4.15、测试 ceph 命令

[ceph@deploy ceph-cluster]$ ceph -s
  cluster:
    id:     845224fe-1461-48a4-884b-99b7b6327ae9
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum mon01
    mgr: mgr01(active)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

4.16、准备 OSD 节点

列出 ceph node 节点磁盘

# 列出远端存储node 节点的磁盘信息
[ceph@deploy ceph-cluster]$ ceph-deploy disk list node01
图片[7]-部署 ceph-李佳程的个人主页

使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 数据磁盘:
ceph-node1 ceph-node2 ceph-node3 的存储节点磁盘擦除过程如下:

ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node01 /dev/sdc
ceph-deploy disk zap node01 /dev/sdd
ceph-deploy disk zap node01 /dev/sde
ceph-deploy disk zap node01 /dev/sdf

ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node02 /dev/sdc
ceph-deploy disk zap node02 /dev/sdd
ceph-deploy disk zap node02 /dev/sde
ceph-deploy disk zap node02 /dev/sdf

ceph-deploy disk zap node03 /dev/sdb
ceph-deploy disk zap node03 /dev/sdc
ceph-deploy disk zap node03 /dev/sdd
ceph-deploy disk zap node03 /dev/sde
ceph-deploy disk zap node03 /dev/sdf
图片[8]-部署 ceph-李佳程的个人主页

4.17、添加 OSD

数据分类保存方式:

Data:即 ceph 保存的对象数据
Block: rocks DB 数据即元数据
block-wal:数据库的 wal日志
图片[9]-部署 ceph-李佳程的个人主页
ceph-deploy osd create node01 --data /dev/sdb
ceph-deploy osd create node01 --data /dev/sdc
ceph-deploy osd create node01 --data /dev/sdd
ceph-deploy osd create node01 --data /dev/sde
ceph-deploy osd create node01 --data /dev/sdf

ceph-deploy osd create node02 --data /dev/sdb
ceph-deploy osd create node02 --data /dev/sdc
ceph-deploy osd create node02 --data /dev/sdd
ceph-deploy osd create node02 --data /dev/sde
ceph-deploy osd create node02 --data /dev/sdf

ceph-deploy osd create node03 --data /dev/sdb
ceph-deploy osd create node03 --data /dev/sdc
ceph-deploy osd create node03 --data /dev/sdd
ceph-deploy osd create node03 --data /dev/sde
ceph-deploy osd create node03 --data /dev/sdf
图片[10]-部署 ceph-李佳程的个人主页

4.18、设置 OSD 服务自启动:

[root@node01 ~]# ps -ef | grep osd
ceph       28759       1  0 10:24 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph       29315       1  0 10:24 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
ceph       29862       1  0 10:24 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph
ceph       30403       1  0 10:24 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 3 --setuser ceph --setgroup ceph
ceph       30942       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 4 --setuser ceph --setgroup ceph

[root@node01 ~]# systemctl enable ceph-osd@0 ceph-osd@1 ceph-osd@2 ceph-osd@3 ceph-osd@4
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@0.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@1.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@2.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@3.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@4.service to /usr/lib/systemd/system/ceph-osd@.service.
[root@node02 ~]# ps -ef | grep osd
ceph       28673       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 5 --setuser ceph --setgroup ceph
ceph       29231       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 6 --setuser ceph --setgroup ceph
ceph       29776       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 7 --setuser ceph --setgroup ceph
ceph       30321       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 8 --setuser ceph --setgroup ceph
ceph       30862       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 9 --setuser ceph --setgroup ceph

[root@node02 ~]# systemctl enable ceph-osd@5 ceph-osd@6 ceph-osd@7 ceph-osd@8 ceph-osd@9
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@5.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@6.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@7.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@8.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@9.service to /usr/lib/systemd/system/ceph-osd@.service.
[root@node03 ~]# ps -ef | grep osd
ceph        2847       1  0 10:25 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 10 --setuser ceph --setgroup ceph
ceph        4960       1  0 10:26 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 11 --setuser ceph --setgroup ceph
ceph       29764       1  0 10:26 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 12 --setuser ceph --setgroup ceph
ceph       30305       1  0 10:26 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 13 --setuser ceph --setgroup ceph
ceph       30847       1  0 10:26 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 14 --setuser ceph --setgroup ceph

[root@node03 ~]# systemctl enable ceph-osd@10 ceph-osd@11 ceph-osd@12 ceph-osd@13 ceph-osd@14
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@10.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@11.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@12.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@13.service to /usr/lib/systemd/system/ceph-osd@.service.
Created symlink from /etc/systemd/system/ceph-osd.target.wants/ceph-osd@14.service to /usr/lib/systemd/system/ceph-osd@.service.

4.20、验证 ceph 集群

[ceph@deploy ceph-cluster]$ ceph -s
  cluster:
    id:     845224fe-1461-48a4-884b-99b7b6327ae9
    health: HEALTH_OK

  services:
    mon: 1 daemons, quorum mon01
    mgr: mgr01(active)
    osd: 15 osds: 15 up, 15 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   15 GiB used, 1.5 TiB / 1.5 TiB avail
    pgs: 

4.21、从 RADOS 移除 OSD

Ceph 集群中的一个 OSD 是一个 node 节点的服务进程且对应于一个物理磁盘设备,是一个专用的守护进程。在某 OSD 设备出现故障,或管理员出于管理之需确实要移除特定的 OSD设备时,需要先停止相关的守护进程,而后再进行移除操作。对于 Luminous 及其之后的版本来说,停止和移除命令的格式分别如下所示:

1. 停用设备:ceph osd out {osd-num}
2. 停止进程:sudo systemctl stop ceph-osd@{osd-num}
3. 移除设备:ceph osd purge {id} --yes-i-really-mean-it

若类似如下的 OSD 的配置信息存在于 ceph.conf 配置文件中,管理员在删除 OSD 之后手动将其删除。

不过,对于 Luminous 之前的版本来说,管理员需要依次手动执行如下步骤删除 OSD 设备:

1. 于 CRUSH 运行图中移除设备:ceph osd crush remove {name}
2. 移除 OSD 的认证 key:ceph auth del osd.{osd-num}
3. 最后移除 OSD 设备:ceph osd rm {osd-num

4.22、测试上传与下载数据

存取数据时,客户端必须首先连接至 RADOS 集群上某存储池,然后根据对象名称由相关的CRUSH 规则完成数据对象寻址。于是,为了测试集群的数据存取功能,这里首先创建一个用于测试的存储池 mypool,并设定其 PG 数量为 32 个

创建 pool:

[ceph@deploy ceph-cluster]$ ceph osd pool create mypool 32 32 #32PG 和 32PGP
pool 'mypool' created

[ceph@deploy ceph-cluster]$ ceph osd pool ls
mypool
[ceph@deploy ceph-cluster]$ rados lspools
mypool

当前的 ceph 环境还没还没有部署使用块存储和文件系统使用 ceph,也没有使用对象存储的客户端,但是 ceph 的 rados 命令可以实现访问 ceph 对象存储的功能:

上传文件:

[ceph@deploy ceph-cluster]$ sudo rados put msg1 /var/log/messages --pool=mypool

列出文件:

[ceph@deploy ceph-cluster]$ rados ls --pool=mypool
msg1

文件信息:

ceph osd map 命令可以获取到存储池中数据对象的具体位置信息:

[ceph@deploy ceph-cluster]$ ceph osd map mypool msg1
osdmap e64 pool 'mypool' (1) object 'msg1' -> pg 1.c833d430 (1.10) -> up ([5,14,0], p5) acting ([5,14,0], p5)

表示文件放在了存储池为 1 的 c833d430 的 PG 上,在线的 OSD 编号 5,14,0,主 OSD 为 5,活动的 OSD 5,14,0,表示数据放在了 3 个副本,具体是 ceph 的 crush 算法计算出三份数据保存在哪些 OSD。

下载文件:

[ceph@deploy ceph-cluster]$ sudo rados get msg1 --pool=mypool /opt/my.txt

[ceph@deploy ceph-cluster]$ ll /opt/
total 1384
-rw-r--r-- 1 root root 1415669 Jan  6 10:41 my.txt
[ceph@deploy ceph-cluster]$ head /opt/my.txt
Nov  8 14:54:25 ubuntu2004 journal: Runtime journal is using 8.0M (max allowed 188.5M, trying to leave 282.8M free of 1.8G available → current limit 188.5M).
Nov  8 14:54:25 ubuntu2004 kernel: Initializing cgroup subsys cpuset
Nov  8 14:54:25 ubuntu2004 kernel: Initializing cgroup subsys cpu
Nov  8 14:54:25 ubuntu2004 kernel: Initializing cgroup subsys cpuacct
Nov  8 14:54:25 ubuntu2004 kernel: Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020
Nov  8 14:54:25 ubuntu2004 kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap biosdevname=0 net.ifnames=0 rhgb quiet LANG=en_US.UTF-8
Nov  8 14:54:25 ubuntu2004 kernel: e820: BIOS-provided physical RAM map:
Nov  8 14:54:25 ubuntu2004 kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
Nov  8 14:54:25 ubuntu2004 kernel: BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
Nov  8 14:54:25 ubuntu2004 kernel: BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved

修改文件:

[ceph@deploy ceph-cluster]$ sudo rados put msg1 /etc/passwd --pool=mypool
[ceph@deploy ceph-cluster]$ sudo rados get msg1 --pool=mypool /opt/passwd.txt
[ceph@deploy ceph-cluster]$ cat /opt/passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
ceph:x:2023:2023::/home/ceph:/bin/bash

删除文件:

[ceph@deploy ceph-cluster]$ sudo rados rm msg1 --pool=mypool
[ceph@deploy ceph-cluster]$ rados ls --pool=mypool
[ceph@deploy ceph-cluster]$ 

5、扩展 ceph 集群实现高可用

主要是扩展 ceph 集群的 mon 节点以及 mgr 节点,以实现集群高可用。

5.1、扩展 ceph-mon 节点:

Ceph-mon 是原生具备自选举以实现高可用机制的 ceph 服务,节点数量通常是奇数。

[root@mon02 ~]# yum install -y ceph-mon

[ceph@deploy ceph-cluster]$ ceph-deploy mon add mon02
图片[11]-部署 ceph-李佳程的个人主页
[root@mon03 ~]# yum install -y ceph-mon

[ceph@deploy ceph-cluster]$ ceph-deploy mon add mon03
图片[12]-部署 ceph-李佳程的个人主页

5.2、验证 ceph-mon 状态

[ceph@deploy ceph-cluster]$  ceph quorum_status --format json-pretty

{
    "election_epoch": 12,
    "quorum": [
        0,
        1,
        2
    ],
    "quorum_names": [
        "mon01",
        "mon02",
        "mon03"
    ],
    "quorum_leader_name": "mon01",
    "monmap": {
        "epoch": 3,
        "fsid": "845224fe-1461-48a4-884b-99b7b6327ae9",
        "modified": "2023-01-06 10:48:24.304337",
        "created": "2023-01-06 10:01:05.622224",
        "features": {
            "persistent": [
                "kraken",
                "luminous",
                "mimic",
                "osdmap-prune"
            ],
            "optional": []
        },
        "mons": [
            {
                "rank": 0,
                "name": "mon01",
                "addr": "192.168.1.114:6789/0",
                "public_addr": "192.168.1.114:6789/0"
            },
            {
                "rank": 1,
                "name": "mon02",
                "addr": "192.168.1.115:6789/0",
                "public_addr": "192.168.1.115:6789/0"
            },
            {
                "rank": 2,
                "name": "mon03",
                "addr": "192.168.1.116:6789/0",
                "public_addr": "192.168.1.116:6789/0"
            }
        ]
    }
}

验证 ceph 集群状态:

[ceph@deploy ceph-cluster]$ ceph -s
  cluster:
    id:     845224fe-1461-48a4-884b-99b7b6327ae9
    health: HEALTH_WARN
            too few PGs per OSD (6 < min 30)

  services:
    mon: 3 daemons, quorum mon01,mon02,mon03
    mgr: mgr01(active)
    osd: 15 osds: 15 up, 15 in

  data:
    pools:   1 pools, 32 pgs
    objects: 0  objects, 0 B
    usage:   15 GiB used, 1.5 TiB / 1.5 TiB avail
    pgs:     32 active+clean

5.3、扩展 mgr 节点

[root@mgr02 ~]# yum install -y ceph-mgr

[ceph@deploy ceph-cluster]$ ceph-deploy mgr create mgr02

# 同步配置文件到
mgr02节点
[ceph@deploy ceph-cluster]$ ceph-deploy admin mgr02

5.4、验证 mgr 节点状态

[ceph@deploy ceph-cluster]$ ceph -s
  cluster:
    id:     845224fe-1461-48a4-884b-99b7b6327ae9
    health: HEALTH_WARN
            too few PGs per OSD (6 < min 30)

  services:
    mon: 3 daemons, quorum mon01,mon02,mon03
    mgr: mgr01(active), standbys: mgr02
    osd: 15 osds: 15 up, 15 in

  data:
    pools:   1 pools, 32 pgs
    objects: 0  objects, 0 B
    usage:   15 GiB used, 1.5 TiB / 1.5 TiB avail
    pgs:     32 active+clean

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享