您的位置:首页 > 数据库 > Mongodb

MongoDB集群搭建实例

2017-05-16 09:19 274 查看

集群复制方式及区别

1.     复制方式

复制是跨多个MongoDB服务器(节点)分布和维护数据的方法。MongoDB提供的复制方法有两种:一、主从复制(有点过时);二、可复制集群。

2.     区别

相同点:主节点接受所有的请求,然后所有的从节点读取,并且异步同步所有数据。

不同点:可复制集群额外增加了自动化灾备机制,如果主节点宕机,无论什么原因,其中一个从节点会自动提升为主节点;可复制集群节点上限为50,主从复制则任意数量。

问题:假如一部分数据a写入主节点A,但是数据a还没有复制到其他节点,主节点A挂了,从节点b成为主节点,然后又写入了一部分数据b,那么a和b两份数据如何正常的保存在各个副本集。(下次整理好补充)

副本集集群

1.     副本集集群简介

副本集集群:主服务器的主节点宕机后,从服务器的从节点会在自己和裁判的投票上,让自己成为主节点;当宕机的主节点再重新启动时,它将成为从节点。(从节点想要升为主节点,支持率需要大于50%,所以副本集的节点数加仲裁数必须大于3)





2.     搭建副本集集群

分别启动两个节点和一个仲裁:

mongod --dbpath"F:\MongoDBGroup\Copy1\db" --port 8881 --replSet group

mongod --dbpath"F:\MongoDBGroup\Copy2\db" --port 8882 --replSet group

mongod --dbpath"F:\MongoDBGroup\Arbiter\db" --port 8880 --replSet group

进入其中一个节点管理(不能为裁判节点),并设置集群

mongo127.0.0.1:8881/admin

db.runCommand({"replSetInitiate":{"_id":"group","members":[{"_id":1,"host":"127.0.0.1:8881","priority":1.0},{"_id":2,"host":"127.0.0.1:8882"},{"_id":3,"host":"127.0.0.1:8880","arbiterOnly":true}]}})

查看副本集状态:



当关掉节点1,节点2从从节点升为了主节点。



再次启动节点1,节点1变为从节点。



分片集群:(海量数据分布式集群)



启动配置服务器:

mongod --configsvr --dbpath"F:\MongoDBGroup\Shard\Config1\db" --port 7001 --replSet config
mongod --configsvr--dbpath "F:\MongoDBGroup\Shard\Config2\db" --port 7002 --replSet config

mongo 127.0.0.1:7001/admin

db.runCommand({"replSetInitiate":{"_id":"config","members":[{"_id":1,"host":"127.0.0.1:7001"},{"_id":2,"host":"127.0.0.1:7002"}]}})

 

启动两个分片节点:

mongod --dbpath"F:\MongoDBGroup\Shard\Shard1\db" --port 7771 --replSet group1

mongod --dbpath"F:\MongoDBGroup\Shard\Shard2\db" --port 7781 --replSet group2

 

分别启动副本集和仲裁服务器:

mongod --dbpath "F:\MongoDBGroup\Shard\SCopy1\db" --port 7772--replSet group1
mongod --dbpath "F:\MongoDBGroup\Shard\SCopy2\db"--port 7782 --replSet group2

mongod --dbpath"F:\MongoDBGroup\Shard\SArbiter1\db" --port 7770 --replSet group1

mongod --dbpath"F:\MongoDBGroup\Shard\SArbiter2\db" --port 7780 --replSet group2

 

配置副本集:

mongo 127.0.0.1:7771/admin

db.runCommand({"replSetInitiate":{"_id":"group1","members":[{"_id":1,"host":"127.0.0.1:7771"},{"_id":2,"host":"127.0.0.1:7772"},{"_id":3,"host":"127.0.0.1:7770","arbiterOnly":true}]}})

mongo 127.0.0.1:7781/admin

db.runCommand({"replSetInitiate":{"_id":"group2","members":[{"_id":1,"host":"127.0.0.1:7781"},{"_id":2,"host":"127.0.0.1:7782"},{"_id":3,"host":"127.0.0.1:7780","arbiterOnly":true}]}})

 

启动mongos进程,分别配置两个配置服务器:

mongos --configdb config/127.0.0.1:7001,127.0.0.1:7002--port 7701

(PS:mongos进程是轻量级的、不持久化的。因此,它们通常部署在应用服务器上,以确保只有一个网络活跃点来转发请求。换句话说,应用程序连接本地的mongos,而mongos管理与每个分片服务器的连接。)

 

进入路由节点管理:

mongo 127.0.0.1:7701/admin

db.runCommand({"addshard":"group1/127.0.0.1:7771",allowLocal:true})

db.runCommand({"addshard":"group2/127.0.0.1:7781",allowLocal:true})

 

启动分片和创建片键:

(PS:片键一经选择无法删除修改,所以设计之初一定要考虑好片键)

db.runCommand({"enablesharding":"test"})

db.runCommand({"shardcollection":"test.User","key":{"Age":1}})

db.runCommand({"shardcollection":"test.User","key":{"Age":1,"_id":1}})

添加用户

db.createUser({user:"admin",pwd:"123456",roles:[{role:"root"}]})

db.auth("test","123456")

附录:

部分指令参数说明:

--dbpath:服务节点路径

--logpath:日志指定文件路径

--port:端口

-- replset:集群名称

--Auth:开启安全认证

--keyFile:集群密钥文件,这个指令默认开启安全认证

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb 集群