Cleveland didn't get another hit off Harrell until Johnny Damon rolled a seventh-inning single to right field.
The Indians got outstanding pitching from starter Ubaldo Jimenez (7-5), who worked 6 2/3 innings, struck out eight, allowed four hits and walked two.
His splitter and slider had Astros hitters off balance throughout. Jimenez, who is undefeated in six career starts against the Astros with a 4-0 record and 1.88 ERA over 38 1/3 innings, said he enjoys pitching at Minute Maid Park.
"It's a nice place to pitch," said Jimenez. "It's warm, everything breaks. So it's fun to pitch here. It's really perfect [conditions] to throw breaking balls. Everything breaks; everything feels really nice out here."
Houston catcher Chris Snyder was one of many in the lineup baffled by Jimenez.
"Every year, it's something different," Snyder said. "I faced him early in his career when he was heavy on the breaking balls. I faced him the year after that when he was pumping a hard four-seam 98 [mph]. Now, he's got a diving sinker.
"I think what you've seen from him is he's starting to pitch. He's always had good stuff. Now, he's pitching with it. He had a good night."
Indians manager Manny Acta was pleased with what he saw from his entire pitching staff.
"It was a good way to start a road trip," Acta said. "It was a real nice pitching duel out there today. Choo and Cabrera got us on the board right away, and then after that, Harrell was just very tough. He pitched very well, working very fast, and had a good cut fastball that he cut into our left-handed hitters.
"Ubaldo was also very good. He had good offspeed stuff, especially the split-finger fastball, which was a chase pitch for him. He had better command of his fastball later in the game and just did a very nice job."
The bullpen did its job, as well. Chris Perez recorded his 23rd save of the season, striking out the side in the ninth.
Joe Smith put out a seventh-inning fire with a strikeout, and Vinnie Pestano survived two long flyouts to right field in a perfect eighth inning
"Our bullpen was just fantastic," Acta said. "[Smith] came in and got that huge out, striking out [Jose] Altuve, and then our two main [relievers] at the end finished off the deal, with Chris Perez being very aggressive, just lights out in the ninth.
"[Carlos] Santana deserves a lot of credit for the game he called today and job he did behind the plate."
Michael Brantley added an insurance run in the ninth with an RBI single, plating Cabrera, who opened the inning with a single. It was the only multihit inning of the night for Cleveland, which managed just four hits off five Houston pitchers.
Cabrera got second life in his at-bat when Snyder was unable to catch a pop foul behind home plate.
"I got a base hit and helped us win it," Cabrera said. "I was given the opportunity, so I just took it in stride and got on base."
It's a good sign that a team can take advantage of its opportunities and win close games, Acta said.
"We've won a lot of one-run ballgames, and today was a two-run ballgame," he said. "But when you win close ballgames, it's a good sign. And that's due to our bullpen. When you get late in games, your bullpen is responsible for that. And our guys are pretty tough from the seventh inning on."