您的当前位置:首页正文

3.0 MongoDB副本集搭建

2024-12-03 来源:个人技术集锦

简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。

Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。主备节点存储数据,仲裁节点不存储数据。客户端同时连接主节点与备节点,不连接仲裁节点。

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。这

个设置叫做 Read Preference Modes,同时 Java 客户端提供了简单的配置方式,可以不必直接对数据库进行操作。

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。我开始也不相信必须要有仲裁节点,但是自己也试过没仲裁节点的话,主节点挂了备节点还是备节点,所以咱们还是需要它的。

介绍完了集群方案,那么现在就开始搭建了。

注意:为了方便,没个节点只有一个解压MongoDB文件,启动的时候按不同的配置文件启动就行

1.建立数据文件夹

mkdir -p /opt/mongodb/replset/master

mkdir -p /opt/mongodb/replset/slaver

mkdir -p /opt/mongodb/replset/arbiter

2.建立配置文件

由于配置比较多,所以我们将配置写到文件里。

vi /opt/mongodb/replset/master/mongodb.cfg

dbpath=/opt/mongodb/replset/master/data

logpath=/opt/mongodb/replset/master/logs/mongodb.log

logappend=true

replSet=shard002

bind_ip=192.168.209.128

port=27017

fork=true

 

vi /opt/mongodb/replset/slave/mongodb.cfg

dbpath=/opt/mongodb/replset/slave/data

logpath=/opt/mongodb/replset/slave/logs/mongodb.log

logappend=true

replSet=shard002

bind_ip=192.168.209.129

port=27017

fork=true

 

vi /opt/mongodb/replset/arbiter/mongodb.cfg

dbpath=/opt/mongodb/replset/arbiter/data

logpath=/opt/mongodb/replset/arbiter/logs/mongodb.log

logappend=true

replSet=shard002

bind_ip=192.168.209.130

port=27017

fork=true

参数解释:

logpath:日志存放路径

logappend:以追加的方式记录日志

replSet:replica set 的名字

port:mongodb 进程所使用的端口号,默认为 27017

fork:以后台方式运行进程

3、分发到集群下的其他机器

#将从节点配置发送到 192.168.209.129

scp -r /opt/mongodb/replset/slave

root@192.168.209.129:/opt/mongodb/replset

#将仲裁节点配置发送到 192.168.209.130

scp -r /opt/mongodb/replset/arbiter

root@192.168.209.130:/opt/mongodb/replset

4.启动 mongodb

#登录 192.168.209.128 启动主节点

monood -f /opt/mongodb/replset/master/mongodb.cfg

#登录 192.168.209.129 启动从节点

mongod -f /opt/mongodb/replset/slave/mongodb.cfg

#登录 192.168.209.130 启动仲裁节点

mongod -f /opt/mongodb/replset/arbiter/mongodb.cfg

注意配置文件的路径一定要保证正确,可以是相对路径也可以是绝对路径。

5.配置主,备,仲裁节点

可以通过客户端连接 mongodb,也可以直接在三个节点中选择一个连接 mongodb。

mongo 192.168.209.128:27017

use admin

cfg={_id:"shard002",members:[{_id:0,host:'192.168.209.128:27017',priority:9},{_id:1,host:'192.168.209.129:27017',priority:1},{_id:2,host:'192.168.209.130:27017',arbiterOnly:true}]};

#使配置生效

rs.initiate(cfg)

先级。优先级最高的即成为主节点,即这里的 192.168.209.128:27017。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。

配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。如果生效了,执行 rs.status()命令会看到如下信息:

{

"set" : "testrs",

"date" : ISODate("2013-01-05T02:44:43Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "192.168.209.128:27004",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"uptime" : 200,

"optime" : Timestamp(1357285565000, 1),

"optimeDate" :

ISODate("2017-12-22T07:46:05Z"),

"self" : true

},

{

"_id" : 1,

"name" : "192.168.209.128:27003",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 200,

"optime" : Timestamp(1357285565000, 1),

"optimeDate" :

ISODate("2017-12-22T07:46:05Z"),

"lastHeartbeat" :

ISODate("2017-12-22T02:44:42Z"),

"pingMs" : 0

},

{

"_id" : 2,

"name" : "192.168.209.128:27005",

"health" : 1,

"state" : 7,

"stateStr" : "ARBITER",

"uptime" : 200,

"lastHeartbeat" :

ISODate("2017-12-22T02:44:42Z"),

"pingMs" : 0

}

],

"ok" : 1

}

如果配置正在生效,其中会包含如下信息:

"stateStr" : "STARTUP"

同时可以查看对应节点的日志,发现正在等待别的节点生效或者正在分配数据文件。

现在基本上已经完成了集群的所有搭建工作。

 

显示全文