Faits: A. A._, ressortissant marocain né en 1975, se trouve en détention provisoire depuis le 23 février 2010, sous l'inculpation de tentative d'assassinat, subsidiairement de tentative de meurtre, lésions corporelles simples qualifiées, menaces et séquestration. Il lui est reproché d'avoir été violent verbalement et physiquement à l'égard de son ex-épouse B._, de manière répétée, au cours de leur vie commune; il l'aurait notamment frappée à coups de pied et de poing. En octobre 2007, il l'aurait également menacée au moyen d'un couteau et séquestrée pendant une nuit. Le 22 février 2010, il se serait rendu au domicile de la prénommée - dont il vivait séparé -, lui aurait asséné plusieurs coups de poing et de pied dans le ventre, le dos et la tête puis lui aurait porté quarante-quatre coups de couteau au niveau de l'abdomen, du dos et du thorax, au moyen de trois couteaux différents, avant d'être interrompu par l'arrivée de la police. B. La détention provisoire de A._ a été régulièrement prolongée par le Tribunal des mesures de contrainte du canton de Vaud (ci-après: le Tmc). Par ordonnance du 6 octobre 2011, le Tmc a prolongé la détention pour une durée de deux mois, soit au plus tard jusqu'au 30 novembre 2011. La Chambre des recours pénale du Tribunal cantonal du canton de Vaud (ci-après: le Tribunal cantonal) a rejeté le recours contre cette ordonnance, par arrêt du 19 octobre 2011. Elle a considéré en substance que les présomptions de culpabilité étaient suffisantes, qu'il existait des risques de fuite et de récidive et que la durée de la détention préventive était encore compatible avec le principe de la proportionnalité. C. Par acte du 21 novembre 2011, A._ forme un recours en matière pénale par lequel il demande au Tribunal fédéral l'annulation de l'arrêt cantonal et sa mise en liberté immédiate, subsidiairement le renvoi de la cause à l'autorité cantonale pour nouvelle décision dans le sens des considérants. Il requiert en outre l'assistance judiciaire. Le Tribunal cantonal s'est référé à sa décision. Le Ministère public ne s'est pas déterminé dans le délai imparti par le Tribunal fédéral. 