Formula One returned to Montreal for the first time in three years and it was Red Bull's Max Verstappen who took the chequered flag to move 46 points clear at the top of the standings.
He withstood late pressure from Carlos Sainz who was runner-up, with Mercedes driver Lewis Hamilton in third.
Sainz's Ferrari teammate Charles Leclerc remains second in the standings, after recovering to fifth from the back of the grid.
“The safety car didn’t help,” Verstappen said. “Overall Ferrari were really quick in the race. It was really exciting in the end. I was giving it everything I had, and I could see Carlos was doing the same. The last few laps were a lot of fun. Luckily this year we are quick on the straights so that helps a lot.”
Hamilton’s team-mate George Russell extended his record of top-five finishes in all races so far this season as he took fourth place ahead of Ferrari's Charles Leclerc, who recovered from starting 19th.