Sri Lanka were struggling at 58-4 after being put in to bat on a lively track on Sunday, but Sangakkara (110) steadied the innings with a 108-run stand for the fifth wicket with Tillakaratne Dilshan (56).
The wicketkeeper-batsman reached his sixth one-day international century in style, swinging veteran leg-spinner Anil Kumble for his third six. His 127-ball knock contained four sixes and 11 fours.
The 29-year-old Sangakkara offered a difficult chance on 91, when fast bowler Munaf Patel dropped a return catch, but the Sri Lankan smashed the next ball for four.
He held the innings together after Indian pacemen Shathakumaran Sreesanth and Patel each grabbed two wickets in their impressive opening spells to put the tourists in trouble.
Patel eventually finished with 4-49, his best in one-day internationals.
The left-handed Sangakkara received valuable support from Dilshan, who batted sensibly for his eighth half-century in one-day internationals, before being bowled by off-spinner Harbhajan Singh. Dilshan hit seven fours in his 65-ball knock.
But there was no stopping Sangakkara, who continued to dominate the Indian attack with a wide range of shots. He put on 61 for the seventh wicket with Farveez Maharoof to help his team pass the 250-mark.
Sangakkara fell in the penultimate over of the innings trying to step up the run rate, caught in the deep by Virender Sehwag off Patel.
The first game of the four-match series, in Kolkata on Thursday, was abandoned after 18.2 overs due to heavy rain.
This is the last chance to judge form before World Cup squads are named by the February 13 deadline.
India will announce their 15-man squad on Monday for cricket's biggest tournament, which opens in the Caribbean on March 13.
Sri Lanka 257 for 8 in 50 overs (Kumar Sangakkara 110, Tilakratne Dilshan 56; Munaf Patel 4 for 49, Sreesanth 2 for 39, Harbhajan 1 for 41, Tendulkar 1 for 41) Vs India (yet to bat)