On 27/04/26 16:46, Anthony D'Atri wrote:

Hi to all!

I'm searching the wisdom of the community on how to drain/fill an OSD server 
(like for removal, bulk disk replacing, filestore to bluestore conversion...) 
without impacting on the performance of the cluster.

You'll impact performance no matter what you do, but to differing degrees.

The least impact is making the least change:

   set noout
   destroy one OSD
   redeploy that OSD
   unset noout
   wait for recovery

At scale that doesn't, well, scale.

We are using the 'ceph-gentle-reweight' script, which is running fine, but we 
are interested to know if there is a newer approach for this job.

What Ceph release are you running? That approach works, but will take a long 
time and you need to have enough free capacity on other nodes to hold that 
node's share of data.

We are running Quincy (on our upgrade path to Squid/Tentacle) and we have enough free space to drain at least one node at the time. We used successfully the gentle-reweight a lot of times, but we are interested to know if there are other, more efficient, ways to drain/fill a node (or group of nodes).



Searching the web I found a pdf of the talk of Dan van der Ster about "Mastering 
Ceph Operations" (NYC Ceph Day 2024) in which he talks about using the 'balancer' in 
'upmap' mode

If you're running, say, Mimic or later, you typically would already have the 
balancer on; upmap mode is the default.

Run

ceph balancer status

When using upmaps, you want to avoid "ceph osd reweight-by-utilization" and ensure that the 
REWEIGHT column of "ceph osd df" or "ceph osd tree" is all 1.0000



Sure, balancer is already active (in upmap mode) and is doing the job of balancing :-)

(and a "magic" script) to move the PGs from/to the OSDs in the background.

So the balancer upmap approach can be used to drain a node following this 
procedure:

Be sure to disable backfill and rebalancing, you want no backfilling in 
progress when you run upmap-remapped.py


I realized (after I sent the email) that you need to have 'norebalancing' active before doinng the upmap-remapped.py, but I didn't thought about 'nobackfilling', so thank you!


- set balancer tunables (like 'target_max_misplaced_ratio')
- activate the balancer in upmap mode (if not already active)
- 'ceph osd crush reweight-subtree' to 0.1 for the host we wish to drain
- run the magic script 'upmap-remapped.py'
- 'ceph osd crush reweight-subtree' to 0 for the host we wish to drain
- do stuff on the node (remove, reinstall etc etc).

If you are solving for safety over time, sure. Especially if you have 
replicated size=2 pools or EC N+1.

Another approach is to set the flags, destroy the OSDs on a single host, 
redeploy them, set your backfill/recovery throttles down to 1, and unset the 
flags.  This will be somewhat more risky as you're reducing redundancy until 
the recovery completes, and more will happen in parallel. Whether you can 
tolerate that depends in part on your hardware, CRUSH topology, how many hosts, 
replication vs EC, etc.

Our first approach was prioritize time over safety, but because we overran our maintenance window we switched to safety over time (all the pools in this cluster are replica 3).

But what is the implication for the whole cluster, how this background job 
affects its performance?


We need more info.


I assume that 'target_max_misplaced_ratio' is a key parameter to avoid large 
data movement in a given time, there is more to look into?

Yes.  Setting that lower than default can help avoid certain intermediate 
states that can result in a fairly-full cluster's OSDs going 
nearfull/backfillfull.

The documentation say about 'target_max_misplaced_ratio' "...the balancer will incrementally move a small fraction of unbalanced PGs in order to improve distribution. This fraction will not exceed a certain threshold that defaults to 5%...". does it mean that off all the PGs that has to be moved out/in of the node(s), maximum 5% will be moved at the same time?

Thanks for your help!
Iztok
_______________________________________________
ceph-users mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to