当前位置:Gxlcms > 数据库问题 > MongoDB

MongoDB

时间:2021-07-01 10:21:17 帮助过:4人阅读

--srv1    config_file_name:rs0_1.conf
dbpath=C:\data\db\db_rs0
logpath=C:\data\db\db_rs0\rs0_1.log
port=40001
replSet=rs0

--srv2   config_file_name:rs0_2.conf
dbpath=C:\data\db\db_rs0
logpath=C:\data\db\db_rs0\rs0_2.log
port=40002
replSet=rs0

--srv3  config_file_name:rs0_3.conf
dbpath=C:\data\db\db_rs0
logpath=C:\data\db\db_rs0\rs0_3.log
port=40003
replSet=rs0
技术分享

配置参数含义:

  • replSet:设置Replica Set的name,在各个配置文件中,其值必须相同。
  • dbpath:MongoDB用于存储数据的目录,默认值是C:\data\db
  • logpath:用于记录mongod的日志数据
  • port:指定MongoDB监听的端口,默认值是27017

2,以配置文件方式启动mongod

一般情况下,mongod的参数值是不变的,将这些参数写入到配置文件中,能够简化MongoDB的管理。

mongod 命令有参数:--config 或 -f,用于引用配置文件。

技术分享
--srv1
mongod -f C:\data\rs0_1.conf

--srv2
mongod -f C:\data\rs0_2.conf

--srv3
mongod -f C:\data\rs0_3.conf
技术分享

3,启动mongo shell

在任意一台Server上打开三个mongo shell,使用参数 --host 指定Server Name,使用 --port 指定端口号。由于mongod没有使用默认的监听端口 27017,因此,必须使用 在mongo shell中使用 --port参数显式指定监听的Port。

技术分享
--connect srv1
mongo --host srv1 --port 40001

--connect srv2
mongo --host srv2 --port 40002

--connect srv3 
mongo --host srv3 --port 40003
技术分享

五,配置Replica Set

在不同的Server上运行不同的MongoDB Instance,但是,每个mongod 都不知道其他mongod的存在,为了让每个mongod能够感知彼此的存在,需要配置Replica set,增加成员。

1,使用配置文档为Replica Set 增加成员

在srv1的mongo shell中,创建配置文档,调用rs.initiate()函数,按照配置文档来初始化Replica Set。

技术分享
conf=
{
    "_id" : "rs0",
    "members" : [
        { "_id" : 0,  "host" : "srv1:40001"  },
        { "_id" : 1,  "host" : "srv2:40002"  },
        { "_id" : 2,  "host" : "srv3:40003"  }
    ]
}

rs.initiate(conf)
技术分享

在配置doc中,使用"_id" : "rs0" 指定Replica Set的name,members数组指定 Replica Set的成员的ID 和 host(“host:port”)。等到所有成员配置完成之后,Replica Set 会自动选举出一个Primary 节点,两个Secondary 节点。在Primary 节点上进行更新操作,就能同步到Secondary 节点了。

2,修改Replica Set

如果以rs.initiate()方式初始化Replica Set,那么MongoDB以默认配置文档初始化Replica Set,可以通过add()函数增加成员。

2.1 向Replica Set中增加一个成员

rs.add("host:port")

2.2 从Replica Set中删除一个成员

rs.remove("host")

2.3 查看Replica Set的配置

rs.conf()

2.4 重新配置Replica Set

技术分享
var conf=rs.conf()
conf.members[1].priority =5

--at primary member
rs.reconf(conf)

--at secondary member rs.reconf(conf,{force:true})
技术分享

2.5 查看Replica Set的状态

rs.status()

六,维护Replica Set

1,查看Replica Set的配置信息

rs.conf()

配置文档主要分为三块:Replica Set 的ID和 Version,Members数组 和 Settings,下面是经过简化的配置信息。

技术分享
{
    "_id" : "rs0",
    "version" : 202997,
    "members" : [ 
        {
            "_id" : 1,
            "host" : "srv1:40001",
            "arbiterOnly" : false,
            "hidden" : false,
            "priority" : 5,
            "votes" : 1
        }, {...}
    ],
    "settings" : {  .....  }
}
技术分享

Replica Set的ID字段唯一标识一个Replica Set,每一个Replica Set都有一个自增的版本号,由Version字段标识,标识Replica Set的不同版本。version字段的初始值是1,每次修改Replica Set的配置时,version字段都会自增。

Settings 字段的值是应用到Replica Set中所有成员的配置信息。

最关键的是members数组的字段,标识每个成员的配置信息。

  • arbiterOnly:0或1,标识一个仲裁(arbiter),Arbiter的唯一作用是参与Primary的选举,Arbiter不保存数据,不会为client提供服务,它存在的意义就是为了选举Primary。
  • hidden:0或1,表示该成员是不是隐藏成员,Hidden成员的主要作用是备份数据,可以使用性能较差的服务器作为Hidden成员。Hidden成员不会接收Client的请求,也不会成为Primary。在设置Hidden成员时,必须设置members[n].priorty属性为0;
  • priority数值类型,用于设置成员成为Primary的优先级。priority越高的成员,越有机会成为Primary。如果priority=0,那么该成员永远不会成为Primary。
  • votes:1或0,表示该成员的投票的数量,在每个Replica Set中,最多有7个成员,其votes属性值是1。votes 属性是1的成员(voting members)拥有选举Primary的权利。一个成员要想成为一个Primary,那么必须获得voting members的大多成员的支持。

在Replica Set中,如果voting members的数量是5,那么一个成员成为Primary的条件是:获得超过2个voting members的支持,并且没有任何voting members 反对。只要有任意一个voting member 反对该成员成为Primary,那么该成员就不能成为Primary。

2,强制一个成员成为Primary

如果将一个成员的priority属性在Replica Set的所有成员中是最高的,那么该成员最有可能成为Primary。

将成员0的priority设置5,其他成员的priority设置为1,这样,成员0成为Primary的优先级是最高的。

cfg = rs.conf()
cfg.members[0].priority = 5
cfg.members[1].priority = 1
cfg.members[2].priority = 1
rs.reconfig(cfg)

七,测试数据

1,在Primary上读写数据

db.users.insert({_id:1,name:"a",age:24})

2,在Secondary上读取数据

默认情况下,客户端不能从Secondary成员中读取数据。在Secondary成员上显式执行setSlaveOk之后,才能从Secondary节点读取数据。

rs.setSalveOk()

db.users.find({_id:1})

八,查看mongod 服务器的命令行参数

技术分享
db.serverCmdLineOpts()

/* 0 */ { "argv" : [ "mongod", "-f", "C:\\data\\rs0_1.conf" ], "parsed" : { "config" : "C:\\data\\rs0_1.conf", "net" : { "port" : 40001 }, "replication" : { "replSet" : "rs0" }, "storage" : { "dbPath" : "C:\\data\\db\\db_rs0" }, "systemLog" : { "destination" : "file", "path" : "C:\\data\\db\\db_rs0\\rs0_1.log" } }, "ok" : 1 }
技术分享

参考doc:

Replication

Replica Set Tutorials

MongoDB - Replication

Replica Set Configuration

Force a Member to Become Primary

MongoDB

标签:

人气教程排行