It is a bad idea. You will either have to keep a separate set of users for each city, or tightly bind the user to the city. Otherwise, you will not be able to associate a user with his data located on another server. As a result, the simple operation of changing residence will turn into a hellish problem of migration in your backend-part of the site. The collection of statistics for all cities turns into a hell of a problem (and if this is an online store, as you write in the comments, you will need statistics). In addition, part of the scheme and data for each city you will be duplicated and it will have to somehow synchronize when updating.
If you want to achieve this with scaling, you will have an extremely uneven load - the overloaded databases of Moscow and St. Petersburg, and the rest of them idle.
Reading is best scaled by replication, writing by replication does not scale, but it can be split up by web services. Say, the catalog of goods in one database and one application, and comments and votes are implemented as a Web service that interacts with the site exclusively through JS. View counters began to create a perceptible load - take it to a separate Web service.