A thought experiment: High-Availability IRC

I've been idly pondering how to create a system for high-availability IRC. I don't have any immediate intentions of implementing any of this, but I thought some people might find it interesting.

There are of course other aspects of how IRC could be made highly available besides the question of client reconnection and server restarts; IRC networks generally limit themselves to connecting servers in a tree, without redundant associations between servers. This can clearly be solved in the same manner as for computer networking, such as with solutions resemblent of Spanning-Tree Protocol or dynamic routing protocols. The issue of making IRC services highly available is also another subject entirely.