You have to think about why keyword cannibalization takes place. You essentially tell Google that two different pages on your site are the important pages for the exact same keyword. This is done by:
1. Having similar content on both pages
2. Having identical anchor text to both pages in your internal links
3. Having identical anchor test to both pages in inbound external links.
Are any of these three taking place? If so, just stop. Link to the pages differently. Alter the content on the pages and the page titles. Make them unique and different so that they target two different phrases. Google will rank them accordingly. Instead of 301ing an old, link rich page, just stop cannibalizing.