Personally I would avoid "load balancing" for single instance servers with a single database if you can. It will make your environment more complex and difficult to troubleshoot when things go wrong.
You could use clustering technologies for availability, but again if you can I would look at deploying this on a cloud environment like OnApp which provides automatic failure over at a virtual machine level. Very easy to setup and configure and transparent to your MySQL services.
obviously as a Cloud provider I am biased to this solution but it does help simplify the application layer. It is all too easy to over engineer these environments making things very difficult to maintain.
In terms of IO it would depend on what your web services and applications are being used for. You maybe able to cache a lot of static data to reduce the IO hit on the storage. Do you know if your doing a lot of random or sequential IO? is it mainly reads or writes?
Personally I am a big fan of auto tiering technologies which allow you to place a thin layer of SSD drives in front of slower spinning disks.
In your case I would assume only 10% of your 2TB is frequently accessed. Auto tiering would allow you to place a few small SSD drives providing the IOPS required for the "hot" data. This also has the knock on effect of freeing up the spinning disks so when data is requested or written to the slower disks they are less busy and can complete the request faster.
On our 10Gb iSCSI environment this made a massive difference to latency, average read latency reduced from 20ms down to 3ms, write latency is down to 0.039ms although that was always fairly low.