Terms were not disclosed, but sources familiar with the contract told ESPN's Jeff Passan that the deal is worth $7.75 million.
Haniger, 31, led the Mariners last season with 39 home runs and was second on the team with 100 RBIs. Both marks were career highs.
He made $3.010 million last season and is scheduled to become a free agent after the 2022 season.
Haniger was an All-Star in the 2018 season when he set career bests with 38 doubles and a .285 batting average and also had 26 home runs and 93 RBIs.
For his career, Haniger has a .263 average, 101 doubles, 101 home runs and 289 RBIs.
Seattle has two arbitration-eligible players remaining that it has not agreed to terms with: second baseman Adam Frazier and outfielder Jesse Winker. Both Frazier and Winker were All-Stars last season. Frazier made $4.085 million and Winker made $3.15 million.