Schumaker will earn $2 million this season and $2.7 million in 2011. The deal also contains performance bonuses that could bring the total value to $5 million over two years.
Schumaker, who turned 30 on Wednesday, hit .303 with four homers and 35 RBIs in 153 games last year. He also switched from the outfield to second base.
Schumaker, who was arbitration eligible for the first time, had asked for $2.75 million while the Cardinals offered $1.45 million. He made $430,000 last season.
St. Louis announced the deal on Monday.