In DHT-based P2P systems, DHT and the heterogeneity of node capacities can cause a load imbalance problem. Existing load balancing approaches have two limitations. First, they do not take the link latency into account when moving loads. Second, they heavily rely on some nodes of fixed locations in the system. A distributed load balancing algorithm is presented in this paper. Every node gathers local load balancing information periodically, and chooses a physically close node close to transfer the load. This algorithm relies on all the nodes in the system to solve a single-point failure problem. Meanwhile, loads are moved between the nodes with smaller link latency. Simulation experiments show that the algorithm can achieve a good load balance in terms of different system utilization and the load movement cost reduction rate is above 45%.