Cristiano Ronaldo headed Real into the lead against the run of play 10 minutes into the second half from Mesut Ozil's corner, but Barcelona responded as Pedro showed great poise to slot home a minute later.
Then a terrific jinking run from Iniesta freed Xavi to stroke home Barcelona's third goal seven minutes later.
However, the visitors were gifted a way back into the tie five minutes from time when Barcelona goalkeeper Victor Valdes tried to dribble around Angel Di Maria and only succeeded in gifting the Argentinian an open goal.
Barca chief Andoni Zubizarreta said: "Mistakes are part of a goalkeeper's career. Victor has saved us far more goals than he has conceded over the years - I'm sure that after tonight he will go on to have a perfect season."