In my opinion, "Introduction to Distributed Algorithms" by Gerard Tel from Cambridge University Press is one of the best teaching-oriented book for distributed system.
I am teaching «Cloud technologies and virtualization of data processing» to computer science master students at South Ural State University. The main part of the course is devoted to distributed systems.
The books used by me:
1. Andrew S. Tanenbaum, Maarten Van Steen “Distributed Systems: Principles and Paradigms”, 2007
2. A.D. Kshemkalyani, M. Singhal, Distributed Computing: Principles, Algorithms, and Systems, ISBN: 9780521189842, paperback edition, Cambridge University Press, March 2011.
And I use some materials from distributed systems courses: