mono集群我的库
来源:互联网 发布:mac英文翻译软件 编辑:程序博客网 时间:2024/05/17 07:59
一主一从
主从实现的原理:
首先主节点会把写操作记录下来,这些操作及记录在local数据库中的oplog.$admin集合中
从节点定时会去连接主节点,请求主节点的操作日志,从而对自己的数据副表进行同样的操作来达到数据同步。
主ip:192.168.26.134:27017
从ip:192.168.26.136:27017
配置文件:0
Master
#vim /mongodb/mongodb.cnf
dbpath=/mongodb/data/db
logpath=/mongodb/data/log/mongodb.log
logappend=true
port=27017
journal=true ////这是啥?
#pidfile=/mongodb/data/run/mongodb.pid /////这行导致服务启动不了。
fork=true ////启动
master=true
oplogSize==2048 ===////配置写记录的固定集合,一般为剩余磁盘的5%,放满时会覆盖旧数据,从节点可能来不及更新产生数据不同步的情况。
#mongod -f /mongodb/mongodb.cnf & ////启动配置文件后看一下进程有木有
slave
#vim /mongodb/monogdb.cnf
dbpath=/mongodb/data/db
logpath=/mongodb/data/log/mongodb.log
logappend=true
port=27017
journal=true
fork=true
slave=true
source=192.168.26.134:27017
# mongod -f /mongodb/mongodb.cnf /////启动配置文件
master:
# mongo
> db.printReplicationInfo()===///出现下面说明成功
configured oplog size: 2048MB
log length start to end: 24secs (0.01hrs)
oplog first event time: Mon Nov 27 2017 22:37:41 GMT-0500 (EST)
oplog last event time: Mon Nov 27 2017 22:38:05 GMT-0500 (EST)
now: Mon Nov 27 2017 22:38:09 GMT-0500 (EST)
>db.testdb.insert({"name":"test"})
> show dbs
admin 0.000GB
local 0.000GB
test 0.000GB
> exit
slave
#mongo
> rs.slaveOk() //////没有这个会报错:"errmsg": "not master and slaveOk=false",
> db.testdb.find()
{ "_id" :ObjectId("59cb574c7b724f89e3a1e013"), "name" :"test" }
> exit ///退出后rs.slaveOk失效-à因为secondary默认是不允许读写的
////??????能避免单点故障吗?
不能,只能备份
集群复制
两个节点的集群,避免单点故障
一个节点挂掉后,另一个节点取而代之
俩个服务ip:192.168.26.136
:192.168.26.134
配置文件
#cat /mongodb/mongodb.cnf
dbpath=/mongodb/data/db
logpath=/mongodb/data/log/mongodb.log
logappend=true
port=27017
httpinterface=true
fork=true
rest=true
pidfilepath=/mongodb/data/run/mongo.pid ====///进程文件,方便停止mongodb
replSet=mydbCenter ///////关键 ===///replica set的名字
oplogSize=512 ====////
一添加下面的这两行就启动不了
directoryperdb=true ====///为每一个数据库以数据库名创建文件夹进行存放
noperalloc=true ====///不预先分配存储。
#cat /mongodb/mongodb.cnf
dbpath=/mongodb/data/db
logpath=/mongodb/data/log/mongodb.log
logappend=true
port=27017
httpinterface=true
pidfilepath=/mongodb/data/run/mongodb.pid
fork=true
rest=true
replSet=mydbCenter ////关键
oplogSize=512
#echo never > /………………
分别启动两个配置文件
#mongod -f /mongodb/mongodb.cnf &
成功后,进入任意一个mongo数据库
>rs.status() /////查看状态
配置成员
> cfg={_id:'mydbCenter',members:[
... {_id:0,host:'192.168.26.136:27017'},
... {_id:1,host:'192.168.26.134:27017'}]
... }
////cfg={_id:'mydbCenter',members:[{_id:0,host:'172.17.0.2:27017'},{_id:1,host:'172.17.0.3:27017'}]}
>rs.initiate(cfg)
报错:
"errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.221.135:27017 failed with No route to host"
解决:把防火墙关了,却出现“rs.initiate(cfg), has data already, cannot initiate set”报错
把报错的另一台主机的数据库清空。
>rs.status() ////可以看到节点信息
//////这是此节点会变成:
mydbCenter:PRIMARY>
另一个会变成:
mydbCenter:SECONDARY> ////默认没有读写权,有点像主从,但是停primary的服务,secondly不变,只有重启primary服务后,secondly会变成primary,原来的primary变成secondly
加仲裁节点可以解决单点故障
仲裁者:192.168.26.140:27017
配置和上文相同
启动
在primary里:
>rs.addArb(“192.168.26.140:27017”)
>rs.status();
"stateStr": "(not reachable/healthy)" /////出这样的错
解决:查看primary日志
# tail -n20 /mongodb/data/log/mongodb.log
Failedto connect to 192.168.26.140:27017 - HostUnreachable: No route to host
或者:Failed to connect to192.168.26.140:27017 - HostUnreachable: Connection refused
原因:仲裁者的防火墙没有关
查看仲裁者status
>rs.status()
出现 "stateStr": "ARBITER" ///////OK
解释:
mydbCenter:PRIMARY> rs.status()
{
"set": "mydbCenter",
"date": ISODate("2017-09-28T06:47:24.526Z"),
"myState": 1,
"term": NumberLong(8),
"heartbeatIntervalMillis": NumberLong(2000),
"optimes": {
"lastCommittedOpTime": {
"ts": Timestamp(1506581235, 1),
"t": NumberLong(8)
},
"appliedOpTime": {
"ts": Timestamp(1506581235, 1),
"t": NumberLong(8)
},
"durableOpTime": {
"ts": Timestamp(1506581235, 1),
"t": NumberLong(8)
}
},
"members": [
{
"_id": 0,
"name": "192.168.26.136:27017",
"health": 1,
"state": 2,
"stateStr": "SECONDARY",
"uptime": 2949,
"optime": {
"ts" :Timestamp(1506581235, 1),
"t": NumberLong(8)
},
"optimeDurable": {
"ts": Timestamp(1506581235, 1),
"t": NumberLong(8)
},
"optimeDate": ISODate("2017-09-28T06:47:15Z"),
"optimeDurableDate": ISODate("2017-09-28T06:47:15Z"),
"lastHeartbeat": ISODate("2017-09-28T06:47:23.621Z"),
"lastHeartbeatRecv": ISODate("2017-09-28T06:47:23.651Z"),
"pingMs": NumberLong(1),
"syncingTo": "192.168.26.134:27017",
"configVersion": 16
},
{
"_id": 1,
"name": "192.168.26.134:27017",
"health": 1,
"state": 1,
"stateStr": "PRIMARY",
"uptime": 10631,
"optime": {
"ts": Timestamp(1506581235, 1),
"t": NumberLong(8)
},
"optimeDate": ISODate("2017-09-28T06:47:15Z"),
"electionTime": Timestamp(1506576930, 1),
"electionDate": ISODate("2017-09-28T05:35:30Z"),
"configVersion": 16,
"self": true
},
{
"_id": 2,
"name": "192.168.26.140:27017",
"health": 1,
"state": 7,
"stateStr": "ARBITER",
"uptime": 60,
"lastHeartbeat": ISODate("2017-09-28T06:47:23.652Z"),
"lastHeartbeatRecv": ISODate("2017-09-28T06:47:22.944Z"),
"pingMs": NumberLong(1),
"syncingTo": "192.168.26.134:27017",
"configVersion": 16
}
],
"ok": 1
}
mydbCenter:PRIMARY>
检测:杀死primary的mongo进程
过了好一会儿secondly自动变成新的primary
重新启动 原来primary变成secondly
- mono集群我的库
- 让我心寒的MONO
- docker-mongo集群我的库
- 我的nas集群
- 我的第一个Android应用-Mono For Android
- 我的第一个 Mono for Android 应用
- 我的第一个 Mono for Android 应用(张志敏)
- 谁偷了我的热更新?Mono,JIT,IOS
- 谁偷了我的热更新?Mono,JIT,iOS
- Mono v1.2.51 - 开源版本的.NET框架,Mono,Mono下载,Mono框架开发,Mono学习,Mono是什么,Mono浅谈,Mono研究
- 论Mono的意义
- 神奇的猴子Mono
- MONO最近的情况
- Ubuntu下的MONO
- Unity3D的Mono是什么
- MONO的体系结构图
- Unity3D的Mono是什么
- Mono 常用库 Libraries
- 第一次写博客
- QCombox和QDateTimeEdit组合实现今日、本月、本季、本年、自定义时间的切换
- 关于verilog中if与case语句不完整产生锁存器的问题
- MacOS中Maven环境配置
- Javascript:history.go()和history.back()的用法和区别
- mono集群我的库
- 转载 解密蓝牙mesh系列 | 第十篇【认证】【确认值检查(Confirmation Value Check)】【启动配置数据分发】
- 令人拍案叫绝的Wasserstein GAN
- MacOS中Gradle环境配置
- 机器学习系列-主成分分析
- 资源 | 史上最全机器学习笔记
- GPU对决TPU,英伟达能否守住领先地位?
- OC与JS交互之JavaScriptCore
- axios基本用法