The disadvantage of Replace is that you can easily make complicated riddles like this one. Most experienced programmers don't solve these riddles - they just avoid them completely.
As convention, people often add a "$" to the front of variables that are "internal". So let's try that:
a = v;
a b /. $a_ $b_ -> $a + $b
This works. There's no confusion about what the "a" on the right hand side of the arrow means.
In general you want to avoid undescriptive variable names. That also avoids this problem.
Now to explain what happens.
a = v;
a b /. a_ b_ -> a + b
First a is replaced by v per its definition. So we effectively have:
v b /. a_ b_ -> v + b
"Then the product is reordered alphabetically because "v b" is equal to "b v". So now we have "b v".
b v /. a_ b_ -> v + b
By the substitution, we get b + b or 2b.