ceph集群搭建到应用从入门到熟练,包含块存储、对象存储、cephfs的应用、cephx认证等

ceph-deploy比较适合生产环境,不是用cephadm搭建。相对麻烦一些,但是并不难,细节把握好就行,只是命令多一些而已。

ceph理论知识

略…

ceph集群实验环境

服务器主机public网段IP(对外服务)cluster网段IP(集群通信)角色
deploy192.168.2.120用于部署集群、管理集群
ceph-node1192.168.2.121192.168.6.135ceph-mon、ceph-mgr、ceph-osd
ceph-node2192.168.2.122192.168.6.136ceph-mon、ceph-mgr、ceph-osd
ceph-node3192.168.2.123192.168.6.137ceph-mon、ceph-osd
ceph-osd节点:1. 一般建议裸金属部署。2. 配置为:10c\12c, 32G、64G更好。ceph-mgr节点:两个节点就可以做高可用了,当然可以用更多节点。ceph-mon必须3个节点以上。
ceph-mon性能可以低一点,比如跑虚拟机上。4c8g也够用,4C16G更好。集群搭建和使用过程中,还会设计rgw、mds等节点会与上面的ceph-node1至ceph-node3、ceph-deploy节点混用,因为我没有这么多机器。生产环境,如果可以就将ceph-mgr、ceph-mon节点都单独分开,不能的话ceph-mgr和ceph-mon也可以混用。

集群搭建

准备工作

关闭防火墙、关闭selinux

systemctl disable firewalld
systemctl stop firewalld
setenforce 0
sed -i '7s/enforcing/disabled/' /etc/selinux/config

设置每台服务的hostname

hostnamectl set-hostname ceph-node1
hostnamectl set-hostname ceph-node2
hostnamectl set-hostname ceph-node3
hostnamectl set-hostname ceph-deploy

设置host相互解析

192.168.2.120 ceph-deploy
192.168.2.121 ceph-node1
192.168.2.122 ceph-node2
192.168.2.123 ceph-node3

每台服务器添加好epel源

[epel]
name=Extra Packages for Enterprise Linux 7 -
baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 -  - Debug
baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1[epel-source]
name=Extra Packages for Enterprise Linux 7 -  - Source
baseurl=http://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

每台服务器添加ceph的源

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc

每天服务器添加ceph用户

groupadd  ceph -g 3333
useradd -u 3333 -g 3333 ceph
echo "cephadmin888" | passwd --stdin ceph

每台服务配置sudoer配置文件,允许ceph用户执行所有sudo命令

echo "ceph    ALL=(ALL)       NOPASSWD:ALL" >> /etc/sudoers

ceph-deploy节点生产ssh密钥

# 切换到ceph用户,切记一定要切换再做..不然免密就是免密你当前的用户,因为后续要用ceph用户来部署。
su - ceph
# 生成ssh密钥
ssh-keygen

复制ssh密钥到ceph-node1、ceph-node2、ceph-node3节点

sudo ssh-copy-id ceph@192.168.2.121
sudo ssh-copy-id ceph@192.168.2.122
sudo ssh-copy-id ceph@192.168.2.123

开始部署集群

在ceph-deploy节点创建目录

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

安装ceph-deploy包

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

安装成功后可以查看ceph-deploy命令是否能够使用

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy 
usage: ceph-deploy [-h] [-v | -q] [--version] [--username USERNAME][--overwrite-conf] [--ceph-conf CEPH_CONF]COMMAND ...

查看ceph-deploy的版本

ceph-deploy 2.0.1默认安装mimic的ceph版本(也就是13.2.10),如果需要安装其他版本ceph,可以使用–release来指定

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy --version
2.0.1

执行ceph-deploy install命令初始化osd节点

在ceph-deploy节点通过执行install命令,为ceph集群中的osd节点安装ceph相关包

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy install --help
usage: ceph-deploy install [-h] [--stable [CODENAME] | --release [CODENAME] |--testing | --dev [BRANCH_OR_TAG]][--dev-commit [COMMIT]] [--mon] [--mgr] [--mds][--rgw] [--osd] [--tests] [--cli] [--all][--adjust-repos | --no-adjust-repos | --repo][--local-mirror [LOCAL_MIRROR]][--repo-url [REPO_URL]] [--gpg-url [GPG_URL]][--nogpgcheck]HOST [HOST ...]Install Ceph packages on remote hosts.positional arguments:HOST                  hosts to install on
... 等选项,此处忽略# 这里有2个比较重要的选项,分别是:
--no-adjust-repos     install packages without modifying source repos # 不要去修改ceph的repo源,因为我们前面已经将源改成清华的源了,等下它给你改回来就慢的要死
--nogpgcheck          install packages without gpgcheck # 跳过gpg校验

执行命令:

# p.s:ceph-node{1..3} 中的{1..3}这个是linux中的一个循环运算,比如用在for循环中
# 实际上生产命令:ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3# 执行该命令进行安装
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node{1..3}

执行过程就忽略了,执行成功后有类似提示,如下:

[ceph-node3][DEBUG ] 完毕!
[ceph-node3][INFO  ] Running command: sudo ceph --version
[ceph-node3][DEBUG ] ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)

执行ceph-deploy new命令执行ceph集群初始化

# 查看ceph-deploy new子命令的帮助信息
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy new --help
usage: ceph-deploy new [-h] [--no-ssh-copykey] [--fsid FSID][--cluster-network CLUSTER_NETWORK][--public-network PUBLIC_NETWORK]MON [MON ...]Start deploying a new cluster, and write a CLUSTER.conf and keyring for it.positional arguments:MON                   initial monitor hostname, fqdn, or hostname:fqdn pairoptional arguments:-h, --help            show this help message and exit--no-ssh-copykey      do not attempt to copy SSH keys--fsid FSID           provide an alternate FSID for ceph.conf generation--cluster-network CLUSTER_NETWORKspecify the (internal) cluster network--public-network PUBLIC_NETWORKspecify the public network for a cluster

执行命令:

# 由于我是将mon也放到osd节点上,所以这里就是ceph-node1、ceph-node2、ceph-node3了
# 生产环境,建议将mon单独服务器节点。
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy new --cluster-network 192.168.6.0/24 --public-network 192.168.2.0/24  ceph-node1 ceph-node2 ceph-node3
[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.6.0/24 --public-network 192.168.2.0/24 ceph-node1 ceph-node2
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  func                          : <function new at 0x7fa768c08de8>
[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 0x7fa76837f8c0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  ssh_copykey                   : True
[ceph_deploy.cli][INFO  ]  mon                           : ['ceph-node1', 'ceph-node2']
[ceph_deploy.cli][INFO  ]  public_network                : 192.168.2.0/24
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  cluster_network               : 192.168.6.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
[ceph-node1][DEBUG ] connected to host: ceph-deploy 
[ceph-node1][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph-node1][DEBUG ] find the location of an executable
[ceph-node1][INFO  ] Running command: sudo /usr/sbin/ip link show
[ceph-node1][INFO  ] Running command: sudo /usr/sbin/ip addr show
[ceph-node1][DEBUG ] IP addresses found: [u'192.168.2.121', u'192.168.6.135']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node1
[ceph_deploy.new][DEBUG ] Monitor ceph-node1 at 192.168.2.121
[ceph_deploy.new][INFO  ] making sure passwordless SSH succeeds
[ceph-node2][DEBUG ] connected to host: ceph-deploy 
[ceph-node2][INFO  ] Running command: ssh -CT -o BatchMode=yes ceph-node2
[ceph_deploy.new][WARNIN] could not connect via SSH
[ceph_deploy.new][INFO  ] will connect again with password prompt
The authenticity of host 'ceph-node2 (192.168.2.122)' can't be established.
ECDSA key fingerprint is SHA256:bFB9FzJjKEKMP2W5kW+orMbo9mD+tr8fLOPRsYaXhj8.
ECDSA key fingerprint is MD5:b7:e5:bd:6a:56:10:42:3d:34:3a:54:ac:79:a2:3c:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ceph-node2' (ECDSA) to the list of known hosts.
[ceph-node2][DEBUG ] connected to host: ceph-node2 
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph_deploy.new][INFO  ] adding public keys to authorized_keys
[ceph-node2][DEBUG ] append contents to file
[ceph-node2][DEBUG ] connection detected need for sudo
[ceph-node2][DEBUG ] connected to host: ceph-node2 
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph-node2][DEBUG ] find the location of an executable
[ceph-node2][INFO  ] Running command: sudo /usr/sbin/ip link show
[ceph-node2][INFO  ] Running command: sudo /usr/sbin/ip addr show
[ceph-node2][DEBUG ] IP addresses found: [u'192.168.6.136', u'192.168.2.122']
[ceph_deploy.new][DEBUG ] Resolving host ceph-node2
[ceph_deploy.new][DEBUG ] Monitor ceph-node2 at 192.168.2.122
[ceph_deploy.new][DEBUG ] Monitor initial members are ['ceph-node1', 'ceph-node2']
[ceph_deploy.new][DEBUG ] Monitor addrs are [u'192.168.2.121', u'192.168.2.122']
[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@ceph-deploy ceph-cluster-deploy]$ ll
总用量 16
-rw-rw-r-- 1 ceph ceph  292 12月 22 12:10 ceph.conf  # conf是ceph集群的配置文件
-rw-rw-r-- 1 ceph ceph 5083 12月 22 12:10 ceph-deploy-ceph.log # 日志
-rw------- 1 ceph ceph   73 12月 22 12:10 ceph.mon.keyring # 这个是ceph集群的密钥# 查看ceph.conf
[ceph@ceph-deploy ceph-cluster-deploy]$ cat ceph.conf 
[global]
fsid = f1da3a2e-b8df-46ba-9c6b-0030da25c73e
public_network = 192.168.2.0/24
cluster_network = 192.168.6.0/24
mon_initial_members = ceph-node1, ceph-node2
mon_host = 192.168.2.121,192.168.2.122
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

配置mon节点

安装ceph-mon包

如果是独立的mon节点,记得检查各个mon节点中是否安装了ceph-mon包

yum install -y ceph-mon

初始化mon节点

切换回ceph-deploy节点

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy mon create-initial

执行完成后回发现又多了一些配置文件,这些文件都是非常重要的,类似k8s中的kubeconfig,不要随意泄露。

[ceph@ceph-deploy ceph-cluster-deploy]$ ll
总用量 476
-rw------- 1 ceph ceph    113 12月 22 13:11 ceph.bootstrap-mds.keyring
-rw------- 1 ceph ceph    113 12月 22 13:11 ceph.bootstrap-mgr.keyring
-rw------- 1 ceph ceph    113 12月 22 13:11 ceph.bootstrap-osd.keyring
-rw------- 1 ceph ceph    113 12月 22 13:11 ceph.bootstrap-rgw.keyring
-rw------- 1 ceph ceph    151 12月 22 13:11 ceph.client.admin.keyring
-rw-rw-r-- 1 ceph ceph    292 12月 22 12:11 ceph.conf
-rw-rw-r-- 1 ceph ceph 207826 12月 22 13:17 ceph-deploy-ceph.log
-rw------- 1 ceph ceph     73 12月 22 12:11 ceph.mon.keyring

而且对应的mon节点上的服务器,运行的mon服务

ceph-mon@.service
从此处链接:
/etc/systemd/system/ceph-mon.target.wants/ceph-mon@<mon节点主机名>.service

并且也有对应的进程

[root@ceph-node3 ~]# ps axu | grep non
ceph        2614  0.5  2.1 470596 39944 ?        Ssl  13:17   0:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-node3 --setuser ceph --setgroup ceph

推送管理密钥到节点

推送密钥到各个osd节点、或者你需要使用ceph集群管理的节点。不推送你就得每次自己指定密钥,比较麻烦。。。

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy admin ceph-node{1..3}# 推送给自己,因为我这里是用同一个服务器来部署和管理ceph集群
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy admin ceph-deploy

设置密钥的facl权限

在各个node节点上设置文件facl,因为推送过去的密码默认属主和属组都是root用户,但是我们前面是创建ceph用户用于管理ceph集群

# 可以在root用户下设置,也可以用sudo# ceph-node1
[root@ceph-node1 ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring 
[root@ceph-node1 ~]# getfacl /etc/ceph/ceph.client.admin.keyring
getfacl: Removing leading '/' from absolute path names
# file: etc/ceph/ceph.client.admin.keyring
# owner: root
# group: root
user::rw-
user:ceph:rw-
group::---
mask::rw-
other::---# ceph-node2 和 ceph-node3 类似# 因为我打算在deploy节点同时管理ceph,也就是admin和deploy是同一个节点,所以这里也要给ddeploy节点设置facl
[root@ceph-deploy ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring 

配置mgr节点

只有ceph luminios和以上的版本才有mgr节点,老版本并没有,所以老版本不需要部署。

但是我们部署的是安装mimic的ceph版本(也就是13.2.10),所以需要部署。

安装ceph-mgr包

如果是独立的mgr节点服务器,记得检查是否安装了ceph-mgr包

yum install -y ceph-mgr

ceph-mgr命令选项:

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy mgr --help
usage: ceph-deploy mgr [-h] {create} ...Ceph MGR daemon managementpositional arguments:{create}create    Deploy Ceph MGR on remote host(s)optional arguments:-h, --help  show this help message and exit

添加mgr节点

执行命令,初始化mgr节点

# 由于我是osd、mon、mgr混用服务器,所以这里就用ceph-node1、ceph-node2了。
ceph-deploy mgr create ceph-node1 ceph-node2

检查ceph集群状态

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph -scluster:id:     f1da3a2e-b8df-46ba-9c6b-0030da25c73ehealth: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3mgr: ceph-node1(active), standbys: ceph-node2osd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:     

添加osd节点

每台服务器添加3块5G的硬盘作为测试。

添加osd到集群中

# 1.擦除osd节点上要被添加的磁盘的空间
ceph-deploy disk zap ceph-node1 /dev/sd{b,c,d}
ceph-deploy disk zap ceph-node2 /dev/sd{b,c,d}
ceph-deploy disk zap ceph-node3 /dev/sd{b,c,d}# 2.添加ceph-node1上的磁盘为osd
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy osd create ceph-node1 --data /dev/sdb
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy osd create ceph-node1 --data /dev/sdc
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy osd create ceph-node1 --data /dev/sdd# 3.添加ceph-node2上的磁盘为osd
ceph-deploy osd create ceph-node2 --data /dev/sdb
ceph-deploy osd create ceph-node2 --data /dev/sdc
ceph-deploy osd create ceph-node2 --data /dev/sdd# 4.添加ceph-node3上的磁盘为osd
ceph-deploy osd create ceph-node3 --data /dev/sdb
ceph-deploy osd create ceph-node3 --data /dev/sdc
ceph-deploy osd create ceph-node3 --data /dev/sdd# 5.添加完成后,会在对应的osd节点上添加osd服务(但只是runtime临时生效,必须将其改为永久生效)
如:/run/systemd/system/ceph-osd.target.wants/ceph-osd@7.service # 7是osd的id,从0开始。

检查osd状态

# 通过ceph-deploy可以检查
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy osd list ceph-node{1,2,3}# 通过ceph osd stat命令检查
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd stat
9 osds: 9 up, 9 in; epoch: e37# 使用 ceph osd status 查看
- `id`: OSD的唯一标识符。
- `host`: OSD所在的主机名
- `used`: OSD已使用的存储容量。
- `avail`: OSD可用的存储容量。
- `wr ops`: OSD每秒写入操作的数量。
- `wr data`: OSD每秒写入数据的数量。
- `rd ops`: OSD每秒读取操作的数量。
- `rd data`: OSD每秒读取数据的数量。
- `state`: OSD的状态,"exists"表示OSD存在,"up"表示OSD正常运行。
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd status
+----+------------+-------+-------+--------+---------+--------+---------+-----------+
| id |    host    |  used | avail | wr ops | wr data | rd ops | rd data |   state   |
+----+------------+-------+-------+--------+---------+--------+---------+-----------+
| 0  | ceph-node1 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 1  | ceph-node1 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 2  | ceph-node1 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 3  | ceph-node2 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 4  | ceph-node2 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 5  | ceph-node2 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 6  | ceph-node3 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 7  | ceph-node3 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
| 8  | ceph-node3 | 1028M | 4087M |    0   |     0   |    0   |     0   | exists,up |
+----+------------+-------+-------+--------+---------+--------+---------+-----------+# ceph osd tree 也可以
[root@ceph-node1 ~]# ceph osd tree
ID CLASS WEIGHT  TYPE NAME           STATUS REWEIGHT PRI-AFF 
-1       0.04408 root default                                
-3       0.01469     host ceph-node1                         0   hdd 0.00490         osd.0           up  1.00000 1.00000 1   hdd 0.00490         osd.1           up  1.00000 1.00000 2   hdd 0.00490         osd.2           up  1.00000 1.00000 
-5       0.01469     host ceph-node2                         3   hdd 0.00490         osd.3           up  1.00000 1.00000 4   hdd 0.00490         osd.4           up  1.00000 1.00000 5   hdd 0.00490         osd.5           up  1.00000 1.00000 
-7       0.01469     host ceph-node3                         6   hdd 0.00490         osd.6           up  1.00000 1.00000 7   hdd 0.00490         osd.7           up  1.00000 1.00000 8   hdd 0.00490         osd.8           up  1.00000 1.00000 # 这个是用来查看osd的disk free,类似linux的df
- `ID`: OSD的唯一标识符。
- `CLASS`: OSD的存储类别。
- `WEIGHT`: OSD的权重。
- `REWEIGHT`: OSD的重新加权比例。
- `SIZE`: OSD的总存储容量。
- `RAW USE`: OSD当前使用的原始存储容量。
- `DATA`: OSD数据存储使用量。
- `OMAP`: OSD的OMAP(Object Map)数据存储使用量。
- `META`: OSD元数据存储使用量。
- `AVAIL`: OSD可用的存储容量。
- `%USE`: OSD使用率百分比。
- `VAR`: OSD使用率方差。
- `PGS`: OSD分布的PG(Placement Group)数量。
- `STATUS`: OSD的状态,"up"表示OSD正常运行。[root@ceph-node1 ~]# ceph osd df
ID CLASS WEIGHT  REWEIGHT SIZE    USE     DATA    OMAP META  AVAIL   %USE  VAR  PGS 0   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 1   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 2   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 3   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 4   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 5   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 6   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 7   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 8   hdd 0.00490  1.00000 5.0 GiB 1.0 GiB 4.7 MiB  0 B 1 GiB 4.0 GiB 20.11 1.00   0 TOTAL  45 GiB 9.0 GiB  42 MiB  0 B 9 GiB  36 GiB 20.11          
MIN/MAX VAR: 1.00/1.00  STDDEV: 0

将ceph-osd服务设置开机启动

根据osd所在节点,添加对应的服务为开机启动

# ceph-node1
systemctl enable ceph-osd@{0,1,2}# ceph-node2
systemctl enable ceph-osd@{3,4,5}# ceph-node3
systemctl enable ceph-osd@{6,7,8}

管理相关

从rados中移除osd

移除的时候,最好一个个移除,不然有可能性能跟不上,因为ceph自己去找其他osd的备份来作为主,一旦一次性删除太多就可能出现性能问题。

# 停用osd
ceph osd out <osd-id># 停止osd服务
systemctl stop ceph-osd@<osd-id># 移除osd
ceph osd ourge <osd-id> --yes-i-really-mean-it# 检查ceph.conf集群配置文件中,是福哦还有对应osd的配置,如有则手动删除、###### Luminous 之前的版本,移除步骤如下 :
ceph osd crush remove <name>
ceph auth del osd <osd-id>
ceph osd rm <osd-id>

手动测试数据上传、下载

# 通过rados创建pool
rados mkpool <pool-name> [123[ 4]]  create pool <pool-name>'[with auid 123[and using crush rule 4]]# 通过ceph 命令创建pool
ceph osd pool create <poolname> <int[0-]> {<int[0-]>} {replicated|erasure} {<erasure_code_profile>}          create pool{<rule>} {<int>}    ceph osd pool  create <pool名> <pg值> <pg备份值># 上传文件到指定的pool
[ceph@ceph-deploy ceph-cluster-deploy]$ rados put myfile /etc/fstab -p swq-test
# 列出指定pool中的文件
[ceph@ceph-deploy ceph-cluster-deploy]$ rados ls -p swq-test
myfile# 下载文件
[ceph@ceph-deploy ceph-cluster-deploy]$ rados get myfile -p swq-test /tmp/my.txt
[ceph@ceph-deploy ceph-cluster-deploy]$ cat /tmp/my.txt #
# /etc/fstab
# Created by anaconda on Thu Dec 21 23:51:13 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4b1bb372-7f34-48f6-8852-036ee6dfd125 /boot  # 查看文件的映射关系
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd map swq-test myfile
osdmap e43 pool 'swq-test' (2) object 'myfile' -> pg 2.423e92f7 (2.17) -> up ([5,6,2], p5) acting ([5,6,2], p5)# 在哪个pg中?
# 	pg为2的423e92f7中。
# -> pg 2.423e92f7 (2.17) # 在哪个osd中?
# 	这里是在5,6,2这3个osd中,主osd为:5
# 	acting是目前活动的osd
# -> up ([5,6,2], p5) acting ([5,6,2], p5)

扩展ceph集群中的mon节点

mon节点必须是3个或者以上奇数

# 假设现在有一个ceph-mon4的主机
ceph-mon4  
public network ip: 192.168.2.124
cluster ip: 192.168.6.137# 在需要成为mon节点的服务器上安装包
yum install -y ceph-common ceph-mon
# 在每个节点上添加hosts解析
192.168.2.124    ceph-mon4# ssh登录到ceph-deploy节点,下面的命令都在ceph-deploy节点执行# 切换为ceph用户
su - ceph# 切换到之前部署的目录中
cd ceph-cluster-deploy# 将ceph-mon4节点添加到mon集群中
ceph-deploy mon add ceph-mon4# 验证ceph-mon状态
ceph quorum_status --format json-pretty
# 或者执行ceph -s 也可以
ceph -s

扩展ceph集群中的mgr节点

# 在需要成为mgr节点的服务器上安装包
yum install ceph-mgr##### 切换到ceph-deploy节点,以下命令都需要在该节点上执行
# 登录ceph用户
su - ceph# 切换到之前部署的文件夹下
cd ceph-deploy-cluster# 添加mgr节点 (由于我这里是将osd节点也当作mgr节点,所以直接用ceph-node3了)
# 如果是生产环境分开部署的话,一样需要添加hosts解析、ssh免密登录等
ceph-deploy mgr create ceph-node3

ceph集群的应用

块存储(RBD)

用于K8S、openstack、linux中直接挂载。类似使用iscsi块存储一样。

块存储使用案例

# 1. 创建存储池
# 语法:ceph osd pool create <存储池名> <PG> [<PGP>] [{replicated|erasure}]
# 	PG: 指定存储池的pg数量
# 	PGP: 指定存储池pgp数量,一般与pg相同。不填写默认就是和PG一样【可选】
# 	replicated 副本池(默认)【可选】
# 	erasure 纠错码池 (monio有用到)【可选】# 1.1 创建名为django-web的存储池
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool create django-web 16
pool 'django-web' created# 1.2 查看存储池
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd lspools
... # 此处省略,是我之前创建的存储池
3 django-web# 2. 开启存储池的RDB功能
语法:ceph osd pool application enable <poolname> <app> {--yes-i-really-mean-it}# 2.1 开启django-web存储池的RBD功能
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool application enable django-web rbd
enabled application 'rbd' on pool 'django-web'# 2.2 通过rbd命令对存储池进行初始化
[ceph@ceph-deploy ceph-cluster-deploy]$ rbd pool init -p django-web# 3. 此时还不能直接挂载rbd,还需要创建img对象。
#   一个存储池可以有多个镜像img,需要通过img进行进行挂载。
语法: rbd create [--pool <pool>] [--image <image>] [--image-feature <image-feature>] --size <size> [--no-progress] # --image-feature用来指定镜像的特性,因为在某些linux内核较低的发行版本(如centos7),有些功能用不了,一旦你挂载的时候就会报错。)# 默认开启的特性:  --image-feature arg       image features[layering(+), exclusive-lock(+*), object-map(+*),fast-diff(+*), deep-flatten(+-), journaling(*)]Image Features:(*) supports enabling/disabling on existing images(-) supports disabling-only on existing images(+) enabled by default for new images if features not specified# 3.1 创建img镜像文件
[ceph@ceph-deploy ceph-cluster-deploy]$ rbd create --pool django-web --image img001 --size 1G
# 虽然后面可以修改img的特性,不过我特意再创建多一个img镜像img002,因为等下我要用centos7来挂载,
[ceph@ceph-deploy ceph-cluster-deploy]$ rbd create --pool django-web --image img002 --size 1G --image-feature layering# 3.2 查看django-web存储池下的img镜像有哪些?
[ceph@ceph-deploy ceph-cluster-deploy]$ rbd ls -p django-web
img001
img002# 3.3 查看img的配置信息
[ceph@ceph-deploy ceph-cluster-deploy]$ rbd -p django-web --image img001 info
rbd image 'img001':size 1 GiB in 256 objects # 一个256个对象order 22 (4 MiB objects) # 每个对象4M , 4*256=1024M=1Gid: 282f76b8b4567block_name_prefix: rbd_data.282f76b8b4567format: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 这里就是开启了什么特性op_features: flags: create_timestamp: Mon Dec 25 18:56:14 2023# 4. 客户端安装ceph-common包(不安装用不了挂载)
# 配置epel源、配置ceph源,然后再安装ceph-common包
yum install -y ceph-common# 4.1 复制admin权限的认证权限keyring文件(这里暂时用admin的,后续学习cephx认证后用普通用户)
# 生产环境一般也是用普通用户,绝不会用admin权限
scp ceph.client.admin.keyring root@xxxxx:/etc/ceph# 4.2 挂载rbd存储
usage: rbd map [--device-type <device-type>] [--pool <pool>] [--image <image>] [--snap <snap>] [--read-only] [--exclusive] [--options <options>] <image-or-snap-spec> 
Map an image to a block device.# 4.2.1 开始挂载
# 由于内核版本太低,有些特性不支持,所以会报错
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo rbd map -p django-web --image img001
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable django-web/img001 object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
# 报错的同时还会提示你如何通过关闭img镜像的特性来解决
# rbd feature disable django-web/img001 object-map fast-diff deep-flatten# 我这里就不关闭了,直接挂载之前创建的img002
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo rbd map -p django-web --image img002
/dev/rbd0  # 从命令的返回结果可以看到,已经将其挂载到/deb/rbd0这个文件上# 4.2.2 查看块设备 lsblk
[ceph@ceph-deploy ceph-cluster-deploy]$ lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 19.5G  0 part └─centos-root 253:0    0 19.5G  0 lvm  /
sr0              11:0    1 1024M  0 rom  
rbd0            252:0    0    1G  0 disk # 4.3 格式化/deb/rbd0
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo mkfs.ext4 /dev/rbd0 
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: 完成                            
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=1024 blocks, Stripe width=1024 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成# 4.4 挂载到指定目录
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo mkdir /mnt/ceph-rbd-dir
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo mount /dev/rbd0 /mnt/ceph-rbd-dir/# 4.5 切换到root用户,往挂载的目录写入数据进行测试
[root@ceph-deploy ~]# echo hahaha >  /mnt/ceph-rbd-dir/1.txt
[root@ceph-deploy ~]# cat /mnt/ceph-rbd-dir/1.txt
hahaha# 配置开机挂载
systemctl enable rc-local
vim /etc/rc.local
# 添加以下两行命令
rbd map -p django-web --image img001 [--id <ceph用户名,不需要client前缀>]
mount /dev/rbd0 /mnt/ceph-rbd-dir/

对象存储ceph radosgw(RGW)

RGW提供restful接口,客户端通过请求api接口进行交互,从而进行数据的增删改查。
这种一般都是开发app调用。

使用前提

需将要某个节点添加为rgw节点

通过7480端口来访问对象存储,并提供key来访问校验权限。

案例-对象存储搭建

# 比如:将ceph-node2 添加为rgw节点# 1. 在需要成为rgw节点的服务器上安装 ceph-radosgw 包
yum install -y ceph-radosgw# 2. 在ceph-deploy节点上添加某个节点成为rgw节点
# 这个操作,将会在rgw节点上添加一个名为:ceph-radosgw@rgw.<节点名>的服务,并设置为开机启动
# 然后rgw节点上会监听7480端口
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy rgw create ceph-node2
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy rgw create ceph-node2
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  rgw                           : [('ceph-node2', 'rgw.ceph-node2')]
[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 0x7f56cd7c2cf8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function rgw at 0x7f56cde08050>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.rgw][DEBUG ] Deploying rgw, cluster ceph hosts ceph-node2:rgw.ceph-node2
[ceph-node2][DEBUG ] connection detected need for sudo
[ceph-node2][DEBUG ] connected to host: ceph-node2 
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.9.2009 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to ceph-node2
[ceph-node2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node2][WARNIN] rgw keyring does not exist yet, creating one
[ceph-node2][DEBUG ] create a keyring file
[ceph-node2][DEBUG ] create path recursively if it doesn't exist
[ceph-node2][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.ceph-node2 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.ceph-node2/keyring
[ceph-node2][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.ceph-node2
[ceph-node2][WARNIN] Created symlink from /etc/systemd/system/ceph-radosgw.target.wants/ceph-radosgw@rgw.ceph-node2.service to /usr/lib/systemd/system/ceph-radosgw@.service.
[ceph-node2][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.ceph-node2
[ceph-node2][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host ceph-node2 and default port 7480# 3. 另外,启动rgw后会默认生成与其相关的pool
[root@ceph-node2 ~]# ceph osd lspools
... # 此处省略其他pool
3 django-web
4 .rgw.root
5 default.rgw.control
6 default.rgw.meta
7 default.rgw.log# 4. 通过ceph -s 也可以看到有一个rgw
[root@ceph-node2 ~]# ceph -s cluster:id:     f1da3a2e-b8df-46ba-9c6b-0030da25c73ehealth: HEALTH_WARNapplication not enabled on 1 pool(s)too few PGs per OSD (29 < min 30)services:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3mgr: ceph-node2(active), standbys: ceph-node3, ceph-node1osd: 9 osds: 9 up, 9 inrgw: 1 daemon activedata:pools:   7 pools, 88 pgsobjects: 211  objects, 37 MiBusage:   9.2 GiB used, 36 GiB / 45 GiB availpgs:     88 active+clean

rgw高可用搭建(使对象存储对外提供高可用服务)

之前只将ceph-node2添加为rgw节点,目前只是单节点,没有实现高可用。

一般生产环境可以添加多个节点成为rgw节点,然后通过nginx反代多个rgw节点的7480端口。

# 切换到ceph-deploy节点,并添加ceph-node1为rgw节点
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy rgw create ceph-node1
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy rgw create ceph-node1
[ceph_deploy.cli][INFO  ] ceph-deploy options:
[ceph_deploy.cli][INFO  ]  username                      : None
[ceph_deploy.cli][INFO  ]  verbose                       : False
[ceph_deploy.cli][INFO  ]  rgw                           : [('ceph-node1', 'rgw.ceph-node1')]
[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 0x7fb193e27cf8>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function rgw at 0x7fb19446d050>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.rgw][DEBUG ] Deploying rgw, cluster ceph hosts ceph-node1:rgw.ceph-node1
[ceph-node1][DEBUG ] connection detected need for sudo
[ceph-node1][DEBUG ] connected to host: ceph-node1 
[ceph-node1][DEBUG ] detect platform information from remote host
[ceph-node1][DEBUG ] detect machine type
[ceph_deploy.rgw][INFO  ] Distro info: CentOS Linux 7.9.2009 Core
[ceph_deploy.rgw][DEBUG ] remote host will use systemd
[ceph_deploy.rgw][DEBUG ] deploying rgw bootstrap to ceph-node1
[ceph-node1][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node1][WARNIN] rgw keyring does not exist yet, creating one
[ceph-node1][DEBUG ] create a keyring file
[ceph-node1][DEBUG ] create path recursively if it doesn't exist
[ceph-node1][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-rgw --keyring /var/lib/ceph/bootstrap-rgw/ceph.keyring auth get-or-create client.rgw.ceph-node1 osd allow rwx mon allow rw -o /var/lib/ceph/radosgw/ceph-rgw.ceph-node1/keyring
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph-radosgw@rgw.ceph-node1
[ceph-node1][WARNIN] Created symlink from /etc/systemd/system/ceph-radosgw.target.wants/ceph-radosgw@rgw.ceph-node1.service to /usr/lib/systemd/system/ceph-radosgw@.service.
[ceph-node1][INFO  ] Running command: sudo systemctl start ceph-radosgw@rgw.ceph-node1
[ceph-node1][INFO  ] Running command: sudo systemctl enable ceph.target
[ceph_deploy.rgw][INFO  ] The Ceph Object Gateway (RGW) is now running on host ceph-node1 and default port 7480# 查看ceph集群状态,可以发现rgw变成了2个
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph -scluster:id:     f1da3a2e-b8df-46ba-9c6b-0030da25c73ehealth: HEALTH_WARNapplication not enabled on 1 pool(s)services:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3mgr: ceph-node2(active), standbys: ceph-node1, ceph-node3mds: cephfs-test-1/1/1 up  {0=ceph-node3=up:active}, 1 up:standbyosd: 9 osds: 9 up, 9 inrgw: 2 daemons activedata:pools:   9 pools, 120 pgsobjects: 234  objects, 37 MiBusage:   9.2 GiB used, 36 GiB / 45 GiB availpgs:     120 active+clean

修改radosgw内置的citeweb服务的端口7480

# vim /etc/ceph.conf[client.rgw.<节点名>]
rgw_host=<节点名 或者 节点IP地址>
rgw_frontends="civetweb port=8880" # 这里只是修改http端口, 如果需要https端口,要修改为:
rgw_frontends="civetweb port=8880+8443s"# 添加ssl证书
rgw_frontends="civetweb port=8880+8443s ssl_certificate='pem证书'# civetweb默认的请求处理线程数
num_threads=50 # 默认就是50
access_log_file="log path" # 设置access log记录位置
error_log_file="log path" # 设置error log记录文件# 重启节点上的rgw服务
systemctl restart ceph-radosgw@rgw.<节点名>

文件系统存储ceph-fs

性能不如块存储,一般能用块存储就用块存储。
类似NFS,ceph-fs只不过是使用ceph协议并挂载存储使用而已。相对NFS性能更好。

cephfs需要使用mds服务(ceph-mds -> metadata-server)

另外:创建好ceph-fs后,会在各个mon节点上监听6789端口。挂载的时候可以随意挂任意节点mon的6789,也可以搞个haproxy或nginx来代理。也可以在挂载的时候同时指定多个mon节点。

案例-cephfs搭建与使用

这个案例的mds服务是单点,后期需要解决单点mds服务的问题

1. 在成为mds的节点上安装ceph-mds包
yum install -y ceph-mds
2. 在ceph-deploy节点上,将某节点添加为ceph-mds节点
# 2. 在ceph-deploy节点上,将某节点添加为ceph-mds节点
# 此操作会将成为mds节点的服务器上添加服务:ceph-mds@<节点名>
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy mds create ceph-node3
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy mds create ceph-node3
[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
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f93208594d0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mds at 0x7f9320aa7ed8>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  mds                           : [('ceph-node3', 'ceph-node3')]
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph-node3:ceph-node3
[ceph-node3][DEBUG ] connection detected need for sudo
[ceph-node3][DEBUG ] connected to host: ceph-node3 
[ceph-node3][DEBUG ] detect platform information from remote host
[ceph-node3][DEBUG ] detect machine type
[ceph_deploy.mds][INFO  ] Distro info: CentOS Linux 7.9.2009 Core
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph-node3
[ceph-node3][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node3][WARNIN] mds keyring does not exist yet, creating one
[ceph-node3][DEBUG ] create a keyring file
[ceph-node3][DEBUG ] create path if it doesn't exist
[ceph-node3][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-node3 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-node3/keyring
[ceph-node3][INFO  ] Running command: sudo systemctl enable ceph-mds@ceph-node3
[ceph-node3][WARNIN] Created symlink from /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-node3.service to /usr/lib/systemd/system/ceph-mds@.service.
[ceph-node3][INFO  ] Running command: sudo systemctl start ceph-mds@ceph-node3
[ceph-node3][INFO  ] Running command: sudo systemctl enable ceph.target
3. 此时mds还不能使用,需要创建存储池用于保存mds的数据
# 3. 此时mds还不能使用,需要创建存储池用于保存mds的数据
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph mds stat
, 1 up:standby# 3.1 创建metedata专用的存储池
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool create cephfs-metadata-pool 16
pool 'cephfs-metadata-pool' created# 3.2 创建存储实际数据的存储池
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool create cephfs-data-pool 16
pool 'cephfs-data-pool' created
4. 创建ceph-fs文件系统
# 4. 创建ceph-fs文件系统
# make new filesystem using named pools <metadata> and <data>
语法: ceph fs new <fs_name> <metadata> <data> {--force} {--allow-dangerous-metadata-overlay}<metadata>: 指定metadata存储池<data>: 指定data的存储池# 4.1 
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs new cephfs-test cephfs-metadata-pool cephfs-data-pool
new fs with metadata pool 8 and data pool 9
5.查看ceph fs
# 5.查看ceph fs
# 通过ceph fs status查看
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs status
cephfs-test - 0 clients
===========
+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | ceph-node3 | Reqs:    0 /s |   10  |   13  |
+------+--------+------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 2286  | 11.1G |
|   cephfs-data-pool   |   data   |    0  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
+-------------+
MDS version: ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)# 5.1 通过ceph fs ls查看
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs ls
name: cephfs-test, metadata pool: cephfs-metadata-pool, data pools: [cephfs-data-pool ]# 5.2 通过ceph mds stat 查看
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph mds stat
cephfs-test-1/1/1 up  {0=ceph-node3=up:active}
6. 挂载ceph-fs到客户端
# 6. 挂载ceph-fs到客户端
# 6.1 需要挂载的客户端,需要安装ceph-common,
yum install -y ceph-common# 6.2 并且需要授权文件,这里就复制admin的,生产环境不要用admin,和上面的rbd和radosgw一样。
scp # 6.3 使用mount.ceph挂载ceph-fs
[ceph@ceph-deploy ceph-cluster-deploy]$ mount.ceph -h
mount.ceph monaddr1[,monaddr2,...]:/[subdir] dir [-o options ]src用于指定服务器和端口, 端口不指定默认为67891. 主机名 或者 主机名:端口2. ip  或 ip:端口
options:-h: Print this help-n: Do not update /etc/mtab-v: Verboseceph-options: refer to mount.ceph(8)ceph-options常用选项:name=xxx # 用于指定cephx中的用户,不填的话,默认为guestsecret=xxx # 用于指定cephx中用户的keysecretfile=xx # 用于直接指定密钥文件,这样就不需要指定secret了,而且也更安全。(这个key文件不是keyring,而是keyring中的key后面的那串base64, 直接复制或者用ceph auth print-key <keyring>来输出也可以)[ceph@ceph-deploy ceph-cluster-deploy]$ sudo mount.ceph 192.168.2.121:6789:/ /mnt/ceph-fs-dir -o name=admin,secret=AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==# 6.4 写入测试数据
[root@ceph-deploy ceph-cluster-deploy]$ echo 123456 > /mnt/ceph-fs-dir/123.txt# 6.5. 查看挂载情况:
[root@ceph-deploy ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        20G  2.4G   18G   12% /
/dev/sda1               xfs       509M  144M  366M   29% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0
/dev/rbd0               ext4      976M  2.6M  907M    1% /mnt/ceph-rbd-dir
192.168.2.121:6789:/    ceph       12G     0   12G    0% /mnt/ceph-fs-dir# 7. 拓展:添加到fstab分区表中,以便开机自行挂载。
# 每次都要手动挂麻烦?要不写到rc-local中,要不就添加到fstab分区表
[ceph@ceph-deploy ceph-cluster-deploy]$ sudo mount.ceph 192.168.2.121,192.168.2.122,192.168.2.123:/ /mnt/ceph-fs-dir/ -o name=admin,secret=AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==# fstab分区表添加以下内容:
# _netdev: 这种网络类型的fs都要加,不然开机会起不来,比如NFS也一样。因为启动的时候网络还没有启动完毕,所以会找不到网络,然后就卡。
# noatime:并发大的场景如果经常更新atime会浪费性能,这个看需求吧。noatime就是每次访问不更新文件的atime,可以优化性能。
# defaults: 是默认的挂载属性,包含:rw, suid, dev, exec, auto, nouser, and async.
# 【格式】:
# <mon节点:端口>,[<mon节点:端口>,...]:/    <挂载点目录>    ceph    defaults,_netdev,noatime,name=<ceph账号>,secretfile=<账号的key文件>|secret=账号的key    0 0# 先备份fstab分区表
[root@ceph-deploy ~]# cp /etc/fstab{,.bak}# 在fstab添加以下内容
#
# /etc/fstab
# Created by anaconda on Thu Dec 21 23:51:13 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4b1bb372-7f34-48f6-8852-036ee6dfd125 /boot                   xfs     defaults        0 0
# 挂载ceph-fs by swq
192.168.2.121,192.168.2.122,192.168.2.123:/    /mnt/ceph-fs-dir    ceph    defaults,_netdev,noatime,name=admin,secret=AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==  0  0# 取消之前手动挂载的ceph-fs
[root@ceph-deploy ~]# umount /mnt/ceph-fs-dir/# 先手动测试下fstab是否能够正常挂载
[root@ceph-deploy ~]# mount -a# 没有报错,然后查看是否挂载了?
[root@ceph-deploy ~]# df -Th
文件系统                                    类型      容量  已用  可用 已用% 挂载点
devtmpfs                                    devtmpfs  898M     0  898M    0% /dev
tmpfs                                       tmpfs     910M     0  910M    0% /dev/shm
tmpfs                                       tmpfs     910M  9.6M  901M    2% /run
tmpfs                                       tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root                     xfs        20G  2.4G   18G   12% /
/dev/sda1                                   xfs       509M  144M  366M   29% /boot
tmpfs                                       tmpfs     182M     0  182M    0% /run/user/0
192.168.2.121,192.168.2.122,192.168.2.123:/ ceph       12G     0   12G    0% /mnt/ceph-fs-dir
[root@ceph-deploy ~]# ll /mnt/ceph-fs-dir/
总用量 1
-rw-r--r-- 1 root root 7 12月 25 21:17 123.txt

mds服务高可用、高性能

ceph-fs是通过mon节点+端口6789来来访问的,虽然mon节点可以高可用,但是实际上提供mds的节点之前只添加了一个。

因此我们需要添加更多的mds实现高可用,甚至是实现两组《一主一从》

高可用:一主多备。

​ 这个实现比较简单,只需要添加多个mds服务节点即可实现,默认就是一主多备

高可用+高性能:两组《一主一从》的mds同时提供服务。

​ 需要手动设置一些参数和配置项。

高可用实现
# 查看当天的ceph中的mds服务
[root@ceph-deploy ~]# ceph -scluster:id:     f1da3a2e-b8df-46ba-9c6b-0030da25c73ehealth: HEALTH_WARNapplication not enabled on 1 pool(s)services:mon: 3 daemons, quorum ceph-node1,ceph-node2,ceph-node3mgr: ceph-node2(active), standbys: ceph-node1, ceph-node3# 发现只有一个ceph-node3是mds服务。mds: cephfs-test-1/1/1 up  {0=ceph-node3=up:active}osd: 9 osds: 9 up, 9 inrgw: 1 daemon activedata:pools:   9 pools, 120 pgsobjects: 234  objects, 37 MiBusage:   9.2 GiB used, 36 GiB / 45 GiB availpgs:     120 active+clean# 使用ceph fs status 也可以查看。
[root@ceph-deploy ~]# ceph fs status
cephfs-test - 0 clients
===========
+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | ceph-node3 | Reqs:    0 /s |   11  |   14  |
+------+--------+------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 7179  | 11.1G |
|   cephfs-data-pool   |   data   |    7  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
+-------------+# 进入ceph-deploy节点,并切换到ceph用户。
# 添加多一个ceph-node2作为mds服务
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph-deploy mds create ceph-node2
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph/.cephdeploy.conf
[ceph_deploy.cli][INFO  ] Invoked (2.0.1): /bin/ceph-deploy mds create ceph-node2
[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
[ceph_deploy.cli][INFO  ]  quiet                         : False
[ceph_deploy.cli][INFO  ]  cd_conf                       : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f9c6190e4d0>
[ceph_deploy.cli][INFO  ]  cluster                       : ceph
[ceph_deploy.cli][INFO  ]  func                          : <function mds at 0x7f9c61b5ced8>
[ceph_deploy.cli][INFO  ]  ceph_conf                     : None
[ceph_deploy.cli][INFO  ]  mds                           : [('ceph-node2', 'ceph-node2')]
[ceph_deploy.cli][INFO  ]  default_release               : False
[ceph_deploy.mds][DEBUG ] Deploying mds, cluster ceph hosts ceph-node2:ceph-node2
[ceph-node2][DEBUG ] connection detected need for sudo
[ceph-node2][DEBUG ] connected to host: ceph-node2 
[ceph-node2][DEBUG ] detect platform information from remote host
[ceph-node2][DEBUG ] detect machine type
[ceph_deploy.mds][INFO  ] Distro info: CentOS Linux 7.9.2009 Core
[ceph_deploy.mds][DEBUG ] remote host will use systemd
[ceph_deploy.mds][DEBUG ] deploying mds bootstrap to ceph-node2
[ceph-node2][DEBUG ] write cluster configuration to /etc/ceph/{cluster}.conf
[ceph-node2][WARNIN] mds keyring does not exist yet, creating one
[ceph-node2][DEBUG ] create a keyring file
[ceph-node2][DEBUG ] create path if it doesn't exist
[ceph-node2][INFO  ] Running command: sudo ceph --cluster ceph --name client.bootstrap-mds --keyring /var/lib/ceph/bootstrap-mds/ceph.keyring auth get-or-create mds.ceph-node2 osd allow rwx mds allow mon allow profile mds -o /var/lib/ceph/mds/ceph-ceph-node2/keyring
[ceph-node2][INFO  ] Running command: sudo systemctl enable ceph-mds@ceph-node2
[ceph-node2][WARNIN] Created symlink from /etc/systemd/system/ceph-mds.target.wants/ceph-mds@ceph-node2.service to /usr/lib/systemd/system/ceph-mds@.service.
[ceph-node2][INFO  ] Running command: sudo systemctl start ceph-mds@ceph-node2
[ceph-node2][INFO  ] Running command: sudo systemctl enable ceph.target
高性能实现
当前环境:
ceph-node2 、 ceph-node3都是mds节点。添加两个节点成为mds节点
ceph-node1、 ceph-deploy(因为我没机器了所以用的ceph-deploy,生产环境不要随意混用服务器...)# 执行命令,将两个节点分别添加为mds节点。
ceph-deploy mds create ceph-node1
ceph-deploy mds create ceph-deploy# 查看ceph-fs状态
# 可以发现,目前还是属于一主多备的状态。
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs status
cephfs-test - 0 clients
===========
+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | ceph-node3 | Reqs:    0 /s |   11  |   14  |
+------+--------+------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 7179  | 11.1G |
|   cephfs-data-pool   |   data   |    7  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  ceph-node2 |
|  ceph-node1 |
| ceph-deploy |
+-------------+# 修改mds的最大活跃数,实现多个主提供服务
语法:ceph fs set <ceph-fs-name> max_mds <NUM>
ceph fs set cephfs-test max_mds 2# 再次查看ceph-fs状态
# 可以发现变成了2个rank提供服务。
[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs status
cephfs-test - 0 clients
===========
+------+--------+-------------+---------------+-------+-------+
| Rank | State  |     MDS     |    Activity   |  dns  |  inos |
+------+--------+-------------+---------------+-------+-------+
|  0   | active |  ceph-node3 | Reqs:    0 /s |   11  |   14  |
|  1   | active | ceph-deploy | Reqs:    0 /s |    0  |    0  |
+------+--------+-------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 7835  | 11.1G |
|   cephfs-data-pool   |   data   |    7  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  ceph-node2 |
|  ceph-node1 |

手动指定mds的主备关系

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph fs status
cephfs-test - 0 clients
===========
+------+--------+-------------+---------------+-------+-------+
| Rank | State  |     MDS     |    Activity   |  dns  |  inos |
+------+--------+-------------+---------------+-------+-------+
|  0   | active |  ceph-node3 | Reqs:    0 /s |   11  |   14  |
|  1   | active | ceph-deploy | Reqs:    0 /s |    0  |    0  |
+------+--------+-------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 7835  | 11.1G |
|   cephfs-data-pool   |   data   |    7  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  ceph-node2 |
|  ceph-node1 |
+-------------+

默认情况下,由mon节点来控制哪些节点成为mds主节点,哪些作为备用节点,当出现故障时接替失效的mds。

假设我们现在希望,ceph-node2作为ceph-node3的备用mds、ceph-node1作为ceph-deploy的备用mds。

ceph提供了一些选项用于控制standby状态的mds如何接替主mds。

  • mds_standby_replay:true | false
    • true表示当前MDS守护进程将持续读取某个特定的Up状态的rank的元数据日志,从而持有相关rank的元数据缓存,并在此rank失效时加速故障切换;
    • 一个Up状态的rank仅能拥有一个replay守护进程,多出的会被自动降级为正常的非replay型MDS。
  • mds_standby_for_name:指定当前mds是那个mds的备用服务(也就是指定其主是哪个节点啊)
  • mds_standby_for_rank:设置当前MDS进程仅备用于指定的rank,它不会接替任何其它失效的rank;不过,在有着多个CephFS的场景中,可联合使用下面的参数来指定为哪个ceph-fs文件系统的rank进行冗余。(正常来讲一个ceph集群只建议创建一个ceph-fs,然后再里面创建不同的文件夹用来区分业务,如果你真的创建了多个ceph-fs就可以用这个参数)
  • mds_standby_for_fscid:联合mds_standby_for_rank参数的值协同生效;
    • 同时设置了mds_standby_for_rank:备用于指定fscid的指定rank;
    • 未设置mds_standby_for_rank时:备用于指定fscid的任意rank;

我们可以通过修改ceph.conf来指定这样的主备关系。

# vim /etc/ceph.conf# 添加下面的配置
[mds.ceph-node2] # 表示配置ceph-node2这个mds节点
mds_standby_replay=true 
mds_standby_for_name=ceph-node3[mds.ceph-node1]
mds_standby_replay=true 
mds_standby_for_name=ceph-deploy# 重新分发配置文件到节点上
ceph-deploy --overwrite-conf config push ceph-node2
ceph-deploy --overwrite-conf config push ceph-node1
ceph-deploy --overwrite-conf config push ceph-node3
ceph-deploy --overwrite-conf config push ceph-deploy# 重启备mds节点上的mds服务
systemctl restart ceph-mds@<节点名>

ceph集群维护

集群的停止

有时候有些特殊场景,比如机房要断点,需要提前关闭ceph服务。

为了避免osd在节点关闭后被ceph集群误以为挂了,然后将其标记为out状态,建议在重启前将osd设置为noout

ceph osd set noout

待启动ceph集群后再重新设置为out,让其正常判断osd并自动剔除。

ceph osd set out

关闭集群步骤

  1. 设置noout
  2. 关闭客户端对集群的读写操作
  3. 关闭rgw(如果使用了对象存储就会有该服务)、
  4. 关闭mds服务(如果使用了ceph-fs文件系统存储,就会有该服务)
  5. 关闭每个osd服务器上的osd服务
    1. systemctl stop ceph-osd@xxxx
  6. 关闭ceph-mgr节点
  7. 关闭ceph-mon节点

启动集群步骤

刚好和关闭集群步骤反过来。

ceph存储池pool

存储池类型

  1. replicated 副本池(默认)
  2. erasure 纠删码池(能节省空间,但是数据冗余安全性不如副本池)
    1. 只有rgw(对象存储)支持, rbd和ceph-fs不支持。

PG归置组

查看pg

[root@ceph-node3 ~]# ceph pg ls
PG   OBJECTS DEGRADED MISPLACED UNFOUND BYTES   OMAP_BYTES* OMAP_KEYS* LOG STATE        STATE_STAMP                VERSION REPORTED UP        ACTING    SCRUB_STAMP                DEEP_SCRUB_STAMP           
1.0        0        0         0       0       0           0          0   0 active+clean 2023-12-25 17:02:12.477859     0'0  104:105 [3,7,2]p3 [3,7,2]p3 2023-12-24 17:52:07.729007 2023-12-22 14:51:21.195350 
1.1        0        0         0       0       0           0          0   0 active+clean 2023-12-25 19:10:29.506390     0'0  104:115 [7,0,5]p7 [7,0,5]p7 2023-12-25 19:10:29.506220 2023-12-24 17:52:11.632761 
1.2        0        0         0       0       0           0          0   0 active+clean 2023-12-25 20:03:07.345014     0'0  104:120 [4,0,8]p4 [4,0,8]p4 2023-12-25 20:03:07.344982 2023-12-22 14:51:21.195350 
1.3        0        0         0       0       0           0          0   0 active+clean 2023-12-25 17:13:35.967744     0'0   104:87 [1,5,8]p1 [1,5,8]p1 2023-12-24 17:51:58.414104 2023-12-22 14:51:21.195350 
1.4        0        0         0       0       0           0          0   0 active+clean 2023-12-25 21:31:42.912662     0'0  105:123 [7,3,1]p7 [7,3,1]p7 2023-12-25 21:31:42.912604 2023-12-22 14:51:21.195350 
1.5        0        0         0       0       0           0          0   0 active+clean 2023-12-25 17:07:55.059959     0'0   104:99 [8,2,5]p8 [8,2,5]p8 2023-12-24 17:52:04.692830 2023-12-22 14:51:21.195350 
1.6        0        0         0       0       0           0          0   0 active+clean 2023-12-25 17:13:45.965625     0'0   104:85 [6,4,1]p6 [6,4,1]p6 2023-12-24 17:51:58.879476 2023-12-22 14:51:21.195350 # 过滤以下,太多列了
[root@ceph-node3 ~]# ceph pg ls | awk '{print $1, $2, $10, $15, $16}' | head -n +1
PG 	OBJECTS STATE 			UP        	ACTING
1.0 0 		active+clean 	[3,7,2]p3 	[3,7,2]p3
1.1 0 		active+clean 	[7,0,5]p7 	[7,0,5]p7
.... 此处省略....

pg状态

正常状态应该为“active+clean”

常见状态

  • active:
    • 主osd和备osd均处于就绪激活状态,可以正常处理请求。
    • peering状态后一般就是active
      • 上行集(up set)变为活动集(active set)期间一般处于peering状态,数据同步完然后就会变成active状态。
  • clean:
    • 主osd和备osd均处于就绪激活状态,且osd副本数符合设置要求,另外上行集(upset)和活动集(active set)是同一组osd。
      • 活动集:当前pg的主OSD和所有活动状态的备OSD组成,这组OSD负责执行此PG
        上数据操作。
      • 上行集:当集群架构发生变化(比如osd挂了,新增了osd等),导致PG对应的osd变动,从而产生新的osd集合,这组osd集合叫做上行集。上行集中的osd从活动集中的osd中同步数据,等同步完成变代替成为新的活动集。
  • peering:等待状态。
    • 一个PG中的所有OSD必须就它们持有的数据对象状态达成一致,而”对等(Peering)“即为让其
      OSD从不一致转为一致的过程。
  • degraded:降级状态
    • 某个osd挂了就会出现降级状态。
    • 此OSD重新启动并完成Peering操作后,PG将重新转回clean
    • 一旦OSD标记为down的时间超过5分钟,它将被标记出集群,而后Ceph将对降级状态的PG启动恢复操作,直到所有因此而降级的PG重回clean状态
    • 在其内部OSD上某对象不可用或悄然崩溃时,PG也会被标记为降级状态,直至对象从某个权威副本上正确恢复
  • stale:过期状态
    • 每个OSD都要周期性地向RADOS集群中的监视器报告其作为主OSD所持有的所有PG的最新统计数据,因任何原因导致某个主OSD无法正常向监视器发送此类报告,或者由其它OSD报告某个OSD已经down掉,则所有以此OSD为主OSD的PG将立即被标记为stale状态。
  • undersized:数量过少状态
    • PG中的副本数少于其存储池定义的个数时即转入undersized状态,比如两个备osd都挂了,此时pg只剩下一个主osd,不符合ceph要求的至少一个主osd一个备osd时,就会出现该状态。除非你修复,添加了新的osd。

存储池操作

对存储池进行增删改查等操作…

创建

语法:
# 这种方式创建的是副本池类型的存储池
osd pool create <poolname> <pg-num> [<pgp-num>]# 创建纠删码类型存储池,用得不多..
ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure [erasure-code-profile] [crush-rule-name] [expected-num-objects]

查询

# 列出所有的存储池
ceph osd pool ls [detail]detail: 显示更加详细的信息,会有存储池id,存储池的属性等。# 列出所有的存储池并显示存储池的id
ceph osd lspools# 查看所有 或 指定存储池的状态
ceph osd pool stats [pool-name]# 查看存储池容器信息
rados df
ceph df [detail]

重命名

ceph osd pool rename <poolname> <new-poolname>

删除

为了防止意外删除存储池,ceph本身由2个防止删除的机制来控制存储池可否被删除。

  1. 存储池的属性nodelete,默认是false。如果是true时,则不可以被删除。

  2. 删除操作默认时经过mon节点的,mon节点默认不允许删除pool。

    1. 建议删除之前将其值设置为true,删除完成后再改为false。

    2. 临时设定方法:

      ceph tell mon.* injectargs --mon-allow-pool-delete={true|false}
      

删除存储池语法:

ceph osd pool rm <pool-name> <pool-name> --yes-i-really-really-mean-it你没有看错,需要输入两次pool-name,就和你输入确定密码一样...

存储池属性

获取存储池的属性

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool get django-web all
size: 3
min_size: 2
pg_num: 16
pgp_num: 16
crush_rule: replicated_rule # 存储池类型,默认就是副本池
hashpspool: true
nodelete: false
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
auid: 0
fast_read: 0

修改存储池的属性

语法: ceph osd pool set <pool name> <key> <value>常用属性参数:
size:
min_size: 
pg_num: 存储池的pg数
pgp_num: 计算数据归置时要使用的PG的有效数量
nodelete: 不可被删除,默认为false
nopgchange: 不可修改pg和pgp的数量,默认为false
nosiezechange: 不可修改存储池的大小,默认为false
noscrub: 不进行浅度整理存储池,默认为false。ceph默认时每天进行一次浅度数据整理(主要是确保osd数据一致性),浅度整理I/O不会占用很多。
nodeep-scrub:不进行深层整理存储池,默认为falseceph默认每周进行一次深度数据整理,深度整理能够更加保证OSD的数据一致性,但是比较占IO。
scrub_min_interval:集群负载较低时整理存储池的最小时间间隔;默认值为0,表示其取值
来自于配置文件中的osd_scrub_min_interval参数;
scrub_max_interval:整理存储池的最大时间间隔;默认值为0,表示其取值来自于配置文件
中的osd_scrub_max_interval参数;
deep_scrub_interval:深层整理存储池的间隔;默认值为0,表示其取值来自于配置文件中的
osd_deep_scrub参数;

存储池配额

存储池支持以两种方式来设置配额

  1. 存储对象数量(max_objects)

  2. 可用空间大小(max_bytes)

获取存储池当前的配额信息

[ceph@ceph-deploy ceph-cluster-deploy]$ ceph osd pool get-quota django-web
quotas for pool 'django-web':max objects: N/Amax bytes  : N/A

设置配额

[root@ceph-deploy ~]# ceph osd pool set-quota django-web max_bytes 2G
set-quota max_bytes = 2147483648 for pool django-web[root@ceph-deploy ~]# ceph osd pool get-quota django-web
quotas for pool 'django-web':max objects: N/Amax bytes  : 2 GiB

存储池快照

存储池快照是针对一整个存储池进行快照的备份、管理等操作。

快照还是比较占用空间的,看需求使用。

# 添加快照
osd pool mksnap <poolname> <snap>
rados -p <poolname> mksnap <snap># 删除快照
osd pool rmsnap <poolname>  <snap>  
rados -p <poolname> rmsnap <snap># 查看存储池中的快照
rados -p <poolname> lssnap# 查看某个object对象有啥快照  list the snapshots of this object
rados -p <poolname>  listsnaps <obj-name># 恢复快照  roll back object to snap <snap-name>
raods -p <poolname>   rollback <obj-name> <snap-name>

rbd块存储进阶操作

RBD自身也是RADOS存储集群的客户端,它通过将存储池提供的存储服务抽象为一到多个image(表现为块设备)向客户端提供块级别的存储。

启动或关闭rbd中镜像的特性

rbd feature enable|disable如:
rbd feature disable django-web/img001 object-map fast-diff deep-flatten

扩容/缩容镜像的空间大小

需要更多空间?那就进行扩容。

但是不要随便缩容,就像lvm一样。

usage: 
rbd resize [--pool <pool>] [--image <image>] --size <size> [--allow-shrink] [--no-progress] <image-spec> Resize (expand or shrink) image.Positional arguments<image-spec>         image specification(example: [<pool-name>/]<image-name>)Optional arguments-p [ --pool ] arg    pool name--image arg          image name-s [ --size ] arg    image size (in M/G/T) [default: M]--allow-shrink       permit shrinking # 允许缩容,缩容必须带上这个参数--no-progress        disable progress output

扩容实例

ps. 我这都是直接将rbd挂载ceph-deploy节点,只用于测试而已。

# 1. 查看当前挂载的rbd,可以发现是1G的空间。
[root@ceph-deploy ~]# df -Th
文件系统                                    类型      容量  已用  可用 已用% 挂载点
... # 此处省略
/dev/rbd0                                   ext4      976M  2.6M  907M    1% /mnt/ceph-rbd-dir# 2. 查看img002镜像的体积信息
[root@ceph-deploy ~]# rbd info -p django-web --image img002
rbd image 'img002':size 1 GiB in 256 objectsorder 22 (4 MiB objects)id: 25c446b8b4567block_name_prefix: rbd_data.25c446b8b4567format: 2features: layeringop_features: flags: create_timestamp: Mon Dec 25 20:27:10 2023# 3. 先关闭rbd挂载
[root@ceph-deploy ~]# umount /mnt/ceph-rbd-dir/
[root@ceph-deploy ~]# rbd unmap --pool django-web --image img002 /dev/rbd0# 4. 开始扩容img镜像大小
[root@ceph-deploy ~]# rbd resize -p django-web --image img002 --size 2G
Resizing image: 100% complete...done.
# 4.1 在客户端上重新映射rbd
[root@ceph-deploy ~]# rbd map -p django-web --image img002
/dev/rbd0
# 4.2 查看块存储的大小,发现已经变成了2G
[root@ceph-deploy ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  512M  0 part /boot
└─sda2            8:2    0 19.5G  0 part └─centos-root 253:0    0 19.5G  0 lvm  /
sr0              11:0    1 1024M  0 rom  
rbd0            252:0    0    2G  0 disk 
# 4.3 但是文件系统还没有扩容呀,文件系统还是默认的大小,需要我们重新扩容
[root@ceph-deploy ~]# df -Th
文件系统                                    类型      容量  已用  可用 已用% 挂载点
... # 此处省略其他的文件系统
# 可以发现,还是1G的空间
/dev/rbd0                                   ext4      976M  2.6M  907M    1% /mnt/ceph-rbd-dir# 4.4 扩容文件系统
# 由于我的是ext格式,所以用resize2fs命令即可扩容
# xfs格式的可以使用:xfs_growfs
[root@ceph-deploy ~]# resize2fs /dev/rbd0
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/rbd0 is mounted on /mnt/ceph-rbd-dir; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/rbd0 is now 524288 blocks long.# 4.5 再次查看文件系统大小,可以发现已经变成了2G空间了
[root@ceph-deploy ~]# df -Th
文件系统                                    类型      容量  已用  可用 已用% 挂载点
... 此处省略其他文件系统
/dev/rbd0                                   ext4      2.0G  3.1M  1.9G    1% /mnt/ceph-rbd-dir

存储池的镜像快照

当我们使用rbd块存储的时候会用到存储池中的镜像。此时可以单独给存储池中的某个镜像img进项快照备份。

镜像快照是针对存储池中某个镜像进行快照的备份、删除、管理等操作。

rdbsnap create (snap add)              Create a snapshot. 创建快照snap limit clear                    Remove snapshot limit. 删除快照数量限制snap limit set                      Limit the number of snapshots. 设置快照数量限制snap list (snap ls)                 Dump list of image snapshots. 列出快照snap protect                        Prevent a snapshot from being deleted. 禁止删除快照snap purge                          Delete all unprotected snapshots. 删除所有允许删除的快照(就是非protect状态的快照)snap remove (snap rm)               Delete a snapshot. 删除快照snap rename                         Rename a snapshot. 重命名快照snap rollback (snap revert)         Rollback image to snapshot. 恢复快照snap unprotect                      Allow a snapshot to be deleted. 允许删除快照

ceph集群认证-cephx

前面学习都是使用admin账号,权限很大,生产环境不可能用。

授权文件

一个授权文件中,可以有多个用户,但是一般也不会这样干…通过[client.<用户名>]来区分

# /etc/ceph/ceph.client.admin.keyring
[client.admin]# key密钥key = AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==# caps是表示能力的意思,也就是权限。 # caps <daemon-type> = "allow <caps>"caps mds = "allow *"caps mgr = "allow *"caps mon = "allow *"caps osd = "allow *"

权限定义

如何去定义权限? 授权文件keyring中的格式含义:

格式:allow <caps>
caps:r: 表示只读w: 可写x: 读写,且在mon节点上可以执行auth。class-read: x的子集,允许用户用户调用类读取的能力class-write:  x的子集,允许用户用户调用类写入的能力* : 表示所有权限profile osd:用户可以以某个osd身份连接到其他osd或者监视器mon的权限。用户可以获取osd状态信息。profile mds用户可以以某个mds身份连接到其他mds或者监视器mon的权限。用户可以获取mds状态信息。profile bootstrap-osd允许引导部署osd一,般可以授权给deploy节点、允许osd部署的节点的用户使用。profile bootstrap-mds允许引导部署mds,一般可以授权给deploy节点、允许mds部署的节点的用户使用。pool=<poolname> : 表示该caps只在指定pool生效

ceph用户管理

一般用户至少需要mon的读取权限,osd需要读写但是需要指定具体的pool存储池,不然所有存储池都可以读写了。

ceph用户管理命令集合

# 添加指定的用户,可以在添加的时候指定权限
ceph auth add <entity> {<caps> [<caps>...]}# 修改指定用户的权限
ceph auth caps <entity> <caps> [<caps>...]# 输出指定用户的keyring,如果不指定就输出全部用户keyring信息。
ceph auth export {<entity>}# 输出指定用户的keyring
ceph auth get <entity># 输出指定用户的key密码
ceph auth get-key <entity># 获取 或 添加 指定用户,如果用户不存在则执行添加的操作。
# 添加时:可以同时指定用户的权限。
# 获取时:获取指定用户
ceph auth get-or-create <entity> {<caps> [<caps>...]}# 和上面的一样,只不过在获取的时候,只显示用户的key,而不携带caps权限信息。
ceph auth get-or-create-key <entity> {<caps> [<caps>...]}# 从keyring文件中导入用户
ceph auth import -i <keyring-file># 查看当前授权状态
ceph auth ls# 打印授权用户的key
ceph auth print-key <entity># remove all caps for <name>
ceph auth rm <entity>

列出所有用户

[root@ceph-deploy ~]# ceph auth ls
installed auth entries:# 格式是:类型.ID
# 这里就是mds服务,后面是ceph-deploy这个节点名称
mds.ceph-deploykey: AQD4l4plEMeOFRAAJzbIdjWftm4fjcSiClsVZg==caps: [mds] allowcaps: [mon] allow profile mdscaps: [osd] allow rwx
mds.ceph-node1key: AQDxl4pljT5CHhAAi+cTCp+yliT7kjYjsHo6gA==caps: [mds] allowcaps: [mon] allow profile mdscaps: [osd] allow rwx
...#太多了,此处省略。
# 这里表示类型是client(客户端). admin表示用户名
client.adminkey: AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==caps: [mds] allow *caps: [mgr] allow *caps: [mon] allow *caps: [osd] allow *
... #太多了,此处省略。

添加用户

# ceph auth add <entity> {<caps> [<caps>...]}[root@ceph-deploy ~]# ceph auth add client.swq
added key for client.swq# 查看client.swq
# 可以发现目前并没有任何权限
[root@ceph-deploy ~]# ceph auth get client.swq
exported keyring for client.swq
[client.swq]key = AQAiwotlCQXNIRAARAuIcks1CA+D1bvdo7E7lQ==# 有两种方法可以添加权限
# 1. 在使用add子命令的同时,可以指定权限。如:ceph auth add client.zhangsan mds 'allow r' osd 'allow rw'
# 2. 后续使用caps子命令对指定用户添加权限详解下小节《》。

修改用户的权限

# ceph auth caps <entity> <caps> [<caps>...]
# caps这里的格式是:daemon '具体权限'
# 比如: mds 'allow *'[root@ceph-deploy ~]# ceph auth caps client.swq mds 'allow *'
updated caps for client.swq[root@ceph-deploy ~]# ceph auth get client.swq
exported keyring for client.swq
[client.swq]key = AQAiwotlCQXNIRAARAuIcks1CA+D1bvdo7E7lQ==caps mds = "allow *"

删除用户

ceph auth del <TYPE.ID>

生成用户的keyring文件、key文件

  1. 自己利用ceph auth get <用户> 然后执行重定向输出(推荐:一般自己重定向就行了)
  2. 使用ceph-authtool工具
生成keyring文件

keyring文件名规则:<ceph集群名>.<TYPE.ID>.keyring

# 生成client.zhangsan的keyring文件
语法:
ceph auth <TYPE.ID> > /PATH/<ceph集群名>.<TYPE.ID>.keyring# 实例:输出并按照指定的文件命名规则进行重定向
[root@ceph-deploy ~]# ceph auth get client.zhangsan > /tmp/ceph.client.zhangsan.keyring
exported keyring for client.zhangsan# 查看keyring
[root@ceph-deploy ~]# cat /tmp/ceph.client.zhangsan.keyring
[client.zhangsan]key = AQAJw4tlDAeyNhAASg05b/bGMCM4kU+R3L3UmA==caps mds = "allow r"caps osd = "allow rw"
生成key文件
# 生成key文件
语法:auth get-key <entity># 实例:生成client.zhangsan的key
# 可以使用-o 重定向,也可以使用重定向符号>自行重定向。
[root@ceph-deploy ~]# ceph auth get-key client.zhangsan -o /tmp/zhangsan.key
[root@ceph-deploy ~]# cat /tmp/zhangsan.key
AQAJw4tlDAeyNhAASg05b/bGMCM4kU+R3L3UmA==

ceph命令指定用户运行

前提:指定用户的keyring文件,已经在ceph会去自动查找的目录下

/etc/ceph/ceph.client.lisi.keyring
/etc/ceph/ceph.keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin

ceph命令指定用户:

ceph--id, --user: 指定CLIENT ID这个CLIENT ID不需要TYPE类型,比如,你有client.lisi,这里只需要写lisi即可-n, --name: 指定用户名这里需要指定TYPE.ID, 比如:client.lisi

rdb、ceph-fs使用cephx实例

之前都是用admin权限挂载的,现在改成使用普通账号。

ceph-fs使用普通用户实例

ceph-fs涉及到mds,一般给个读写就可以了。
mon 给个读权限
osd 给读写权限,但是要指定pool存储池。fs中的metadata pool一般不需要给读写权限,因为这个存储池是mds服务去操作的。我们只需要给data-pool读写权限即可。

之前的案例使用cephfs-metadata-pool用保存mds数据;cephfs-data-pool用于保存实际数据。

[root@ceph-deploy ~]# ceph fs status
cephfs-test - 1 clients
===========
+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | ceph-node2 | Reqs:    0 /s |   11  |   14  |
|  1   | active | ceph-node1 | Reqs:    0 /s |   10  |   13  |
+------+--------+------------+---------------+-------+-------+
+----------------------+----------+-------+-------+
|         Pool         |   type   |  used | avail |
+----------------------+----------+-------+-------+
| cephfs-metadata-pool | metadata | 10.6k | 11.1G |
|   cephfs-data-pool   |   data   |    7  | 11.1G |
+----------------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  ceph-node3 |
| ceph-deploy |

添加lisi用户,并添加权限

[root@ceph-deploy ~]# ceph auth add client.lisi mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data-pool'
added key for client.lisi# 查看client.lisi用户的权限
[root@ceph-deploy ~]# ceph auth get client.lisi
exported keyring for client.lisi
[client.lisi]key = AQCTzYtlN5UmCxAAWJdO+AZ1XUHwapkkAoVp/w==caps mds = "allow rw"caps mon = "allow r"caps osd = "allow rw pool=cephfs-data-pool"

导出lisi用户的key

ceph auth get-key client.lisi > /etc/ceph/lisi.key 

复制用户key到客户端

# 由于我直接在ceph-deploy部署,所以就不需要复制了
scp xxxx xxxxx

修改fstab分区表中的挂载选项

原内容:
192.168.2.121,192.168.2.122,192.168.2.123:/    /mnt/ceph-fs-dir    ceph    defaults,_netdev,noatime,name=admin,secret=AQCAGoVlpj0zERAA5dhEHlg/a5TyQhPPlTigUg==  0  0修改为:主要修改name和secretfile选项,用于指定新用户。
192.168.2.121,192.168.2.122,192.168.2.123:/    /mnt/ceph-fs-dir    ceph    defaults,_netdev,noatime,name=lisi,secretfile=/etc/ceph/lisi.key  0  0

卸载原来的挂载

umount /mnt/ceph-fs-dir

测试挂载是否成

# 重新挂载/etc/fstab分区表
[root@ceph-deploy ~]# mount -a# df查看,发现已经挂载成功了
[root@ceph-deploy ~]# df -Th
文件系统                                    类型      容量  已用  可用 已用% 挂载点
...此处省略其他文件系统
192.168.2.121,192.168.2.122,192.168.2.123:/ ceph       12G     0   12G    0% /mnt/ceph-fs-dir# 查看挂载的目录
[root@ceph-deploy ~]# ll /mnt/ceph-fs-dir/
总用量 1
-rw-r--r-- 1 root root 7 12月 25 21:17 123.txt# 测试挂载的目录读写是否正常
[root@ceph-deploy ~]# touch /mnt/ceph-fs-dir/456.txt
[root@ceph-deploy ~]# echo 666 > /mnt/ceph-fs-dir/456.txt 
[root@ceph-deploy ~]# cat /mnt/ceph-fs-dir/456.txt
666

rbd块存储使用普通用户实例

# 创建普通用户zhangsan去访问rbd的存储池
# 必须rwx,不然挂载不了。。。
[root@ceph-deploy ~]# ceph auth caps client.zhangsan osd 'allow rwx pool=django-web' mon 'allow r'
updated caps for client.zhangsan[root@ceph-deploy ~]# ceph auth get client.zhangsan
exported keyring for client.zhangsan
[client.zhangsan]key = AQCH1Itl7AosBRAAwAiPExAxrBflWA8ZlqU09w==caps mon = "allow r"caps osd = "allow rwx pool=django-web"# 导出zhangsan的keyring到/etc/ceph目录下
[root@ceph-deploy ~]# ceph auth get client.zhangsan > /etc/ceph/ceph.client.zhangsan.keyring
exported keyring for client.zhangsan# 在进行map映射的时候,使用--id来指定用户
[root@ceph-deploy ~]# rbd map -p django-web --image img002 --id zhangsan
/dev/rbd0# 挂载块设备
mount /dev/rbd0 /mnt/ceph-rbd-dir/# 测试数据的读写
[root@ceph-deploy ~]# touch /mnt/ceph-rbd-dir/2.txt
[root@ceph-deploy ~]# echo 666 > /mnt/ceph-rbd-dir/2.txt
[root@ceph-deploy ~]# cat /mnt/ceph-rbd-dir/2.txt
666

ceph监控

  • 第三方图形化界面(第三方的好久不更新,不用了,用个毛)
  • mgr自带的dashboard(看看也无妨)
  • prometheus监控(一般用这个比较多)
  • zabbix(也不是不行…)

ceph-dashboard

# 将mgr节点上的dashboard插件启用
ceph mgr module enable dashboard# 启用后还不能马上访问dashboard, 需要配置关闭SSL或启用 SSL 及指定监听地址
# 方法一:关闭ssl
ceph config set mgr mgr/dashboard/ssl false
# 方法二:使用内置命令生成并安装自签名证书:
[root@ceph-deploy]# ceph dashboard create-self-signed-cert
Self-signed certificate created# 创建dashboard用户:
[root@node1 my-cluster]# ceph dashboard set-login-credentials swq 123456
Username and password updated#查看ceph-mgr服务:
[root@ceph-deploy ~]# ceph mgr services
{"dashboard": "http://ceph-node1:8080/"  # 如果开启了ssl,则默认是8443
}# 如果要修改端口和ip地址
ceph config set mgr mgr/dashboard/ceph-node1/server_addr 192.168.2.121
ceph config set mgr mgr/dashboard/ceph-node1/server_port 9977# 重启mgr接入点上的mgr服务
[root@ceph-node1 ~]# systemctl status ceph-mgr@ceph-node1# 查看当前dashboard状态
[root@ceph-node1 ~]# ceph mgr services
{"dashboard": "https://192.168.2.121:9977/"
}

对接prometheus

1.启用prometheus插件

mgr自带了prometheus 的监控模块,启用后会并监听在每个 mgr节点的 9283 端口,用于将采集的数据向 prometheus 提供数据

[root@ceph-deploy ~]# ceph mgr  module enable  prometheus
[root@ceph-deploy~]# ceph mgr services
{"dashboard": "https://192.168.2.121:9977/","prometheus": "http://ceph-node1:9283/"
}# 实际上每个mgr节点都监听了9283端口

2.在prometheus中添加数据源

3.如果需要就在grafana中添加模板

ceph集群配置优化

# vim /etc/ceph.conf# 设置监视器允许的时钟偏移值(多个节点之间时钟的偏差值)
mon clock drift allowed=<秒>  # 默认0.05秒
# 设置上面设置的时间偏移值,如果发生偏移,要在连续发生多少次后发出警告
mon clock drift warn backoff=<NUM># 修改完一般都需要将配置文件推送到各个ceph集群的节点上
ceph-deploy --overwrite-conf config push <节点名>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

取出一个时间序列中每一个元素里的日期Series.dt.date()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 取出一个时间序列中 每一个元素里的年月日 Series.dt.date [太阳]选择题 以下代码的输出结果中正确的是? import pandas as pd t pd.Series(pd.date_range("2023-12-28", periods4…

OpenCV中使用Mask R-CNN实现图像分割的原理与技术实现方案

本文详细介绍了在OpenCV中利用Mask R-CNN实现图像分割的原理和技术实现方案。Mask R-CNN是一种先进的深度学习模型&#xff0c;通过结合区域提议网络&#xff08;Region Proposal Network&#xff09;和全卷积网络&#xff08;Fully Convolutional Network&#xff09;&#xf…

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

饥荒Mod 开发(二四):制作一把万能工具

饥荒Mod 开发(二三)&#xff1a;显示物品栏详细信息 饥荒Mod 开发(二五)&#xff1a;常用组件 总结 源码 饥荒中的每种工具都有独特的功能&#xff0c;比如 斧头用来砍树&#xff0c; 铲子用来 挖东西&#xff0c;鹤嘴锄用来挖矿&#xff0c; 锤子可以敲碎东西&#xff0c;所以…

2013年第二届数学建模国际赛小美赛A题数学与经济灾难解题全过程文档及程序

2013年第二届数学建模国际赛小美赛 A题 数学与经济灾难 原题再现&#xff1a; 2008年的市场崩盘使世界陷入经济衰退&#xff0c;目前世界经济仍处于低迷状态&#xff0c;其原因是多方面的。其中之一是数学。   当然&#xff0c;并非只有金融界依赖于并非总是可靠的数学模型…

编程艺术C代码学习注释

一、左旋转字符串 详情见文章参考&#xff1a; github:程序员编程艺术csdn:程序员编程艺术第一章 1.暴力移位 void leftShift1(char * arr, int n) //n位移动的位数 {size_t tmpLen strlen(arr);char tmpChar;int i, j;if (n > 0){for (i 0; i < n; i){tmpChar …

postman使用-03发送请求

文章目录 请求1.新建请求2.选择请求方式3.填写请求URL4.填写请求参数get请求参数在params中填写&#xff08;填完后在url中会自动显示&#xff09;post请求参数在body中填写&#xff0c;根据接口文档请求头里面的content-type选择body中的数据类型post请求参数为json-选择raw-选…

Flask 与微信小程序对接

Flask 与微信小程序的对接 在 web/controllers/api中增建py文件&#xff0c;主要是给微信小程序使用的。 web/controllers/init.py # -*- coding: utf-8 -*- from flask import Blueprint route_api Blueprint( api_page,__name__ )route_api.route("/") def ind…

软件测试/测试开发丨Pytest测试用例生命周期管理-Fixture

1、Fixture 用法 Fixture 特点及优势 1&#xff64;命令灵活&#xff1a;对于 setup,teardown,可以不起这两个名字2&#xff64;数据共享&#xff1a;在 conftest.py 配置⾥写⽅法可以实现数据共享&#xff0c;不需要 import 导⼊。可以跨⽂件共享3&#xff64;scope 的层次及…

Linux内核中断

Linux内核中断 ARM里当按下按键的时候&#xff0c;他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作&#xff1a;1&#xff09;判断中断的序号&#xff1b;2&#xff09;处理中断&#xff1b;3&#xff09;清除中…

2024美赛数学建模思路A题B题C题D题E题F题思路汇总 选题分析

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…

模型部署之——ONNX模型转RKNN

提示&#xff1a;这里可以添加学习目标 提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、加载Docker镜像二、转换脚本 一、加载Docker镜像 加载rknn官方提供的基于x86架构下模型转换的镜像文件&#xff0c;生成…

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

视频人脸识别马赛克处理

文章目录 前言一、实现思路&#xff1f;二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化&#xff0c;opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…

贪心算法的运用

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常用的算法思想&#xff0c;通常用来解决最优化问题。可以使用贪心算法来解决一些问题&#xff0c;例如找零钱、任务调度等。 以找零钱为例&#xff0c;简单介绍一下贪心算法的应用 假设有一堆不同面额的硬币&#xff…

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…

Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....

安装教程&#xff08;系统、驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk&#xff09; 制作U盘启动盘&#xff0c;并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本&#xff0c;并使用Rufus制作UEFI启动盘&#xff0c;参考UEFI安装Ubuntu使用GPTUEFI模式安装&am…

【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|

目标&#xff1a;实现STM32连接阿里云物联网平台发送数据同时接收数据&#xff0c;IOT studio界面显示数据。具体来说&#xff1a;使用ESP8266 ESP-01来连接网络&#xff0c;获取设备数据发送到阿里云物联网平台并显示且oled显示屏当前的设备数据&#xff0c;通过IOT studio界面…

centos 安装 配置 zsh

centos 编译安装 zsh 和 配置 oh-my-zsh 下载 wget https://jaist.dl.sourceforge.net/project/zsh/zsh/5.9/zsh-5.9.tar.xz依赖 yum install ncurses-devel安装zsh 执行&#xff1a; tar -xvf zsh-5.9.tar.xz cd zsh-5.9 ./configure --prefix/usr/local/zsh5.9 make &am…

Golang学习之路一三基本数据类型

Golang学习之路一三基本数据类型 基本数据类型 int8 是有符号类型&#xff0c;uint8 是无符号类型 go 语言中不同类型的数据不能相加&#xff0c;会编译错误 类型名称长度零值说明bool布尔类型1false值为 true 或 false, 不可以用数字代表byte字节型10uint8rune字符类型40专…