mongodb 副本集
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,系统:centos6.5IP:10.19.21.244 主节点10.19.21.245 备节点10.19.21.248 仲裁点不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hid
千家信息网最后更新 2025年01月20日mongodb 副本集
系统:centos6.5
IP:10.19.21.244 主节点
10.19.21.245 备节点
10.19.21.248 仲裁点
不只是主节点、副本节点、仲裁节点,还有Secondary-Only、Hidden、Delayed、Non-Voting。
Secondary-Only:不能成为primary节点,只能作为secondary副本节点,防止一些性能不高的节点成为主节点。
Hidden:这类节点是不能够被客户端制定IP引用,也不能被设置为主节点,但是可以投票,一般用于备份数据。
Delayed:可以指定一个时间延迟从primary节点同步数据。主要用于备份数据,如果实时同步,误删除数据马上同步到从节点,恢复又恢复不了。
Non-Voting:没有选举权的secondary节点,纯粹的备份数据节点。
三台主机安装mongodb
下载mongodbwget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.9.tgz解压到目录tar xf mongodb-linux-x86_64-2.6.9.tgz -C /usr/local/src更改名mv mongodb-linux-x86_64-2.6.9 /usr/local/mongodbcd /usr/local/mongodb/创建数据目录和日志目录mkdir -p data log创建用户useradd mongodb -s /sbin/nologin更改目录属主属组chown mongod:mongodb /usr/local/mongodb -R更改环境变量vim ~/.bash_profilePATH=$PATH:/usr/local/mongodb/binsource ~/.bash_profile
配置文件vim /etc/mongodb.confport = 27017fork = truelogpath = /usr/local/mongodb/log/mongodb.logdbpath =/usr/local/mongodb/data/journal = true#以目录的形式存数据,如果已经存在,修改此配置会导致原始数据消失(注释次参数会回来),除非迁移现有数据文件到directoryperdb所产生的数据目录中。directoryperdb=true#日志增加形式写入logappend=true#配置副本集,指定副本名称作为参数,所有主机都必须有相同名称作为同一个副本集replSet=testrs#使用预分配方式来保证写入性能的稳定,预分配在后台进行,并且每个预分配的文件都用0进行填充。这会让MongoDB始终保持额外的空间和空余的数据文件,从而避免了数据增长过快而带来的分配磁盘空间引起的阻塞。设置noprealloc= true来禁用预分配的数据文件,会缩短启动时间,但在正常操作过程中,可能会导致性能显著下降。noprealloc=true
启动服务mongod -f /etc/mongodb.conf
首先连接主节点mongo> use admin> conf = {_id:"testrs",members:[{_id:0,host:"10.19.21.244:27017",priority:2},{_id:1,host:"10.19.21.245:27017",priority:1},{_id:2,host:"10.19.21.248:27017",arbiterOnly:true}]};{ "_id" : "testrs", "version" : 1, "members" : [ { "_id" : 0, "host" : "10.19.21.244:27017", "priority" : 2 }, { "_id" : 1, "host" : "10.19.21.245:27017" }, { "_id" : 2, "host" : "10.19.21.248:27017", "arbiterOnly" : true } ]}注意最初的_id的值就是我们配置文件中设定的replSet的值,arbiterOnly是大写的O,配置完成后进行初始化:> rs.initiate(conf){ "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1}此步骤必须备节点和仲裁节点的mongo启动,不然无法执行此步骤。
> rs.status(){ "set" : "testrs", "date" : ISODate("2015-05-07T11:55:17Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "10.19.21.244:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 5737, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "electionTime" : Timestamp(1430993992, 1), "electionDate" : ISODate("2015-05-07T10:19:52Z"), "self" : true }, { "_id" : 1, "name" : "10.19.21.245:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 3077, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "lastHeartbeat" : ISODate("2015-05-07T11:55:17Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T11:55:17Z"), "pingMs" : 0, "syncingTo" : "10.19.21.244:27017" }, { "_id" : 2, "name" : "10.19.21.248:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 5735, "lastHeartbeat" : ISODate("2015-05-07T11:55:17Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T11:55:17Z"), "pingMs" : 0 } ], "ok" : 1}
> use test插入数据> db.testdb.insert({"tset1":"i'm master"})
然后到备份节点查看数据是否有mongo 10.19.21.245testrs:SECONDARY> use testswitched to db testtestrs:SECONDARY> show tables;2015-05-07T19:57:29.670+0800 error: { "$err" : "not master and slaveOk=false", "code" : 13435 } at src/mongo/shell/query.js:131需要进行配置testrs:SECONDARY> db.setSlaveOk()testrs:SECONDARY> show tables;system.indexestestdbtestrs:SECONDARY> db.testdb.find(){ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }
停止主节点,查看整个集群状态testrs:PRIMARY> rs.status(){ "set" : "testrs", "date" : ISODate("2015-05-07T11:59:42Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "10.19.21.244:27017", "health" : 0, "state" : 8, "stateStr" : "(not reachable/healthy)", "uptime" : 0, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "lastHeartbeat" : ISODate("2015-05-07T11:59:40Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T11:59:32Z"), "pingMs" : 0 }, { "_id" : 1, "name" : "10.19.21.245:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 3342, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "electionTime" : Timestamp(1430999976, 1), "electionDate" : ISODate("2015-05-07T11:59:36Z"), "self" : true }, { "_id" : 2, "name" : "10.19.21.248:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 3340, "lastHeartbeat" : ISODate("2015-05-07T11:59:42Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T11:59:41Z"), "pingMs" : 0 } ], "ok" : 1}
主节点已切换过来,此时备节点已经变成了主节点。再插入一条数据testrs:PRIMARY> db.testdb.insert({"test2":"i'm new master"})testrs:PRIMARY> db.testdb.find();{ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }{ "_id" : ObjectId("554a505d494f70c600422b41"), "test2" : "i'm new master" }
重启原来的主节点查看状态testrs:SECONDARY> rs.status(){ "set" : "testrs", "date" : ISODate("2015-05-07T14:00:33Z"), "myState" : 1, "members" : [ { "_id" : 0, "name" : "10.19.21.244:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 15, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "electionTime" : Timestamp(1431007222, 1), "electionDate" : ISODate("2015-05-07T14:00:22Z"), "self" : true }, { "_id" : 1, "name" : "10.19.21.245:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 13, "optime" : Timestamp(1430995665, 1), "optimeDate" : ISODate("2015-05-07T10:47:45Z"), "lastHeartbeat" : ISODate("2015-05-07T14:00:32Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T14:00:33Z"), "pingMs" : 0, "lastHeartbeatMessage" : "syncing to: 10.19.21.244:27017", "syncingTo" : "10.19.21.244:27017" }, { "_id" : 2, "name" : "10.19.21.248:27017", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 13, "lastHeartbeat" : ISODate("2015-05-07T14:00:32Z"), "lastHeartbeatRecv" : ISODate("2015-05-07T14:00:33Z"), "pingMs" : 0 } ], "ok" : 1}
查看数据是否同步过来testrs:PRIMARY> use testswitched to db testtestrs:PRIMARY> db.testdb.find(){ "_id" : ObjectId("554a4ee4eb804a0f1b6ec347"), "test1" : "i'm master" }{ "_id" : ObjectId("554a505d494f70c600422b41"), "test2" : "i'm new master" }
向集群中增加节点cfg = rs.conf()cfg.members[3] = {_id:3,host:"10.19.21.246:27017",priority:0.5}rs.reconfig(cfg)如果备份节点无法读取数据,需要设置db.setSlaveOK()。如果备份节点可读但不可写,修改优先级cfg = rs.conf()cfg.members[0].priority = 0.5cfg.members[1].priority = 2cfg.members[2].priority = 2rs.reconfig(cfg)需要 reconfig后配置才能生效。
php与mongodb连接 'testrs', 'readPreference' => 'secondaryPreferred',);$m = new MongoClient("mongodb://10.19.21.244:27017,10.19.21.245:27017/", $options);foreach ( $m->getConnections() as $c ){ echo $c['hash'], ":\n", " - {$c['connection']['connection_type_desc']}, ", "{$c['connection']['ping_ms']} ms\n";}?>
primary:默认参数,只从主节点上进行读取操作;
primaryPreferred:大部分从主节点上读取数据,只有主节点不可用时从secondary节点读取数据。
secondary:只从secondary节点上进行读取操作,存在的问题是secondary节点的数据会比primary节点数据"旧"。
secondaryPreferred:优先从secondary节点进行读取操作,secondary节点不可用时从主节点读取数据;
nearest:不管是主节点、secondary节点,从网络延迟最低的节点上读取数据。
节点
数据
配置
备份
文件
目录
副本
分配
同步
参数
性能
仲裁
主机
名称
形式
日志
时间
步骤
状态
空间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
点播服务器登录失败毛毛虫
如何建立远程服务器的数据库
录象软件开发
网络安全法六十七条适用经验
四川服务器防火墙设置
使用境外服务器安全考量
王者语音服务器没链接
基岩版1.17生存服务器ip
分布式数据库用什么字母代替
怎么设置自家网络安全
岳西网络安全培训班
网络服务器有什么区别
软件开发华为和阿里巴巴哪个好
javasql数据库
数据通信与网络技术大学教程
数据库可以先填信息再连外键吗
安徽网络技术分类工程
软件开发 人工智能
小孩想学游戏软件开发
海康平台管理服务器参数
金山区网络技术服务零售价格
数据库导致数据安全风险
服务器驱动精灵安装
软件开发 win10家庭版
奉化游戏软件开发商
华为没有云服务器配置
网络安全普法图
网络安全宣传股
外国网络安全设备
四川什么网络技术服务经验丰富