千家信息网

MongoDB复制集角色类型详解

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,MongoDB复制集角色类型MongoDB复制集角色类型1、标准节点: 参与primary选举,当自身宕机或停止服务会自动让出primary2、被动节点: 只能成为second 不参与选举,被设置为被
千家信息网最后更新 2025年02月02日MongoDB复制集角色类型详解


MongoDB复制集角色类型

MongoDB复制集角色类型

1、标准节点: 参与primary选举,当自身宕机或停止服务会自动让出primary

2、被动节点: 只能成为second 不参与选举,被设置为被动节点则不能参与选举

3、仲裁节点:负责投票选举,不存放数据,确保标准节点投票数不会相同


用实验来验证一下标准节点互相抢占和被动节点不会抢占以及仲裁节点不存放数据。

利用MongoDB多实例进行实验,yum安装MongoDB以及开启多实例请参考以下

我的另一篇博客:https://blog.51cto.com/13760226/2174032


实验角色

●标准节点1:192.168.60.135:27017

●标准节点2:192.168.60.135:27018

●被动节点 :192.168.60.135:27019

●仲裁节点 :192.168.60.135:27020


一、修改配置文件

vim /etc/mongod.conf

systemLog: #日志模块下修改日志文件路径

destination: file

logAppend: true

path: /usr/local/mongodb/mongod1.log

(剩下实例也要修改,例:mongod2.log,mongod3.log,mongod4.log)


storage: #存储模块下修改数据配置文件

dbPath: /usr/local/mongo1

(同上,例:mongo2,mongo3,mongo4)


net:

port: 27017 每个实例端口号不能相同(例:27018,27019,27020)

bindIp: 0.0.0.0 监听任意地址


直接添加如下两行,开启复制集

replication:

replSetName: repl



二、复制配置文件,创建各自数据存放目录

cp /etc/mongod.conf /etc/mongod2.conf

cp /etc/mongod.conf /etc/mongod3.conf

cp /etc/mongod.conf /etc/mongod4.conf



mkdir /usr/local/mongo{1,2,3,4} #一次创建4个数据存放目录(与配置文件的对应)

mkdir /usr/local/mongodb #创建日志存放目录

touch mongod{1,2,3,4}.log #创建实例对应日志文件

(注意:不要忘记修改复制的配置文件,端口号不能相同)


三、开启多实例,设置标准,被动,仲裁节点

[root@localhost ~]#mongod -f /etc/mongod.conf

[root@localhost ~]#mongod -f /etc/mongod2.conf

[root@localhost ~]#mongod -f /etc/mongod3.conf

[root@localhost ~]#mongod -f /etc/mongod4.conf


[root@localhost mongodb]# netstat -ntap | grep mongod

tcp 0 0 0.0.0.0:27019 0.0.0.0:* LISTEN 2280/mongod

tcp 0 0 0.0.0.0:27020 0.0.0.0:* LISTEN 2308/mongod

tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 2224/mongod

tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 2252/mongod


1)进入其中一个Mongodb进行设置,本文以27017为例

mongo进入数据库,设置如下

>cfg={"_id":"repl","members":

[{"_id":0,"host":"192.168.60.135:27017","priority":100},

{"_id":1,"host":"192.168.60.135:27018","priority":100},

{"_id":2,"host":"192.168.60.135:27019","priority":0},

{"_id":3,"host":"192.168.60.135:27020","arbiterOnly":true}]}


cfg只是一个名字,类似于变量。将27017和27018优先级设置为100,

27019的优先级为0,没有资格参与选举,27020设置为arbite,为仲裁复制集。


> rs.initiate(cfg) #进行初始化

{ #提示如下信息

"ok" : 1,

"operationTime" : Timestamp(1536851525, 1),

"$clusterTime" : {

"clusterTime" : Timestamp(1536851525, 1),

"signature" : {

"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),

"keyId" : NumberLong(0)

}

}

}


2)查看状态

repl:PRIMARY> rs.status()



27017被选为标准节点,27018有选举权但是已经有标准节点,所以变为被动节点,

27019被选为被动节点,27020被设置为仲裁节点。


四、验证

1)验证标准节点会互相抢占

repl:PRIMARY> rs.stepDown() #主动放弃主复制权




2)验证被动节点不抢占

[root@localhost ~]# mongod -f /etc/mongod.conf --shutdown

killing process with pid: 2224

[root@localhost ~]# mongod -f /etc/mongod2.conf --shutdown

killing process with pid: 2252

关闭27017和27018的MongoDB

[root@localhost ~]# mongo -port 27019 #进入mongodb端口27019

>rs.status()



结论:当两台标准节点宕机时,被动节点也不会顶替成为标准节点,因为没有选举权。


3)验证仲裁服务器不存储数据


开启MongoDB27017端口

[root@localhost ~]# mongod -f /etc/mongod.conf

mongo #登陆


use list; #创建一个数据库

db.list.insert({"name":"zhangsan"}) 创建list集合并插入信息

repl:PRIMARY> db.list.find(); 查询list

{ "_id" : ObjectId("5b9a8ae579c4aae2378a4fd6"), "name" : "zhangsan" }


然后我们切换到27020仲裁服务器

[root@localhost ~]# mongo -port 27020

rs.slaveOk() #先输出该命令,不然无法查看


repl:ARBITER> show dbs; #查看数据库

local 0.000GB #只能看见一个数据库local


结论:仲裁服务器只负责投票选举,不参与数据存储


节点 数据 标准 仲裁 选举 文件 实例 配置 验证 数据库 日志 服务 角色 相同 服务器 目录 存储 实验 投票 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 如何学好控制网络技术基础 软件开发应聘硕士 乌班图桌面版与服务器哪个更实用 成都 网络安全的公司排名 数据库表中某个字段存储一个文件 三只松鼠软件开发加班多 华为服务器管理口打不开页面 wow服务器排队 使用ipv6搭建游戏服务器 信源豆豆登录显示服务器禁止注册 软件开发人员职位 网络安全密钥打不出字 双阳区通用网络技术咨询诚信服务 浙江人工智能软件开发收费报价表 北京工业软件开发哪家专业 从事软件开发该读研吗 组态王查询数据库数据慢 写代码和网络安全结合 海康服务器管理口密码 wds无法连接服务器 湖南鑫达网络技术 路辰网络技术有限公司 三星S8软件开发 关系型数据库可以多对一吗 打开数据库保存位置 疆内手机软件开发公司 碑林区网络安全主题绘画 网页版工程管理软件开发 如何避免客户端直连数据库 微信的数据库
0