Variety in names is good, as variety is always good. With names, there’s a special reason for differentiation—so that the reader doesn’t get bogged down in keeping track of the characters.
In real life, names are often the same or similar. My next-door neighbors used to include father Richard, son Richard and even grandfather Richard. Add me as a fourth Richard, and how confusing is that?
But at least, in real life, there’s plenty of time to get accustomed to such complications. Not so in a novel.
If you’re absolutely committed to realism for the sake of it, then, okay, you won’t care about making life hard for the reader. Wuthering Heights—which is very realistic in odd ways—has Cathy/Catherine as the daughter of Catherine/Cathy, not to mention a Linton (first name) who isn’t a Linton (family name). I bet every single reader has struggled with the names in Emily Brontë’s novel.
Creating names that ring true is essential in fantasy fiction, but samenesses and similarities are optional. Yes, people (and places) might have the same or similar names, but they also might not. I’ll always choose the second option. Struggling with names seems to me an unproductive sort of labor to impose on the reader.
With fantasy fiction, there are often many names to lock on to at the start of a novel, and usually unfamiliar names we’ve never met in real life. Lately, I’ve been making a conscious principle of what I’ve always done unconsciously. All other things being equal, I’ll try to start the name of each major character with a different letter of the alphabet.
I think that initial capital letter is important when reading. We register and remember it even if we haven’t yet registered and remembered the (unfamiliar) name as a whole. At least, I know I do. If I get confused between characters’ names when reading, it’s most often between names that start with the same letter.
So that’s my contribution to reader-friendly naming. I wish I could find equally slick principles for the rest of the writing business!