Red Bull's Max Verstappen held off a late challenge from Ferrari's Carlos Sainz to win the Canadian Grand Prix.
The two started the final 15 laps nose to tail after a late safety car but, despite heavy pressure from Sainz, Verstappen held on with older tyres.
Lewis Hamilton and George Russell took third and fourth for Mercedes as Ferrari's Charles Leclerc recovered to fifth from the back of the grid.
Verstappen extended his championship lead over Leclerc to 49 points.
Red Bull's Sergio Perez remains in second place despite retiring from the race with an engine problem but is only three points ahead of Leclerc.
Fernando Alonso, who starred in wet qualifying to start on the front row for the first time in 10 years, suffered from a questionable strategy from Alpine and some technical issues to finish seventh, behind team-mate Esteban Ocon.
- Hope for Hamilton but Mercedes 'not yet there'
- Verstappen holds off Sainz to win Canadian GP - as it happened
- Chequered Flag podcast: Canadian Grand Prix review
- Full race result
Charging Sainz just comes up short
Verstappen and Sainz played a cat-and-mouse game throughout a race punctuated by two virtual safety cars in addition to the final full safety car.
Red Bull pitted Verstappen under the first VSC on lap nine, caused when Perez pulled off, while Sainz stayed out, before the Spaniard stopped under the second 11 laps later, caused by Mick Schumacher's Haas stopping out on track.
That set up a race defined by tyre offsets, with Sainz closing slowly on Verstappen through their second stints before the Dutchman stopped for a second time on lap 43.
Sainz then benefited from the final safety car, caused by Yuki Tsunoda crashing his Alpha Tauri on his way out of the pits.
The Ferrari driver had a six-lap tyre advantage over Verstappen for the final shootout but he was unable to get close enough to the Red Bull to mount an attack, despite following within a second for the entire final 15 laps.
Verstappen held on for his fifth win in six races, Red Bull's sixth in a row, and his own sixth victory in nine races this season to further consolidate an ever-more convincing championship advantage.
Alonso's strong weekend fades to P7 finish
Alonso had talked after qualifying about challenging Verstappen for the lead on the first lap, but the Red Bull made too strong a start and the veteran Spaniard had to settle into second place.
Sainz soon passed the Alpine, who then seemed to fall foul of mistaken thinking during the two virtual safety cars.
Alonso did not stop under either, while both Mercedes drivers did - Hamilton under the first and Russell under the second.
This leapfrogged both ahead of Alonso, and the 40-year-old also lost out to team-mate Ocon as the Frenchman stopped with Russell under the second VSC.
Alonso's race was ruined by the timing of that VSC. It was called just after he had passed the pit entry at the end of lap 19, and it ended about two seconds before he reached it again on the following lap.
So Alpine opted to stay out, and that left Alonso in no-man's land as his tyres soon began to drop off and he had to stop a few laps later under racing conditions, falling behind Leclerc as well.
That meant Alonso was running sixth behind Ocon and ahead of Leclerc for the final run to the flag.
Leclerc was stuck behind Ocon for a long time early in the race.
But after the safety he passed both Alpines to take fifth and do a decent job of damage limitation in the championship, although there are questions as to whether Ferrari made strategy errors - which a slow pit stop did not help - as simulations suggested he should have been able to beat the Mercedes as well.
Although Alonso had stronger pace than Ocon, he was unable to pass.
Alonso was battling an engine problem that was costing him 0.5-1secs on the straights and asked the team whether they would swap positions, claiming he had been "100 times faster" than Ocon during the weekend.
He did indeed maintain his significant pace advantage throughout but the team chose not to accede to his request and Ocon finished ahead.
To make matters worse for Alonso, he was later given a five-second penalty for weaving on the straight, demoting him to ninth.
Valtteri Bottas - the driver impeded by Alonso - and Zhou Guanyu therefore finished seventh and eighth for Alfa Romeo, with Aston Martin's Lance Stroll taking the final point in 10th at his home race.
A two-week break before the British Grand Prix at Silverstone, where Ferrari really need to halt Red Bull's momentum and the track should suit Mercedes better.
- This Is MY House...! Or is it?: Can the celebrity sleuths figure out the real owner?
- Our Falklands War: A Frontline Story: Unflinching personal experiences of a short but brutal war