Use rel=canonical when you have pages with small variations.
I have an eshop for rubber stamps and each stamp can have a different color. Selecting a different color changes the anchor link, which means that it is a slightly different url.
I would use rel=canonical in this instance - I really have a single page that has major value to the visitor, the color variation pages are not important enough for the visitor to rank in the search results.
I would recommend having a look at the official Google Webmasters help Youtube channel.
As for not ranking, that is probably a content issue. Look at the meta title, meta description, h1 and text of your product pages. Duplicate content may also be an issue - if your product description is copied from a larger site your content is not unique enough.
You should also post a sitemap to Google webmaster tools. Maybe Google has not indexed your pages yet - try using the fetch as Google tool
Try doing a "site:yoursite.com" Google search to see the list of your pages that Google has indexed so far.
You should also use Google data highlighter to tell Google which data is which.
You can try adding a few relevant and properly named (= relevant keywords in link) anchor links from other pages that rank well.
An interesting video from Google's Matt Smith about 301 vs rel=canonical