http://www.muxuanli.com/lmx/
=================================================================
MongoDB 副本集
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
本机测试 MongoDB 启动 27040,27041, 27042, 27043 端口, 副本集名称 langshi
./mongod --port 27040 --dbpath /usr/local/mongodbdata41 --replSet langshi ...... rs.initiate({"_id":"langshi","members":[ {"_id":1, "host":"127.0.0.1:27040", "priority":1 }, {"_id":2, "host":"127.0.0.1:27041", "priority":1 }, {"_id":3, "host":"127.0.0.1:27042", "priority":1 }, {"_id":4, "host":"127.0.0.1:27043", "priority":1 } ]}) rs.config() rs.status()
=================================================================
MongoDB 分片+副本集 配置
MongoDB用于生产的三种模式:
1. 主/从 模式 读写分离 缺点:主节点宕机时需要手动切换
2. 副本集 1个master 1/N个副本 , 可以自动切换 缺点:每一个节点的数据都是完整备份,不能使用Mongo的分布式计算功能; 只能在master进行写操作,压力大;
3. 分片模式
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
测试demo
端口 副本集 28010 maimeng1 28011 maimeng1 28020 maimeng2 28021 maimeng2
分片 mongos 28030 config 28040 shards
配置 maimeng1 副本集
./mongod --port 28010 --dbpath /usr/local/mongodbdata28010/ --replSet maimeng1 & ./mongod --port 28011 --dbpath /usr/local/mongodbdata28011/ --replSet maimeng1 & ./mongo --port 28010 rs.initiate({"_id":"maimeng1","members":[ {"_id":1, "host":"127.0.0.1:28010", "priority":1 }, {"_id":2, "host":"127.0.0.1:28011", "priority":1 } ]})
配置 maimeng2 副本集
./mongod --port 28020 --dbpath /usr/local/mongodbdata28020/ --replSet maimeng2 & ./mongod --port 28021 --dbpath /usr/local/mongodbdata28021/ --replSet maimeng2 & ./mongo --port 28020 rs.initiate({"_id":"maimeng2","members":[ {"_id":3, "host":"127.0.0.1:28020", "priority":1 }, {"_id":4, "host":"127.0.0.1:28021", "priority":1 } ]})
配置 server
./mongod --port 28040 --dbpath /usr/local/mongodbdata28040 --configsvr
mongos操作:
./mongos --port 28030 --chunkSize 1 --configdb localhost:28040 ./mongo admin --port 28030 db.runCommand({addshard:"maimeng1/127.0.0.1:28010"}) db.runCommand({addshard:"maimeng2/127.0.0.1:28020"}) db.runCommand({enablesharding:"jiluo"}) db.runCommand({shardcollection:"jiluo.HotSpot", key:{begin:1}})