Sarr latched onto Jean-Philippe Mateta's knockdown to fire across goal and give Palace the perfect start in a stadium packed with 26,000 Ukrainian supporters. Shakhtar equalised two minutes into the second half through Oleh Ocheretko, but a long throw caused chaos in the Shakhtar box and Daichi Kamada drilled home to restore the lead before Jorgen Strand Larsen, sent on from the bench, clinically lobbed the keeper to seal the result.
Crystal Palace manager Oliver Glasner said the response to conceding underlined the character his group has built.
"I was really impressed with the reaction the team showed when we conceded the equaliser because, all of a sudden, we had two or three big chances and then it was a long throw-in and we took the lead again."
He insisted the togetherness in his squad is not accidental.
"There is no button we can press to switch it on — it is something we have created over months and years."
Strand Larsen, who scored the crucial third, said the goal was a personal relief after a difficult run.
"I needed that. I was unlucky against Liverpool. The confidence had dropped but I always kept going."
He added that Palace will not be getting carried away with a two-goal cushion.
"We are not going to over-celebrate. We are really happy, but hopefully we are going to smash it on Thursday and go through."
Rayo Vallecano won the other semi-final first leg 1-0 against Strasbourg. The final is scheduled for Leipzig on 27 May. The second leg takes place at Selhurst Park next Thursday.