mongodb副本集群和分片集群布署

节点规划

172.16.8.23    node1      PRIMARY                     172.16.8.178  node3     SECONDARY   

172.16.8.24    node2     SECONDARY                172.16.8.179  node4      ARBITER


一.mongodb副本集使用自带功能进行主从切换(将node1,node2,node3节点配置成副本集)

(1).下载安装,3台节点是一样(mongodb-4.0.8不支持主从复制架构)

[root@node1 ~]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.8.tgz

[root@node1 ~]# tar xvf mongodb-linux-x86_64-rhel70-4.0.8.tgz -C /opt/

[root@node1 opt]# mv mongodb-linux-x86_64-rhel70-4.0.8/ mongodb-4.0.8

[root@node1 opt]# cd mongodb-4.0.8/

[root@node1 mongodb-4.0.8]# vim mongo.conf

dbpath=/opt/mongodb-4.0.8/data    --指定数据目录

logpath=/opt/mongodb-4.0.8/logs   --指定日志目录

logappend=true          --日志追加方式写入

directoryperdb=true     --每个数据库生成一个目录

journal=true       

port=27017        --端口

replSet=wuhan     --副本集名字

bind_ip=172.16.8.23    --绑定IP地址

fork=true              --后台启动

maxConns=1000          --最大连接数

[root@node1 mongodb-4.0.8]# ./bin/mongod -f mongo.conf 

about to fork child process, waiting until server is ready for connections.

forked process: 23625

child process started successfully, parent exiting

[root@node1 mongodb-4.0.8]# netstat -antulp | grep mongo

tcp        0      0 172.16.8.23:27017       0.0.0.0:*               LISTEN      23625/./bin/mongod  

[root@node1 mongodb-4.0.8]#

(2).在任意一台节点创建副本集

[root@node1 mongodb-4.0.8]# ./bin/mongo --host 172.16.8.23 --port 27017

MongoDB shell version v4.0.8

connecting to: mongodb://172.16.8.23:27017/?gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("739167ac-f8aa-421e-88ca-8eb5035f3dc7") }

MongoDB server version: 4.0.8

Server has startup warnings: 

> rs.initiate( {_id : "wuhan",members: [{ _id: 0, host: "172.16.8.23:27017" },{ _id: 1, host: "172.16.8.24:27017" },{ _id: 2, host: 

"172.16.8.178:27017" }]})  --配置副本集

wuhan:PRIMARY> rs.conf();        --查看配置信息

wuhan:PRIMARY> rs.status();      --查看状态信息    

wuhan:PRIMARY> use tong

switched to db tong

wuhan:PRIMARY> db.user.insert({"id":1});

WriteResult({ "nInserted" : 1 })

wuhan:PRIMARY> db.user.find()

{ "_id" : ObjectId("5ca1f4170fc6cba325bfeec0"), "id" : 1 }

wuhan:PRIMARY>

(3).slave节点查看数据

wuhan:SECONDARY> use tong

switched to db tong

wuhan:SECONDARY> db.user.find()

{ "_id" : ObjectId("5ca1f4170fc6cba325bfeec0"), "id" : 1 }

wuhan:SECONDARY> 

(4).副本集master和slave节点切换(当master节点宕机后,slave节点会选出一个当master节点)

[root@node1 mongodb-4.0.8]# pkill  mongod

[root@node1 mongodb-4.0.8]# netstat -antulp | grep mongo       --node1节点关闭mongodb服务

[root@node1 mongodb-4.0.8]# 

[root@node2 mongodb-4.0.8]# ./bin/mongo --host=172.16.8.24 --port 27017

MongoDB shell version v4.0.8

connecting to: mongodb://172.16.8.24:27017/?gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("3a926e39-b5f5-44dc-850c-13b1618c9e74") }

MongoDB server version: 4.0.8

wuhan:SECONDARY> rs.status();

{
"_id" : 1,
"name" : "172.16.8.24:27017",        
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",       --node2变成PRIMARY状态

wuhan:PRIMARY>


二.mongodb使用仲裁节点实现主从切换(将node1,node2,node3节点配置成副本集,node4是仲裁节点)

[root@node2 mongodb-4.0.8]# ./bin/mongo --host=172.16.8.24 --port 27017     --在主节点添加仲裁节点

MongoDB shell version v4.0.8

connecting to: mongodb://172.16.8.24:27017/?gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("d1913a0d-ce00-45f3-88c2-edd1259d9520") }

MongoDB server version: 4.0.8

Server has startup warnings: 

wuhan:PRIMARY> rs.addArb("172.16.8.179:27017")           --添加仲裁节点


三.使用分片实现mongodb集群(node1,node2,node3是副本集和分片节点,node4是路由)

mongos:查询某数据时,先找configsvr询问数据在哪个shard上.

configsvr:不存储真正数据,存储元数据信息,即某条数据在哪个分片上.

     mongodb从3.4版本开始只支持副本集集群才可以使用分片模式,配置服务器(configsvr)少于3个情况下使用集群分片只能用于测试环境,不能用于生产.

(1).在node1,2,3节点修改配置文件(三个node都是一样的)

[root@node1 mongodb-4.0.8]# vim mongo.conf       --三个node节点都相同

dbpath=/opt/mongodb-4.0.8/data

logpath=/opt/mongodb-4.0.8/logs

logappend=true

directoryperdb=true

journal=true

port=27017

bind_ip=172.16.8.23

fork=true

maxConns=1000

replSet=wuhan

shardsvr=true

[root@node1 mongodb-4.0.8]# ./bin/mongod -f mongo.conf    --启动服务

about to fork child process, waiting until server is ready for connections.

forked process: 32353

child process started successfully, parent exiting

[root@node1 mongodb-4.0.8]# 

(2).在node1,2,3节点配置configsvr文件(三台cofigsvr除IP不一样都是一样的)

[root@node1 mongodb-4.0.8]# vim configsvr.conf 

dbpath=/opt/mongodb-4.0.8/data1        --目录需要重新创建

logpath=/opt/mongodb-4.0.8/logs1

logappend=true

directoryperdb=true

journal=true

port=27019

configsvr=true         --开启configsve

replSet=cfgset        

bind_ip=172.16.8.23

fork=true

maxConns=1000

[root@node1 mongodb-4.0.8]# ./bin/mongod -f configsvr.conf 

about to fork child process, waiting until server is ready for connections.

forked process: 9857

child process started successfully, parent exiting

[root@node1 mongodb-4.0.8]#

(3).在node4节点配置mongos文件(路由节点)

[root@node4 mongodb-4.0.8]# vim mongos.conf 

logpath=/opt/mongodb-4.0.8/logs1

logappend=true

port=27030

configdb=cfgset/172.16.8.23:27019,172.16.8.24:27019,172.16.8.178:27019    -- cfgset 是副本集名字,IP地址和端口是configsvr的

bind_ip=172.16.8.179

fork=true

maxConns=1000

[root@node4 mongodb-4.0.8]# ./bin/mongos -f mongos.conf &    --需要后台启动

[1] 792

[root@node4 mongodb-4.0.8]# 2019-04-04T11:31:17.220+0800 W SHARDING [main] Running a sharded cluster with fewer than 3 config servers should 

only be done for testing purposes and is not recommended for production.

about to fork child process, waiting until server is ready for connections.

forked process: 794

child process started successfully, parent exiting

[root@node4 mongodb-4.0.8]# 

(4).在mongos中定义分片

[root@node4 mongodb-4.0.8]# ./bin/mongo --host 172.16.8.179 --port 27030   --进入mongos接口

MongoDB shell version v4.0.8

connecting to: mongodb://172.16.8.179:27030/?gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("d74da65a-9d81-48b1-9071-acd4c7d3d31f") }

MongoDB server version: 4.0.8

Server has startup warnings: 

mongos> sh.addShard("wuhan/172.16.8.23:27017,172.16.8.24:27017,172.16.8.178:27017");

{
"shardAdded" : "wuhan",
"ok" : 1,
"operationTime" : Timestamp(1554352779, 11),
"$clusterTime" : {
"clusterTime" : Timestamp(1554352779, 11),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

mongos> 

(5).创建数据库使用分片数据

mongos> use preson

switched to db preson

mongos> show tables;

mongos> sh.enableSharding("preson");

{
"ok" : 1,
"operationTime" : Timestamp(1554353102, 4),
"$clusterTime" : {
"clusterTime" : Timestamp(1554353102, 4),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

mongos> sh.shardCollection("preson.teacher",{name:"hashed"});

{
"collectionsharded" : "preson.teacher",
"collectionUUID" : UUID("6383cf50-20aa-4643-86bd-32f17cfbf0f1"),
"ok" : 1,
"operationTime" : Timestamp(1554353124, 15),
"$clusterTime" : {
"clusterTime" : Timestamp(1554353124, 15),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}

mongos> for (var i=0;i<100;i++) db.teacher.insert({name:"zs"+i,age:i});      --生成数据

WriteResult({ "nInserted" : 1 })

mongos> show tables;

teacher

mongos> db.teacher.find()

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e68"), "name" : "zs0", "age" : 0 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e69"), "name" : "zs1", "age" : 1 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6a"), "name" : "zs2", "age" : 2 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6b"), "name" : "zs3", "age" : 3 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6c"), "name" : "zs4", "age" : 4 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6d"), "name" : "zs5", "age" : 5 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6e"), "name" : "zs6", "age" : 6 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6f"), "name" : "zs7", "age" : 7 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e70"), "name" : "zs8", "age" : 8 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e71"), "name" : "zs9", "age" : 9 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e72"), "name" : "zs10", "age" : 10 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e73"), "name" : "zs11", "age" : 11 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e74"), "name" : "zs12", "age" : 12 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e75"), "name" : "zs13", "age" : 13 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e76"), "name" : "zs14", "age" : 14 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e77"), "name" : "zs15", "age" : 15 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e78"), "name" : "zs16", "age" : 16 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e79"), "name" : "zs17", "age" : 17 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e7a"), "name" : "zs18", "age" : 18 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e7b"), "name" : "zs19", "age" : 19 }

Type "it" for more

mongos> 

(6).在mongodb副制集查看数据(node1节点)

wuhan:PRIMARY> show tables;

teacher

wuhan:PRIMARY> db.teacher.find();

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e68"), "name" : "zs0", "age" : 0 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e69"), "name" : "zs1", "age" : 1 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6a"), "name" : "zs2", "age" : 2 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6e"), "name" : "zs6", "age" : 6 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6f"), "name" : "zs7", "age" : 7 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e70"), "name" : "zs8", "age" : 8 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e72"), "name" : "zs10", "age" : 10 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e73"), "name" : "zs11", "age" : 11 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e75"), "name" : "zs13", "age" : 13 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e78"), "name" : "zs16", "age" : 16 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e7a"), "name" : "zs18", "age" : 18 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e7b"), "name" : "zs19", "age" : 19 }

Type "it" for more

wuhan:PRIMARY>

(7).在mongodb副制集查看数据(node2节点)

wuhan:SECONDARY> db.teacher.find();

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6b"), "name" : "zs3", "age" : 3 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6c"), "name" : "zs4", "age" : 4 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e6d"), "name" : "zs5", "age" : 5 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e71"), "name" : "zs9", "age" : 9 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e74"), "name" : "zs12", "age" : 12 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e76"), "name" : "zs14", "age" : 14 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e77"), "name" : "zs15", "age" : 15 }

{ "_id" : ObjectId("5ca58bfd0fd7364c87ce9e79"), "name" : "zs17", "age" : 17 }

Type "it" for more

wuhan:SECONDARY>



错误处理:

[root@node1 mongodb-4.0.8]# ./bin/mongod -f mongo.conf 

2019-04-01T18:19:39.842+0800 F CONTROL  [main] Master/slave replication is no longer supported

[root@node1 mongodb-4.0.8]#

解决方法:(mongodb-4.0.8不支持主从架构)

[root@node1 mongodb-4.0.8]# vim mongo.conf

master=true       --去掉这行

[root@node1 mongodb-4.0.8]# 


slave节点命令出错:

wuhan:SECONDARY> show dbs

2019-04-01T19:22:12.459+0800 E QUERY    [js] Error: listDatabases failed:{

"operationTime" : Timestamp(1554117728, 1),

"ok" : 0,

"errmsg" : "not master and slaveOk=false",

"code" : 13435,

"codeName" : "NotMasterNoSlaveOk",

解决方法:

wuhan:SECONDARY> rs.slaveOk()

wuhan:SECONDARY> show dbs

admin   0.000GB

config  0.000GB

local   0.000GB

tong    0.000GB

wuhan:SECONDARY> 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25854343/viewspace-1347163/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25854343/viewspace-1347163/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值