前言
最开始使用MongoDB作为NoSQL数据库的时候,使用的是单节点,后面随着业务量增加,引入了集群模式,最初引入的是ReplicaSet。刚开始使用的时候还好,后面却发现了性能上还是有瓶颈,尤其在写数据方面比较的明显。后面深入研究了一下,发现原来真正高性能的是Shared Cluster,因为做了数据分片的缘故,单机的数量量更小,读写性能也就越高。然而我们使用的ReplicaSet只是Master-Slave模式,所有的节点上的数据仍然是一致的,同时因为需要保证一致性,事务是多进程之间同步等待的,因此并不能从根本上解决海量数据高并发的问题。不过ReplicaSet依然是比较好的容灾策略,这里可以简单演示一下如何搭建。
准备工作
这里可以使用虚拟机,但我觉得作为一个Demo来讲虚拟机还是太麻烦,就使用了docker,其中docker-compose可以很方便的在一台机器上把集群搭建起来。
docker-compose.yml
version: '3'
services:
mongo_node_1:
image: mongo:latest
container_name: mongo_node_1
ports:
- 27017:27017
volumes:
- ./node_1/data:/data/db
- ./node_1/log:/var/log/mongodb
- ./node_1/mongo-entrypoint/:/docker-entrypoint-initdb.d/
- ./node_1/mongod.conf:/etc/mongod.conf
entrypoint: ["mongod","--config","/etc/mongod.conf"]
mongo_node_2:
image: mongo:latest
container_name: mongo_node_2
ports:
- 27018:27017
volumes:
- ./node_2/data:/data/db
- ./node_2/log:/var/log/mongodb
- ./node_2/mongo-entrypoint/:/docker-entrypoint-initdb.d/
- ./node_2/mongod.conf:/etc/mongod.conf
entrypoint: ["mongod","--config","/etc/mongod.conf"]
mongo_node_3:
image: mongo:latest
container_name: mongo_node_3
ports:
- 27019