Hi, After reading your posts for years, I feel compelled to ask for your help/advice. First, I need to explain the context of our CEPH cluster, the problems we have encountered, and finally, my questions. Thanks taking the time for reading me. Cheers, Olivier
*** Background ***
Our CEPH cluster was created in 2015 with version 0.94.x (Hammer), which has
been upgraded over time to version 10.2.x (Jewel), then 12.x (Luminous) and
then 14.x (Nautilus). The MONitors and CEPHstores have always run on Linux
Debian, with versions updated according to the requirements for supporting the
underlying hardware and/or CEPH releases.
In terms of hardware, we have three monitors (cephmon) and 30 storage servers
(cephstore) spread across three datacenters. These servers are connected to the
network via an aggregate (LACP) of two 10 Gbps fibre connections, through which
two VLANs pass, one for the CEPH frontend network and one for the CEPH backend
network. In doing so, we have always given ourselves the option of separating
the frontend and backend into dedicated aggregates if the bandwidth becomes
insufficient.
Each of the storage servers comes with HDDs whose size varies depending on the
server generation, as well as SSDs whose size is more consistent but still
varies (depending on price).
The idea has always been to add HDD and SSD storage to the CEPH cluster when we
add storage servers to expand it or replace old ones. At the OSD level, the
basic rule has always been followed: one device = one OSD with metadatas
(FileStore) on dedicated partitioned SSDs (up to 6 for 32 OSDs) and, for the
past few years, on a partitioned NVMe RAID1 (MD).
In total, we have:
100 hdd 10.90999 TB
48 hdd 11.00000 TB
48 hdd 14.54999 TB
24 hdd 15.00000 TB
9 hdd 5.45999 TB
108 hdd 9.09999 TB
84 ssd 0.89400 TB
198 ssd 0.89424 TB
18 ssd 0.93599 TB
32 ssd 1.45999 TB
16 ssd 1.50000 TB
48 ssd 1.75000 TB
24 ssd 1.79999 TB
--- RAW STORAGE ---
CLASS SIZE AVAIL USED RAW USED %RAW USED
hdd 3.6 PiB 1.7 PiB 1.9 PiB 1.9 PiB 53.45
ssd 480 TiB 321 TiB 158 TiB 158 TiB 33.04
TOTAL 4.0 PiB 2.0 PiB 2.1 PiB 2.1 PiB 51.08
Regarding the CRUSHmap, and since at the time the CEPH cluster was launched,
classes (ssd/hdd) did not exist and we wanted to be able to create pools on
disk storage or flash storage, we created two trees:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT
PRI-AFF
-2 3660.19751 root main_storage
-11 1222.29883 datacenter DC1
-68 163.79984 host cephstore16
-280 109.09988 host cephstore28
-20 109.09988 host cephstore34
-289 109.09988 host cephstore31
-31 116.39990 host cephstore40
-205 116.39990 host cephstore37
-81 109.09988 host cephstore22
-71 163.79984 host cephstore19
-84 109.09988 host cephstore25
-179 116.39990 host cephstore43
-12 1222.29883 datacenter DC2
-69 163.79984 host cephstore17
-82 109.09988 host cephstore23
-295 109.09988 host cephstore32
-72 163.79984 host cephstore20
-283 109.09988 host cephstore29
-87 109.09988 host cephstore35
-85 109.09988 host cephstore26
-222 116.39990 host cephstore44
-36 116.39990 host cephstore41
-242 116.39990 host cephstore38
-25 1215.59998 datacenter DC3
-70 163.80000 host cephstore18
-74 163.80000 host cephstore21
-83 99.00000 host cephstore24
-86 110.00000 host cephstore27
-286 110.00000 host cephstore30
-298 99.00000 host cephstore33
-102 110.00000 host cephstore36
-304 120.00000 host cephstore39
-136 120.00000 host cephstore42
-307 120.00000 host cephstore45
-1 516.06305 root high-speed_storage
-21 171.91544 datacenter xDC1
-62 16.84781 host xcephstore16
-259 14.00000 host xcephstore28
-3 14.00000 host xcephstore34
-268 14.00000 host xcephstore31
-310 14.30786 host xcephstore40
-105 14.30786 host xcephstore37
-46 30.68784 host xcephstore10
-75 11.67993 host xcephstore22
-61 16.09634 host xcephstore19
-78 11.67993 host xcephstore25
-322 14.30786 host xcephstore43
-15 171.16397 datacenter xDC2
-63 16.09634 host xcephstore17
-76 11.67993 host xcephstore23
-274 14.00000 host xcephstore32
-65 16.09634 host xcephstore20
-262 14.00000 host xcephstore29
-13 14.00000 host xcephstore35
-79 11.67993 host xcephstore26
-51 30.68784 host xcephstore11
-325 14.30786 host xcephstore44
-313 14.30786 host xcephstore41
-175 14.30786 host xcephstore38
-28 172.98364 datacenter xDC3
-56 30.68784 host xcephstore12
-64 16.09200 host xcephstore18
-67 16.09200 host xcephstore21
-77 12.00000 host xcephstore24
-80 12.00000 host xcephstore27
-265 14.39999 host xcephstore30
-277 14.39990 host xcephstore33
-17 14.39999 host xcephstore36
-204 14.30399 host xcephstore39
-319 14.30399 host xcephstore42
-328 14.30396 host xcephstore45
Our allocation rules are:
# rules
rule main_storage_ruleset {
id 0
type replicated
min_size 1
max_size 10
step take main_storage
step chooseleaf firstn 0 type datacenter
step emit
}
rule high-speed_storage_ruleset {
id 1
type replicated
min_size 1
max_size 10
step take high-speed_storage
step chooseleaf firstn 0 type datacenter
step emit
}
All our pools are of the following type: replicated size 3 min_size 1
crush_rule 0 (or 1).
This CEPH cluster is currently only used for RBD. The volumes are used by our ~
1,200 KVM VMs.
*** Problems ***
Everything was working fine until last August, when we scheduled an update from
CEPH 14.x (Nautilus) to 16.X (Pacific) (and an update from Debian 10 to Debian
11, which was not a problem).
* First problem:
We were forced to switch from FileStore to BlueStore in an emergency and
unscheduled manner because after upgrading the CEPH packages on the first
storage server, the FileStore OSDs would no longer start. We did not have this
problem on our small test cluster, which obviously did not have the ‘same
upgrade life’ as the production cluster. We therefore took the opportunity, DC
by DC (since this is our ‘failure domain’), not only to update CEPH but also to
recreate the OSDs in BlueStore.
* Second problem:
Since our failure domain is a DC, we had to upgrade a DC and then wait for it
to recover (~500 TB net). SSD storage recovery takes a few hours, while HDD
storage recovery takes approximately three days.
Here we see that our SSD-type OSDs fill up at a rate of ~ 2% every 3 hours (the
phenomenon is also observed on HDD-type OSDs, but as we have a large capacity,
it is less critical).
Manual (re)weight changes only provided a temporary solution and, despite all
our attempts (OSD restart, etc.), we reached the critical full_ratio threshold,
which is 0.97 for us.
I'll leave you to imagine the effect on the virtual machines and the services
provided to our users.
We also had very strong growth in the size of the MONitor databases (~3 GB ->
100 GB) (compaction did not really help).
Once our VMs were shut down (crashed), the cluster completed its recovery
(HDD-type OSDs) and, curiously, the SSD-type OSDs began to ‘empty’.
The day after that, we began updating the storage servers in our second DC, and
the phenomenon started again. We did not wait until we reached full_ratio to
shut down our virtualisation environment and this time, the ‘SSD’ OSDs began to
‘empty’ after the following commands: ceph osd unset noscrub && ceph osd unset
nodeep-scrub.
In fact, we used to block scrubs and deep scrubs during massive upgrades and
recoveries to save I/O. This never caused any problems in FileStore.
It should be added that since we started using the CEPH Cluster (2015), scrubs
have only been enabled at night so as not to impact production I/O, via the
following options: osd_recovery_delay_start = 5, osd_scrub_begin_hour = 19,
osd_scrub_end_hour = 7, osd_scrub_sleep = 0.1 (the latter may be removed since
classes are now available) .
After this second total recovery of the CEPH cluster and the restart of the
virtualisation environment, we still have the third DC (10 cephstore) to update
from CEPH 14 to 16, and our ‘SSD’ OSDs are filling up again until the automatic
activation of scrubs/deep-scrubs at 7 p.m.
Since then, progress has stopped, the use of the various OSDs is stable and
more or less evenly distributed (via active upmap balancer).
*** Questions / Assumptions / Opinions ***
Have you ever encountered a similar phenomenon? We agree that having different
versions of OSDs coexisting is not a good solution and is not desirable in the
medium term, but we are dependent on recovery time (and, in addition, on the
issue I am presenting to you here).
Our current hypothesis, following the restoration of stability and the fact
that we have never had this problem with OSDs in FileStore, is that there is
some kind of ‘housekeeping’ of BlueStore OSDs via scrubs. Does that make sense?
Any clues ? ideas ?
I also read on the Internet (somewhere...) that in any case, when the cluster
is not ‘healthy’, scrubs are suspended by default. Indeed, in our case:
root@cephstore16:~# ceph daemon osd.11636 config show | grep
‘osd_scrub_during_recovery’
‘osd_scrub_during_recovery’: ‘false’,
This could explain why, during the three days of recovery, no cleaning is
performed and if bluestore does not perform maintenance, it fills up?
(It would be possible to temporarily change this behaviour via: ceph tell
“osd.*” injectargs --osd-scrub-during-recovery=1 (to be tested).)
Do you have any suggestions for things to check? Although we have experience
with FileStore, we have not yet had time to gain experience with BlueStore.
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ ceph-users mailing list -- [email protected] To unsubscribe send an email to [email protected]
