Does anyone have a good recommendation for a book which teaches sharding?
A great place to start is the book High Performance MySQL : Optimizations, Backups, Replication and More. Chapter 9 (pages 409 - 456) of the book is entitled "Scaling and High Availability"

There are the subheadings


Scaling MySQL
Planning for Scability
Buying Time Before Scaling
Scaling Up
Scaling Out

Functional partitioning
Data Sharding
Choosing a partitioning key
Multiple partitioning keys
Querying across shards
Allocating data, shards and node
Arranging shards on node
Fixed allocation
Mixing Dynamic and Fixed Allocation
Explicit Allocation
Rebalancing Shards
Generating globally unique IDS
Tools for sharding

Scaling Back
Scaling by Cluster
Load Balancing
Connecting Directly


and two dozen other subheadings