加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 系统 > 正文

MongoDB复制集的选举原理细解以及复制集管理简介

发布时间:2023-10-05 15:06:03 所属栏目:系统 来源:
导读:复制的原理:

复制操作是基于oplog,类似mysql中的bin-log,只记录发生改变的记录。

选举的原理:

节点分为:标准节点、被动节点和仲裁节点。

标准节点(priority值高):只有标准节点才可成为prima
复制的原理:
 
复制操作是基于oplog,类似mysql中的bin-log,只记录发生改变的记录。
 
选举的原理:
 
节点分为:标准节点、被动节点和仲裁节点。
 
标准节点(priority值高):只有标准节点才可成为primary;
 
被动节点(priority值低):被动节点只能是secondary;
 
仲裁节点:不能复制数据、不可成为活跃点、只有选举权;
 
选举结果:票数高者获胜;若票数相同,数据新者获胜
 
一、复制集选举实验介绍
 
实验步骤
 
查看oplog日志
 
配置复制集的优先级
 
模拟主节点故障
 
模拟所有标准节点故障
 
二、复制集选举实验内容
 
---------------------------查看oplog日志-------------------------
 
> use school
 
switched to db school
 
> db.info.insert({"id":1,"name":"tom"})
 
WriteResult({ "nInserted" : 1 })
 
> db.info.find()
 
{ "_id" : ObjectId("5b9a0873692de658bd931c64"), "id" : 1, "name" : "tom" }
 
> use local
 
switched to db local
 
> show collections
 
me
 
oplog.rs
 

 
> db.oplog.rs.find()                
 
{ "ts" : Timestamp(1536723445, 3), … : { "create" : "transactions", "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "config.transactions" } } }
 
{ "ts" : Timestamp(1536723445, 5), …: { "create" : "system.keys", "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.keys" } } }
 
------------------------配置复制集的优先级----------------------------
 
cfg={"_id":"yandada","members": [{"_id":0,"host":"192.168.218.149:27017","priority":100},{"_id":1,"host":"192.168.218.149:27018","priority":100},{"_id":2,"host":"192.168.218.149:27019","priority":0},{"_id":3,"host":"192.168.218.149:27020","arbiterOnly":true}]}
 
rs.reconfig(cfg)
 
        { "ok" : 1 }              //显示OK:1时表示节点配置成功
 
rs.status()                    //查看状态信息
 
rs.isMaster()              //查看节点信息
 
{                                           //显示信息如下
 
     "hosts" : [
 
         "192.168.218.149:27017",
 
         "192.168.218.149:27018"
 
     ],
 
     "passives" : [
 
         "192.168.218.149:27019"
 
     ],
 
     "arbiters" : [
 
         "192.168.218.149:27020"
 
     ]
 
------------------------模拟主节点故障----------------------------
 
关闭主节点服务器
 
yandada:PRIMARY> use admin                #进入admin集合才能进行下一步操作
 
switched to db admin
 
yandada:PRIMARY> db.shutdownServer()               #关闭服务器
 
server should be down…
 
以上操作等同于[root@yandada3 ~]# mongod -f /etc/mongod.conf --shutdown
 
[root@yandada3 ~]# mongo --port 27018
 
yandada:PRIMARY> rs.status()
 
查看状态信息后会发现MongoDB复制集会选举第二个标准节点作为主节点
 
---------------------------模拟所有标准节点故障------------------------
 
[root@yandada3 ~]# mongod -f /etc/mongod.conf --shutdown
 
killing process with pid: 4238
 
[root@yandada3 ~]# mongo --port 27019
 
yandada:SECONDARY> rs.status()
 
查看查看状态信息后会发现无primary节点,被动节点无法成为主节点
 
三、复制集管理简介
 
1.配置允许从节点读取数据
 
yandada:SECONDARY> rs.slaveOk()
 
2.查看复制集状态信息
 
rs.help()
 
yandada:PRIMARY> rs.printReplicationInfo()
 
configured oplog size:   990MB               #oplog存储大小为990MB
 
log length start to end: 101403secs (28.17hrs)
 
oplog first event time:  Wed Sep 12 2018 11:37:13 GMT+0800 (CST)
 
oplog last event time:   Thu Sep 13 2018 15:47:16 GMT+0800 (CST)
 
now:                     Thu Sep 13 2018 15:47:17 GMT+0800 (CST)
 
yandada:PRIMARY> rs.printSlaveReplicationInfo()
 
source: 192.168.218.149:27018
 
     syncedTo: Thu Sep 13 2018 15:47:26 GMT+0800 (CST)
 
     0 secs (0 hrs) behind the primary
 
source: 192.168.218.149:27019
 
     syncedTo: Thu Sep 13 2018 15:47:26 GMT+0800 (CST)
 
     0 secs (0 hrs) behind the primary
 
3.更改oplog大小
 
         1.第一步,退出复制集
 
yandada:PRIMARY> use admin             
 
switched to db admin
 
yandada:PRIMARY> db.shutdownServer()             
 
server should be down…
 
         2.第二步,更改端口(复制集中含有源端口),关闭配置文件中复制集名称,启动mongod
 
vim /etc/mongod.conf
 
net:
 
   port: 2
 
#replication:
 
  #   replSetName: yandada
 
mongod -f /etc/mongod.conf
 
          3.第三步,更改oplog大小
 
[root@yandada3 ~]#  mongo --port 27028
 
> use local
 
switched to db local
 
> db.oplog.rs.drop()
 
true
 
> db.runCommand({create:"oplog.rs",capped:true,size:(2*2048*2048*2048)})
 
{ "ok" : 1 }
 
[root@yandada3 ~]# mongod -f /etc/mongod.conf --shutdown
 
killing process with pid: 8296
 
[root@yandada3 ~]# vim /etc/mongod.conf
 
net:
 
   port: 27017
 
replication:
 
     replSetName: yandada
 
     oplogSizeMB: 16384
 
[root@yandada3 ~]# mongod -f /etc/mongod.conf
 
[root@yandada3 ~]# mongo
 
yandada:SECONDARY> rs.printReplicationInfo()
 
configured oplog size: 16384MB             #oplog大小更改为16G
 
4.认证部署
 
         1.第一步,创建认证用户
 
yandada:PRIMARY> use admin
 
switched to db admin
 
yandada:PRIMARY> db.createUser({"user":"root","pwd":"123","roles":["root"]})
 
Successfully added user: { "user" : "root", "roles" : [ "root" ] }
 
         2.第二步,编辑认证配置
 
vim /etc/mongod.conf
 
     security:
 
           keyFile: /usr/bin/kgcrskey1
 
           clusterAuthMode:keyFile              注:需要与上一行齐平
 
同理,修改mongod[2,3,4]文件
 
[root@yandada3 ~]# echo "kgcrs key" > /usr/bin/kgcrskey[1,2,3,4]
 
[root@yandada3 bin]# echo  "kgcrs key" > /usr/bin/kgcrskey1
 
[root@yandada3 bin]# echo  "kgcrs key" > /usr/bin/kgcrskey2
 
[root@yandada3 bin]# echo  "kgcrs key" > /usr/bin/kgcrskey3
 
[root@yandada3 bin]# echo  "kgcrs key" > /usr/bin/kgcrskey4
 
[root@yandada3 bin]# chmod 600 /usr/bin/kgcrskey{1,2,3,4}
 
           3.第三步,重启服务
 
[root@yandada3 bin]# mongod -f /etc/mongod.conf --shutdown
 
[root@yandada3 bin]# mongod -f /etc/mongod.conf
 
同理,重启mongod[2,3,4]
 
          4.第四步,查看配置状况
 
yandada:PRIMARY> show dbs     
 
    "ok" : 0                  #无权查看
 
yandada:PRIMARY> use admin
 
switched to db admin
 
yandada:PRIMARY> db.auth("root","123")
 
1                               #返回值为1,表示授权成功
 
yandada:PRIMARY> show dbs
 
admin   0.000GB
 
config  0.000GB
 
local   0.000GB
 
school  0.000GB
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章