In geo-distributed cloud systems, a key challenge faced by cloud providers is to optimally tune and configure the underlying cloud infrastructure. An important problem in this context, deals with finding an optimal virtual machine (VM) placement, minimizing costs, while at the same time, ensuring good system performance. Moreover, due to the fluctuations of demand and traffic patterns, it is crucial to dynamically adjust the VM placement scheme over time. It should be noted that most of the existing studies, however, dealt with this problem either by ignoring its dynamic aspect or by proposing solutions that are not suitable for a geographically distributed cloud infrastructure. In this paper, exact as well as heuristic solutions based on Integer Linear programming (ILP) formulations are proposed. Our work focuses also on the problem of scheduling the VM migration by finding the best migration sequence of intercommunicating VMs that minimizes the resulting traffic on the backbone network. The proposed algorithms execute within a reasonable time frame to readjust VM placement scheme according to the perceived demand. Our aim is to use VM migration as a tool for dynamically adjusting the VM placement scheme while minimizing the network traffic generated by VM communication and migration. Finally, we demonstrate the effectiveness of our proposed algorithms by performing extensive experiments and simulation.