With the programmability of software defined networking (SDN), it is convenient to manage network through the master and slave controllers that also provide the failover mechanism. To achieve load balancing among SDN controllers and low response time, we should dynamically assign controllers under the bandwidth constraint, so the bandwidth consumption is important. In this paper, we formulate the bandwidth consumption as mix integer linear programming model and figure out that it is NP-hard. Thus, we propose a two-phase algorithm to handle it. In the first phase, we use k-means clustering algorithm to avoid achieving local minimum and try to maximize isolating failure effect. In the second phase, we use the output of first phase as initial assignment and utilize coalitional game to further improve the result. The simulation result shows that our proposed algorithm can not only get closer to optimal result but also isolate failure effect.