not distributed systems, but I have a build your own KV store project. It is in TDD fashion with the tests. So, you start with simple functions, pass the tests, and the difficulty level goes up. When all the tests pass, you will have written a persistent key-value store.
https://github.com/avinassh/py-caskdb