Can I use the same session database for both sessions, or I need to have separate databases for shared and private sessions?
You can use the same database, as long as you use Sitecore's session providers. Those providers are able to distinguish between session records of different session types.
Can both CD1 and CD2 clusters use the same private session database?
You can do this, but perhaps you should reconsider why you want to have two clusters altogether.
A session server should always be as close as possible to the CD servers using it. ASP.NET session is retrieved and then saved back to the session store on every request, so having high latency between a CD and a session DB will directly impact your page loading times.
Normally, you would separate your Sitecore instances into multiple clusters when they are geographically distributed. This way, the servers of any given cluster will be located in the same region (ideally, in the same data center) and have their own session DB close by, thus reducing network latency.
If your CD servers are located in the same region, then why split them into several clusters? Normally, one cluster is enough.
On the other hand, if CD1 and CD2 are in different regions, they should have separate session servers for optimal performance.