We distinguish between the networkcard-IP which is in a different subnet than the bonding-IP and also different from the virtual-IP.
The storages are synchronized over one bonding network and administrated over the other bondig network.
In theory the "clients" access over the virtual-IP but could also be done over the bonding-IP.
Our storages are connected over 2 different switches (or set of switches)
One for administration and one as SAN.
Here is an example configuration.
Storage One
eth0 IP 172.16.100.1 / mask 255.255.255.252
eth2 IP 172.16.102.1 / mask 255.255.255.252
bondig IP 10.100.111.101 / mask 255.255.255.0
eth1 IP 172.16.101.1 / mask 255.255.255.252
eth3 IP 172.16.103.1 / mask 255.255.255.252
bonding IP 10.101.1.1 / mask 255.255.255.252
Storage Two
eth0 IP 172.16.110.1 / mask 255.255.255.252
eth2 IP 172.16.112.1 / mask 255.255.255.252
bondig IP 10.110.111.101 / mask 255.255.255.0
eth1 IP 172.16.111.1 / mask 255.255.255.252
eth3 IP 172.16.113.1 / mask 255.255.255.252
bonding IP 10.101.1.2 / mask 255.255.255.252
Virtual IP is 10.101.0.101 / mask 255.255.255.0
So there is not just only separate subnetworks but different networks.
The first bonding pair is for administration and ping device etc.
The second bonding is for client access.
It could all run on the same switch but we have our iSCSI-SAN separated.