Gio Reyna scores again in stoppage time, keeps Dortmund in title race
Borussia Dortmund, which enjoyed a 6-0 win over Wolfsburg last week, raced into a four-goal lead over Borussia Mönchengladbach.
Donyell Malen opened the scoring in the fifth minute by finishing off Haller's deflected effort, Jude Bellingham added a penalty in the 18th after Haller was fouled, and Haller grabbed the third goal two minutes later with a wonderful strike after good work from Malen and Julian Brandt.
Brandt and Malen again combined to set up Haller's second goal in the 32nd.
Gladbach 'keeper Jan Olschowsky did well to deny Malen and Bellingham either side of the break. Olschowsky was standing in for the injured Jonas Omlin.
Ramy Bensebaini pulled one back with a penalty in the 75th and Lars Stindl grabbed Gladbach's second in the 86th, but Gio Reyna had the final say for Dortmund in the last minute. Reyna has scored for Dortmund seven times this season, with four of his goals coming in stoppage time.
Dortmund is only one point behind FC Bayern Munich in the Bundesliga standings, but to end Bayern's 10-year reign as champion, Dortmund must hope Bayern drops points over the next two weekends.
Bayern plays Leipzig and Cologne, while Dortmund plays Augsburg and Mainz in its last games.
Bayern missed a couple of good chances before Thomas Müller finally made the breakthrough in the 21st minute. Müller, who is captain while Manuel Neuer works on his comeback from a broken leg, was making his first start since April 22.
"I was happy to get the ‘can-opener' today. It was a brilliant feeling. The stadium exploded — and then we kept going," Müller said.
Joshua Kimmich made it 2-0 10 minutes later with a penalty awarded through VAR after Cedric Brunner caught Jamal Musiala in the face with his arm. The Schalke defender was booked and Musiala showed no lasting damage.
Serge Gnabry added two more goals in the second half, Mathys Tel added another, and Noussair Mazraoui completed the scoring in injury time.
It continued a long tradition of Bayern routing Schalke. Schalke hasn't beaten the Bavarian powerhouse in 23 league games since a victory in December 2010, with Bayern clocking up 71 goals in that run.
The Associated Press contributed to this report.