MongoDB之复制集(二)搭建

准备工作

环境:
CentOS6.5 64位

MongoDB
3.0.1 64位

一、启动mongod服务

[[email protected] data]# /usr/local/mongodb3.0.1/bin/mongod --port 40144 --dbpath=/data/mongodb3.0.1/data/ --logpath=/data/mongodb3.0.1/log/mongodb.log --directoryperdb --maxConns 100 --logappend --replSet repl/192.168.66.89:50144 --fork

[[email protected] data]# /usr/local/mongodb3.0.1/bin/mongod --port 50144 --dbpath=/data/mongodb3.0.1/db_50144/ --logpath=/data/mongodb3.0.1/db_50144/mongodb.log --directoryperdb --maxConns 100 --logappend --replSet repl/192.168.66.89:40144 --fork

[[email protected] data]# /usr/local/mongodb3.0.1/bin/mongod --port 60144 --dbpath=/data/mongodb3.0.1/db_60144/ --logpath=/data/mongodb3.0.1/db_60144/mongodb.log --directoryperdb --maxConns 100 --logappend --replSet repl/192.168.66.89:40144 --fork

参数:

--oplogSize 日志操作文件的大(默认磁盘剩余空间的5%)

--dbpath   数据文件路径

--logpath  日志文件路径

--port        端口号,默认是27017

--replSet   复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

--replSet test/  这个后面跟的是其他standard节点的ip和端口

--maxConns   最大连接数

--fork       后台运行

--logappend   日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

任选一个节点登录mongodb数据库

[[email protected] data]# /usr/local/mongodb3.0.1/bin/mongo --port 40144

MongoDB shell version: 3.0.1

connecting to: 127.0.0.1:40144/test

Server has startup warnings:

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten]

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten]

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is ‘always‘.

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten] **        We suggest setting it to ‘never‘

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten]

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always‘.

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten] **        We suggest setting it to ‘never‘

2015-05-08T09:06:42.270+0800 I CONTROL  [initandlisten]

#使用admin数据库

> use admin;

switched to db admin

#定义副本集配置变量并初始化,这里的 _id:”replSet” 和上面命令参数“--replSet repl” 要保持一样

> db.runCommand({"replSetInitiate":{"_id":"repl","members":[{"_id":1,"host":"192.168.66.89:40144"},{"_id":2,"host":"192.168.66.89:50144"},{"_id":3,"host":"192.168.66.89:60144"}]}});

{ "ok" : 1 }

#查看副本集信息

repl:OTHER> db._adminCommand("replSetGetStatus");

{

"set" : "repl",

"date" : ISODate("2015-05-08T01:18:55.619Z"),

"myState" : 1,

"members" : [

{

"_id" : 1,

"name" : "192.168.66.89:40144",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 776,

"optime" : Timestamp(1431047920, 1),

"optimeDate" : ISODate("2015-05-08T01:18:40Z"),

"electionTime" : Timestamp(1431047923, 1),

"electionDate" : ISODate("2015-05-08T01:18:43Z"),

"configVersion" : 1,

"self" : true

},

{

"_id" : 2,

"name" : "192.168.66.89:50144",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 15,

"optime" : Timestamp(1431047920, 1),

"optimeDate" : ISODate("2015-05-08T01:18:40Z"),

"lastHeartbeat" : ISODate("2015-05-08T01:18:53.650Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T01:18:53.650Z"),

"pingMs" : 0,

"lastHeartbeatMessage" : "could not find member to sync from",

"configVersion" : 1

},

{

"_id" : 3,

"name" : "192.168.66.89:60144",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 15,

"optime" : Timestamp(1431047920, 1),

"optimeDate" : ISODate("2015-05-08T01:18:40Z"),

"lastHeartbeat" : ISODate("2015-05-08T01:18:53.650Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T01:18:53.649Z"),

"pingMs" : 0,

"lastHeartbeatMessage" : "could not find member to sync from",

"configVersion" : 1

}

],

"ok" : 1

}

二、测试

1、主节点写入数据,其他节点查询

repl:PRIMARY> use mtdamai;

switched to db mtdamai

repl:PRIMARY> db.user.insert({name:"wangxiuli"});

WriteResult({ "nInserted" : 1 })

repl:PRIMARY> db.user.find();

{ "_id" : ObjectId("554c237123db30ab1a233e4b"), "name" : "wangxiuli" }

#备节点查询发现已有数据

repl:SECONDARY> use mtdamai;

switched to db mtdamai

repl:SECONDARY> db.user.find();

{ "_id" : ObjectId("554c237123db30ab1a233e4b"), "name" : "wangxiuli" }

2、停止主节点

repl:SECONDARY> rs.status();

{

"set" : "repl",

"date" : ISODate("2015-05-08T02:51:25.273Z"),

"myState" : 2,

"members" : [

{

"_id" : 1,

"name" : "192.168.66.89:40144",

"health" : 0,

"state" : 8,

"stateStr" : "(not reachable/healthy)",

"uptime" : 0,

"optime" : Timestamp(0, 0),

"optimeDate" : ISODate("1970-01-01T00:00:00Z"),

"lastHeartbeat" : ISODate("2015-05-08T02:51:23.984Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T02:50:55.975Z"),

"pingMs" : 0,

"lastHeartbeatMessage" : "Failed attempt to connect to 192.168.66.89:40144; couldn‘t connect to server 192.168.66.89:40144 (192.168.66.89), connection attempt failed",

"configVersion" : -1

},

{

"_id" : 2,

"name" : "192.168.66.89:50144",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 5563,

"optime" : Timestamp(1431053169, 2),

"optimeDate" : ISODate("2015-05-08T02:46:09Z"),

"lastHeartbeat" : ISODate("2015-05-08T02:51:24.227Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T02:51:24.120Z"),

"pingMs" : 0,

"electionTime" : Timestamp(1431053458, 1),

"electionDate" : ISODate("2015-05-08T02:50:58Z"),

"configVersion" : 1

},

{

"_id" : 3,

"name" : "192.168.66.89:60144",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 5733,

"optime" : Timestamp(1431053169, 2),

"optimeDate" : ISODate("2015-05-08T02:46:09Z"),

"configVersion" : 1,

"self" : true

}

],

"ok" : 1

}

#发现主节点已经重新被选出

再来插入数据验证

repl:PRIMARY> db.user.insert({name:"chenglong"});

WriteResult({ "nInserted" : 1 })

repl:PRIMARY> db.user.find();

{ "_id" : ObjectId("554c237123db30ab1a233e4b"), "name" : "wangxiuli" }

{ "_id" : ObjectId("554c25202dcdffb154643e56"), "name" : "chenglong" }

#验证备节点不可写

repl:SECONDARY> db.user.insert({name:"liudehua"});

WriteResult({ "writeError" : { "code" : undefined, "errmsg" : "not master" } })

#查询数据已存在,说明数据已同步到其他节点

repl:SECONDARY> use mtdamai;

switched to db mtdamai

repl:SECONDARY> db.user.find();

Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

repl:SECONDARY> rs.slaveOk();

repl:SECONDARY> db.user.find();

{ "_id" : ObjectId("554c237123db30ab1a233e4b"), "name" : "wangxiuli" }

{ "_id" : ObjectId("554c25202dcdffb154643e56"), "name" : "chenglong" }

#再次启动被关闭的节点,该节点变为secondary

repl:SECONDARY> rs.status();

{

"set" : "repl",

"date" : ISODate("2015-05-08T07:54:20.607Z"),

"myState" : 2,

"syncingTo" : "192.168.66.89:50144",

"members" : [

{

"_id" : 1,

"name" : "192.168.66.89:40144",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 19,

"optime" : Timestamp(1431053600, 1),

"optimeDate" : ISODate("2015-05-08T02:53:20Z"),

"lastHeartbeat" : ISODate("2015-05-08T07:54:19.079Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T07:54:20.557Z"),

"pingMs" : 0,

"syncingTo" : "192.168.66.89:60144",

"configVersion" : 1

},

{

"_id" : 2,

"name" : "192.168.66.89:50144",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 23738,

"optime" : Timestamp(1431053600, 1),

"optimeDate" : ISODate("2015-05-08T02:53:20Z"),

"lastHeartbeat" : ISODate("2015-05-08T07:54:20.152Z"),

"lastHeartbeatRecv" : ISODate("2015-05-08T07:54:20.105Z"),

"pingMs" : 0,

"electionTime" : Timestamp(1431053458, 1),

"electionDate" : ISODate("2015-05-08T02:50:58Z"),

"configVersion" : 1

},

{

"_id" : 3,

"name" : "192.168.66.89:60144",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 23908,

"optime" : Timestamp(1431053600, 1),

"optimeDate" : ISODate("2015-05-08T02:53:20Z"),

"syncingTo" : "192.168.66.89:50144",

"configVersion" : 1,

"self" : true

}

],

"ok" : 1

}

#数据也同步过来了

repl:SECONDARY> use mtdamai;

switched to db mtdamai

repl:SECONDARY> db.user.find();

{ "_id" : ObjectId("554c237123db30ab1a233e4b"), "name" : "wangxiuli" }

{ "_id" : ObjectId("554c25202dcdffb154643e56"), "name" : "chenglong" }

时间: 2024-08-18 06:48:23

MongoDB之复制集(二)搭建的相关文章

mongodb3.4.0复制集的搭建

本次主要介绍一下我们项目中关于mongodb复制集的搭建过程. 部署三台mongodb,分别是在69,70,71上面.71上面是主节点,69和70是从节点.使用mongodb3.4.0版本. 先看一安装完后的目录结构: /u04 --mongodb --data  数据文件目录 --logs --mongo.log --mongodb3.4  安装目录 --bin --keyfile.dat  集群通信的文件 --mongo.conf --mongodb.pid --mongoDbStart.l

centos7部署MongoDB数据库复制集(超详细)

centos7部署MongoDB数据库复制集(超详细)重点:复制集概述:复制集实现原理:复制集的应用案例:一.概述:组成:Mongodb复制集(副本集replica set)由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写入Primary,Secondary通过oplog来同步Primary的数据,保证主节点和从节点数据的一致性,复制集在完成主从复制的基础上,通过心跳机制,一旦primary节点出现宕

MongoDB复制集架构搭建

创建目录 mkdir -p /data/r0 /data/r1 /data/r2 声明实例 ./bin/mongod --port 27017 --dbpath /home/workspace/data/r0/ --smallfiles --replSet rsa --fork --logpath /home/workspace/logs/mongo0.log./bin/mongod --port 27018 --dbpath /home/workspace/data/r1/ --smallfi

MongoDB之复制集(一)原理篇

参考资料 官网:www.mongodb.org 中文社区:www.mongoing.com 在线教程:https://university.mongodb.com/ mongodb支持传统的master-slave架构.没有自动故障转移功能,需要指定master和slave端.建议使用复制集架构,复制集架构比复制架构更好维护,功能更强. 一.基本概念 复制集是由一组拥有相同数据集的 mongod 实例组成的.其中的一个节点为主节点(Primary),所有的写请求都是在它上面完成的.而其他的节点都

mongodb 3.4 集群搭建:分片+副本集

mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 先来看一张图: 从图中可以看到有四个组件:mongos.config server.shard.replica set. mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把

MongoDB配置复制集

简介 MongoDB复制是将数据同步在多个服务器的过程. 复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性. 复制集还允许从硬件故障和服务中断中恢复数据. 复制集的优势 保障数据的安全性 数据高可用性 (24*7) 灾难恢复 无需停机维护(如备份,重建索引,压缩) 分布式读取数据 MongoDB复制原理 mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各个节

mongodb 分片+复制集

mongodb版本:3.0.4 准备: 1.校验服务器的时间,3台同步 2.关闭防火墙 3.关闭selinux Sharding+Replica Sets 主机 IP 服务及端口 Server A 192.168.31.231 mongod shard1_1:27017 mongod shard2_1:27018 mongod config1:20000 mongs1:30000 Server B 192.168.31.232 mongod shard1_2:27017 mongod shard

Spring Boot MongoDB 可复制集的读写分离

最近项目的一个版本刚迭代上去,然后设备也陆续地接入到了系统中. 设备产生的数据经过解析.处理之后落到了 MongoDB 中,但是才 10w 的数据就导致分页查询非常慢,count 操作也是慢的感人. 上午加了索引之后,从 10 多秒降到了 5 秒左右,但是这个速度还是很慢啊,这 TM 的等到设备都接入进来不就炸了. 然后下午就开始排错,查看代码中的慢查询. 最后发现一个现象就是:通过 Navicat 去查询相同的 find 和 count 语句要比在代码中快了好多倍,客户端的查询才是正常现象.

MongoDB 部署复制集(副本集)

环境 操作系统:Ubuntu 18.04 MongoDB: 4.0.3 服务器 首先部署3台服务器,1台主节点 + 2台从节点 3台服务器的内容ip分别是: 10.140.0.5 (主节点) 10.140.0.6 (从节点01) 10.140.0.7 (从节点02) 安装MongoDB 接下来,需要在每一台服务器上安装MongoDB. 完整安装过程可参考官方文档. 为了方便,本文提供MongoDB的一键安装脚本. 切换成root用户 sudo su - 运行安装脚本 wget https://g