Is each block on Ethereum blockchain stored as lots of files, a separate file per each block? Or a database? How does one can run Etherenum node shared over several servers?
Ethereum is a protocol that is left up to the clients to implement said protocol.
Ethereum’s Rust client Parity uses rocksdb.
Whereas Ethereum’s Go, C++, and Python clients all use leveldb.
That said, anyone can write their own Ethereum client as long as it meets the specifications and keep it updated with the majority of the network.
As far as several nodes connecting to the same data source, that's a bad idea and goes against the basic principals of decentralization. Someone has done a better job than I explaining this.
I don't think that is possible, because it will completely break the goal of the ethereum network and may (and should) break the integrity and network validation of transactions and stored data on the blockchain.
Making nodes share the same data, would make it absurd to pass transactions along the network for validation since all nodes have the same shared data, so one node would ad the transactions and the other would just read the same transactions from the same disk space and verify it is the same ( and it is since it is from the start. you are basically comparing 1 to 1 )