请教Mongodb 3.2.1mongodb 副本集搭建问题

一、工作原理
1.&&&MongoDB 2.6版本开始推荐使用副本集,对主从复制已经不再推荐.
2.&&&副本集至少需要3个, 可以3个全部做副本集, 也可以让其中一个做仲裁.
3.&&&副本集中只有1台主才能进行写,其余的只能读.
4.&&&副本集之间的复制是通过oplog日志现实的.备份节点通过查询这个集合就可以知道需要进行复制的操作.
5.&&&oplog是节点中local库中的一个固定的集合,在默认情况下oplog初始化大小为空闲磁盘的5%.oplog是capped collection,所以当oplog的空间被占满时,会覆盖最初写入的日志.
6.&&&通过改变oplog文档的大小直接改变local所占磁盘空间的大小.可以在配置文件中设置oplogSize参数来指定oplog文档的大小,例如oplogSize=1024单位默认为M& 每个local文档在磁盘空间的空间都为2G,设置不足2G的,初始化依然为2G大小,例如上面oplogSize=1024,但创建的local.01大小依然为2G.
7.&&&如果备份节点不幸挂掉,由于复制过程中是先写数据,再写oplog,这样重新启动时,可能会重复复制操作.但MongoDB在设计过程中已经考虑过这个问题.当 oplog中同一个操作执行多次的时候,只执行一次.
8.&&&初始化工作.
a)&&&备份找到一个同步的主节点,然后再到local.me中创建一个标识符.开始同步的过程中,需要清空备节点的所有数据库(版本:2.6.7).
b)&&通过oplog中的操作记录,把数据复制在备份节点.
c)&&&完全同步时开始创建索引.
9.&&&如果备节点的同步速度远远跟不上主节点的oplog写入的数据,并且主节点的oplog被覆盖.这样,可能就无法同步那些被覆盖的数据(出现这种情况,暂时还无法解决,只能通过备份主节点的数据,然后再重新同步).
10. 每个成员通过心跳去查看其他节点的状态,每隔2秒钟就有一次心跳检测.
11. 当主节点宕机之后,各个节点通过选举的方式来选择下一个主节点.
二、安装方法
1.&& 3台机器上分别装上MongDB 服务.
&&&&& 192.168.10.21:27017& (备)
&&&&& 192.168.10.26:27017& (备)
&&&&& 192.168.10.27:27018& (主)
2.&& 设置密码认证文件.
&&&&& 可以使用grub-md5-crypt生成加密文件.
& & &&把生成的密文放到一个文件中.并且3台机器要有相同的密文.
& & & 这里把密文放到mongodb主目录下的mongod_key文件中.
3.&& 3个mongo分别设置自己admin库的登录权限.
&&&&& 这个具体方法可以略掉.
4.&& 配置mongo.conf文件.
& & &192.168.10.27 (主)的配置文件
& & &192.168.10.21 (备)的配置文件
& & &192.168.10.26 (备)的配置文件
5.& 关闭每台机器的防火墙
/etc/init.d/iptables &stop
6.& 启动每台机器上的mongodb
7.& 在主机上进行初始化工作,一般在哪台机器上初始化,主就是哪台机器.但是,也可以用权重来控制哪台为主.
&&& config_repl={_id:'alex',members:[
&&& {_id:0,host:'192.168.10.27:27018',priority:10},
&&& {_id:1,host:'192.168.10.26:27017',priority:9},
&&& {_id:2,host:'192.168.10.21:27017',priority:9}]}
&&& 这里的priority越大,主就是哪一台
& & &然后执行rs.initiate(config_repl);&
& & &这时副本集已经配置完成.
&&& &可以用rs.status() 查看各个节点状态.
以我的理解,查看备库同步到主库的什么位置,可以通过optime来看
8. & &设置副本集后,备节点默认是不能读数据的,但可以设置rs.slaveOk().
&&&& 但只对当前session有效.
&&&& 如果用程序去连接,实现读写分离.例如JAVA有相应的方法和参数去达到这一点
9.&&& 切换主-备. (192.168.10.26 提升为主)
& & &rs.conf()&&& # 查看配置
& & &执行:
& &&cfg=rs.conf();
& & cfg.members[1] = 11 & &# 把id为1的主机priority改为11
& & rs.reconfig(cfg)
10.& 查看同步状态.
& & & &上面第9步操作使192.168.10.26升级成为主了.
& & & &db.printSlaveReplicationInfo();
& & & &再执行
& & &&use local
& & & db.oplog.rs.find();
& & & 可以查看到同步的语句.
{ &ts& : Timestamp(, 1), &h& : NumberLong(&-1116878&), &v& : 2, &op& : &i&, &ns& : &bbbb.test1&, &o& : { &_id& : ObjectId(&d5b1bcd83dd2&), &a& : 111 } }
& & &含义解释如下:
ts: 8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary
op:1字节的操作类型
i :insert
u :update
d :delete
c :db cmd
db:声明当前数据库 (其中ns 被设置成为=&数据库名称+ '.')
n : no op,即空操作,其会定期执行以确保时效性
ns:操作所在的namespace
o :操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
o2: 在执行更新操作时的where条件,仅限于update时才有该属性
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:123044次
积分:1526
积分:1526
排名:第19953名
原创:38篇
转载:11篇
评论:13条
(2)(1)(1)(6)(15)(10)(3)(2)(2)(1)(4)(2)数据与性能(41)
MongoDB副本集学习(二):基本测试与应用
简单副本集测试
这一节主要对上一节搭建的副本集做一些简单的测试。
我们首先进入primary节点(37017),并向test.test集合里插入10W条数据:
rs0:PRIMARY& for(var i=0;i&100000;i++){
db.test.insert({&name&:&zhanjindong&+i,&age&:23})
等数据插入完毕我们登入到两个secondary节点,发现数据已经同步过来了:
./bin/mongo -port 37018
rs0:SECONDARY& db.getMongo().setSlaveOk();
rs0:SECONDARY& db.test.count()
注意:在secondary节点上执行操作之前需要执行db.getMongo().setSlaveOk()命令,该设置允许连接从非master端读取数据。
secondary节点宕机:
模拟副本集中一个secondary节点宕机的情况,直接kill -9掉37018这个节点:
kill -9 9508
然后再登录之前primary节点,再插入1W条数据:
rs0:PRIMARY& for(var i=0;i&10000;i++){
db.test.insert({&name&:&zhanjindong&+i,&age&:23})
然后再将37018这个节点启起来,过一会就发现宕机的节点数据已经同步过来了:
rs0:SECONDARY& db.getMongo().setSlaveOk()
rs0:SECONDARY& db.test.count()
primary节点宕机:
再模拟primary节点宕机的情况:kill -9掉37017端口,这时查看监控页面:
可以看到37018已经成了primary节点。主界面宕机导致了整个集群发生一次election,实现了failover。等37017恢复了会自动成为secondary节点:
所有secondary节点宕机:
当所有secondary宕机,或者副本集中只剩下一台机器的时候,那么剩下的机器只能成为secondary节点,也就意味着整个集群智能进行读操作而不能进行写操作:
当集群从故障中恢复过来后,仍然的primary节点仍然是primary节点。
注意:当某个节点宕机后重新启动该节点会有一段的时间(时间长短视集群的数据量和宕机时间而定)导致整个集群中所有节点都成为secondary而无法进行写操作(如果应用程序没有设置相应的ReadReference也可能不能进行读取操作)。
因此官方推荐的最小的副本集也应该具备一个primary节点和两个secondary节点。两个节点的副本集不具备真正的故障转移能力。
应用程序访问副本集
副本集搭建好了,基本的故障转移能力也验证过了,那么应用程序如何访问呢?下面分别介绍下C#和Java驱动如何访问mongodb副本集。
C#驱动下载地址,我使用的最新版本1.8.2。
下面是访问副本集基本的代码:
MongoClientSettings set = new MongoClientSettings();
List&MongoServerAddress& servers = new List&MongoServerAddress&();
servers.Add(new MongoServerAddress(&192.168.129.129&, 37017));
servers.Add(new MongoServerAddress(&192.168.129.129&, 37018));
servers.Add(new MongoServerAddress(&192.168.129.129&, 37019));
set.Servers =
//设置副本集名称
set.ReplicaSetName = &rs0&;
//设置超时时间为3秒
set.ConnectTimeout = new TimeSpan(0, 0, 0, 3, 0);
MongoClient client = new MongoClient(set);
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase(&test&);
MongoCollection coll = db.GetCollection(&test&);
BsonDocument bd = new BsonDocument();
bd.Add(&name&, &zhanjindong&);
bd.Add(&age&, 23);
bd.Add(&sex&, &男D&);
coll.Insert(bd);
QueryDocument qd = new QueryDocument();
qd.Add(&name&, &zhanjindong&);
qd.Add(&age&, 23);
qd.Add(&sex&, &男D&);
BsonDocument rd = coll.FindOneAs&BsonDocument&(qd);
Console.WriteLine(rd.ToString());
当kill掉一个节点(secondary或primary)的时候,读取和写入的操作都是正常的,说明副本集的failover起作用了。但kill模拟两个节点宕机的时候,发现上面的代码在读取的时候会报下面的错误:
这是因为默认的C#驱动的ReadPreference是Primary,也就是说读写操作都是在主节点上的,那么当集群中只剩下一个节点的时候,按照前面所说该节点一定是secondary节点,这样读取操作也是没法进行的(通过mongo shell当然是可以的)。解决方法就是设置驱动的ReadPreferenceMode:
set.ReadPreference = new ReadPreference(ReadPreferenceMode.PrimaryPreferred);
将ReadPreferenceMode设置成Secondary或SecondaryPreferred。后面读写分离一节对ReadPreference会有详细的说明。
Java驱动下载地址:
我用的是最新版本mongo-java-driver-2.11.2.jar。
下面是Java访问MongoDB副本集的基本代码:
List&ServerAddress& addresses = new ArrayList&ServerAddress&();
ServerAddress address1 = new ServerAddress(&192.168.129.129&, 37017);
ServerAddress address2 = new ServerAddress(&192.168.129.129&, 37018);
ServerAddress address3 = new ServerAddress(&192.168.129.129&, 37018);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3);
MongoClient client = new MongoClient(addresses);
DB db = client.getDB(&test&);
DBCollection coll = db.getCollection(&test&);
BasicDBObject object = new BasicDBObject();
object.append(&name&, &zhanjindong&);
object.append(&age&, 23);
object.append(&sex&, &男&);
coll.insert(object);
BasicDBObject qobj = new BasicDBObject();
qobj.append(&name&, &zhanjindong&);
qobj.append(&age&, 23);
qobj.append(&sex&, &男&);
DBObject robj = coll.findOne(qobj);
System.out.println(robj.toString());
和C#一样如果想从secondary节点进行读取操作也是需要设置ReadPreference:
ReadPreference preference = ReadPreference.secondary();
DBObject robj = coll.findOne(qobj, qobj, preference);
不同的是Java驱动发现副本集中某个成员连接不了会发出警告信息:
而且发现如果读取不到的话Java驱动会进行不停的重试。
注:设置驱动的ReadReference也可以通过MongoDB连接字符串配置:mongodb://,,/?readPreference=secondary。通过连接字符串指定的read preference是针对整个连接。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1352165次
积分:15194
积分:15194
排名:第513名
原创:203篇
转载:412篇
评论:207条
(4)(4)(33)(6)(7)(6)(5)(1)(10)(4)(2)(8)(7)(16)(8)(2)(4)(7)(4)(4)(14)(8)(20)(59)(7)(9)(3)(6)(5)(5)(5)(28)(5)(1)(1)(4)(5)(4)(4)(12)(6)(12)(11)(1)(10)(1)(1)(3)(4)(4)(2)(6)(7)(10)(7)(9)(3)(4)(3)(1)(10)(8)(8)(9)(4)(9)(10)(4)(2)(8)(1)(1)(1)(1)(1)(3)(3)(3)(3)(4)(15)(25)(7)(13)(8)(15)(26)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&vim /etc/yum.repos.d/mongodb-org-3.2.repo
[mongodb-org-3.2]
name=Mongodb
baseurl=http://repo.mongodb.org/yum/redhat/6Server/mongodb-org/3.2/x86_64/
gpgcheck=0
&然后yum -y install mongodb-org
便捷启动脚本(更正一下,3.0 以上有自己官方的脚本,而且是有优化过的。即 不推荐使用这个。可以修改/etc/init.d/mongod 里面的配置),注意脚本里用户为mongod,说以定义数据目录的时候和日志 和配置文件的时候都需要chown -R 不然mong连日志都没权限写进去。
(以下都可以复制粘贴执行)
echo "never" & /sys/kernel/mm/transparent_hugepage/enabled&&echo "never" & /sys/kernel/mm/transparent_hugepage/defrag
cat &/etc/security/limits.d/mongodb-nproc.conf &&V
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
#!/bin/bash
instance=$1
case "$action" in
mongod -f /etc/$f
mongod -f /etc/$f --shutdown
'restart')
mongod -f /etc/$f --shutdown
mongod -f /etc/$f
#当然配置文件要放在/etc/下面咯
openssl rand -base64 741 & /data/mongo22.key --文件内容采base64编码,一共741个字符
修改文件权限:
chmod 600 /data/mongo22.key
配置文件实例
dbpath=/data/mongodata2
port=27019
logpath=/data/log/mongolog2/mongodb1.log
keyFile = /data/mongo22.key
replSet = qby
其中id 要和 replSet 中设置的一样。而 config_repl 这个名字 可以随意命名,相当于 副本集 的会议室。而members 相当于会议室里的成员。
& config_repl={_id:'gechongrepl',members:[
... {_id:0,host:'192.168.91.128:27017',priority:10},
... {_id:1,host:'192.168.91.129:27017',priority:9},
... {_id:2,host:'192.168.91.130:27017',priority:9}]}
&之后的添加和删除节点可以用以下2个步骤来实现。
#比如会议的名称还是和上面一样是config_repl
& config_repl={_id:'gechongrepl',members:[ ... {_id:0,host:'192.168.91.128:27017',priority:10}, ... {_id:1,host:'192.168.91.129:27017',priority:9},]}&rs.reconfig(config_repl)
#相当于重新加载了配置,这里你可以删除节点或者增加节点。&rs.status() #然后查看状态
&还有一种用rs.add("127.0.0.1:27020") 或者 rs.remove() 来进行。具体使用哪一种。自己区分。
============接下来 看一下主从。3.X 后面的主从有安全策略。当然要开启用户验证,不然有什么意义呢。 所以必须要开key 选项 这里为主的配置文件
dbpath=/data/mongodata
port=27017
logpath=/data/log/mongolog/mongodb1.log
master=true
keyFile = /data/mongo.key
dbpath=/data/mongodata
logpath=/data/log/mongolog/mongo1.log
port=27017
slave=true
#设置为slave
source=172.16.38.178:27017
#指定Master在哪
keyFile = /data/mongo.key
&当然也要有一个用户验证。有人会疑惑用哪个用户来进行数据验证和同步呢。Master会将操作记录在 local。oplog里面,然后从服务器定期去获取oplog内容。在slave上执行。
如果发现主从不同步,从上手动同步
db.runCommand({"resync":1})
#验证过,发现admin 里面的表会消失。 知道为什么的,可以告诉我一下。
db.runCommand({"isMaster":1})
#查询自己是不是master
在丛库上查询主库地址
switched to db local
& db.sources.find();
#查看主从复制状态
db.printReplicationInfo();
阅读(...) 评论()Mongodb副本集(三个节点:1主一从一仲裁)-配置文件方式启动 - Go当前位置:& &&&Mongodb副本集(三个节点:1主一从一仲裁)-配置文Mongodb副本集(三个节点:1主一从一仲裁)-配置文件方式启动&&网友分享于:&&浏览:0次Mongodb副本集(三个节点:一主一从一仲裁)-配置文件方式启动
关键字:Mongodb副本集(三个节点:一主一从一仲裁)-配置文件方式启动1.建立数据文件夹一般情况下不会把数据目录建立在mongodb的解压目录下,不过这里方便起见,就建在mongodb解压目录下吧。[plain] view plaincopy&&& mkdir -p /mongodb/data/master&& &&& mkdir -p /mongodb/data/slaver&& &&& mkdir -p /mongodb/data/arbiter&&& &&& #三个目录分别对应主,备,仲裁节点& 2.建立配置文件由于配置比较多,所以我们将配置写到文件里。[plain] view plaincopy&&& #master.conf& &&& dbpath=/mongodb/data/master& &&& logpath=/mongodb/log/master.log& &&& pidfilepath=/mongodb/master.pid& &&& directoryperdb=true& &&& logappend=true& &&& replSet=testrs& &&& bind_ip=10.10.148.130& &&& port=27017& &&& oplogSize=10000& &&& fork=true& &&& noprealloc=true& [plain] view plaincopy&&& #slaver.conf& &&& dbpath=/mongodb/data/slaver& &&& logpath=/mongodb/log/slaver.log& &&& pidfilepath=/mongodb/slaver.pid& &&& directoryperdb=true& &&& logappend=true& &&& replSet=testrs& &&& bind_ip=10.10.148.131& &&& port=27017& &&& oplogSize=10000& &&& fork=true& &&& noprealloc=true& [plain] view plaincopy&&& #arbiter.conf& &&& dbpath=/mongodb/data/arbiter& &&& logpath=/mongodb/log/arbiter.log& &&& pidfilepath=/mongodb/arbiter.pid& &&& directoryperdb=true& &&& logappend=true& &&& replSet=testrs& &&& bind_ip=10.10.148.132& &&& port=27017& &&& oplogSize=10000& &&& fork=true& &&& noprealloc=true& 参数解释:dbpath:数据存放目录logpath:日志存放路径pidfilepath:进程文件,方便停止mongodbdirectoryperdb:为每一个数据库按照数据库名建立文件夹存放logappend:以追加的方式记录日志replSet:replica set的名字bind_ip:mongodb所绑定的ip地址port:mongodb进程所使用的端口号,默认为27017oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%fork:以后台方式运行进程noprealloc:不预先分配存储3.启动mongodb进入每个mongodb节点的bin目录下[java] view plaincopy&&& ./monood -f master.conf& &&& ./mongod -f slaver.conf& &&& ./mongod -f arbiter.conf& 注意配置文件的路径一定要保证正确,可以是相对路径也可以是绝对路径。4.配置主,备,仲裁节点可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。[plain] view plaincopy&&& ./mongo 10.10.148.130:27017&& #ip和port是某个节点的地址& &&& &use admin& &&& &cfg={ _id:"testrs", members:[ {_id:0,host:'10.10.148.130:27017',priority:2}, {_id:1,host:'10.10.148.131:27017',priority:1},&& &&& {_id:2,host:'10.10.148.132:27017',arbiterOnly:true}] };& &&& &rs.initiate(cfg)&&&&&&&&&&&& #使配置生效& &&&&&& cfg是可以任意的名字,当然最好不要是mongodb的关键字,conf,config都可以。最外层的_id表示replica set的名字,members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的10.10.148.130:27017。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。&&&&& 配置的生效时间根据不同的机器配置会有长有短,配置不错的话基本上十几秒内就能生效,有的配置需要一两分钟。如果生效了,执行rs.status()命令会看到如下信息:[plain] view plaincopy&&& {& &&&&&&&&&&& "set" : "testrs",& &&&&&&&&&&& "date" : ISODate("T02:44:43Z"),& &&&&&&&&&&& "myState" : 1,& &&&&&&&&&&& "members" : [& &&&&&&&&&&&&&&&&&&& {& &&&&&&&&&&&&&&&&&&&&&&&&&&& "_id" : 0,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "name" : "10.10.148.130:27017",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "health" : 1,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "state" : 1,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "stateStr" : "PRIMARY",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "uptime" : 200,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "optime" : Timestamp(0, 1),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "optimeDate" : ISODate("T07:46:05Z"),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "self" : true& &&&&&&&&&&&&&&&&&&& },& &&&&&&&&&&&&&&&&&&& {& &&&&&&&&&&&&&&&&&&&&&&&&&&& "_id" : 1,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "name" : "10.10.148.131:27017",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "health" : 1,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "state" : 2,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "stateStr" : "SECONDARY",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "uptime" : 200,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "optime" : Timestamp(0, 1),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "optimeDate" : ISODate("T07:46:05Z"),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "lastHeartbeat" : ISODate("T02:44:42Z"),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "pingMs" : 0& &&&&&&&&&&&&&&&&&&& },& &&&&&&&&&&&&&&&&&&& {& &&&&&&&&&&&&&&&&&&&&&&&&&&& "_id" : 2,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "name" : "10.10.148.132:27017",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "health" : 1,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "state" : 7,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "stateStr" : "ARBITER",& &&&&&&&&&&&&&&&&&&&&&&&&&&& "uptime" : 200,& &&&&&&&&&&&&&&&&&&&&&&&&&&& "lastHeartbeat" : ISODate("T02:44:42Z"),& &&&&&&&&&&&&&&&&&&&&&&&&&&& "pingMs" : 0& &&&&&&&&&&&&&&&&&&& }& &&&&&&&&&&& ],& &&&&&&&&&&& "ok" : 1& &&& }& 如果配置正在生效,其中会包含如下信息:[plain] view plaincopy&&& "stateStr" : "RECOVERING"& 同时可以查看对应节点的日志,发现正在等待别的节点生效或者正在分配数据文件。&&&&&& 现在基本上已经完成了集群的所有搭建工作。至于测试工作,可以留给大家自己试试。一个是往主节点插入数据,能从备节点查到之前插入的数据(查询备节点可能会遇到某个问题,可以自己去网上查查看)。二是停掉主节点,备节点能变成主节点提供服务。三是恢复主节点,备节点也能恢复其备的角色,而不是继续充当主的角色。二和三都可以通过rs.status()命令实时查看集群的变化。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有}

我要回帖

更多关于 mongodb 添加副本集 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信