怎么样使用mongodb仲裁节点作用添加arbiter节点

Replica Sets
MongoDB 支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只 有一台是用于写操作。正是由于这个情况,为 MongoDB 提供了数据一致性的保障。担当&Primary 角色的机器能把读操作分发给 slave。
Replica Sets的结构非常类似一个集群。因 为它确实跟集群实现的作用是一样的, 其中一个节点如果出现故障, 其它节点马上会将业务接过来而无须停机操作。
下面以本机为例介绍一下集群的部署过程,以及部署过程中常见的注意点及错误
本例环境是Linux操作系统,mongodb版本:mongodb-linux-x86_64-2.6.1.tgz,Vmwre虚拟机,虚拟机IP:192.168.169.129,集群以本机不同端口模拟三台服务器。
1.集群主要分为三个节点master主节点,slaver备用节点,arbiter仲裁节点
建立数据文件夹
mkdir -p /mongodb/data/master
mkdir -p /mongodb/data/slaver
mkdir -p /mongodb/data/arbiter
ps:三个目录分别对应主,备,仲裁节点
2.建立配置文件夹
1)master.conf
& & 打开编辑器:
vi /etc/master.conf
按i 输入下列配置
dbpath=/home/mongodb/data/master
logpath=/home/mongodb/log/master.log
logappend=true
replSet=rep1
port=10000
journal=true
完成之后按esc &》》 : &&&wq&&回车
2)slaver.conf
编辑器打开和保存按上边的步骤,下边只写详细内容
dbpath=/home/mongodb/data/slaver
logpath=/home/mongodb/log/slaver.log
logappend=true
replSet=rep1
port=10001
journal=true
3)arbiter.conf
dbpath=/home/mongodb/data/arbiter
logpath=/home/mongodb/log/arbiter.log
logappend=true
replSet=rep1
port=10002
journal=true
smallfiles=true
参数解释:
dbpath:数据存放目录
logpath:日志存放路径
logappend:以追加的方式记录日志
replSet:replica set的名字
port:mongodb进程所使用的端口号,默认为27017
fork:以后台方式运行进程
journal:写日志
smallfiles:当提示空间不够时添加此参数
pidfilepath:进程文件,方便停止mongodb
directoryperdb:为每一个数据库按照数据库名建立文件夹存放
bind_ip:mongodb所绑定的ip地址
oplogSize:mongodb操作日志文件的最大大小。单位为Mb,默认为硬盘剩余空间的5%
noprealloc:不预先分配存储
3.启动Mongodb&&&
cd /home/mongodb/bin
./mongod -f /etc/master.conf
./mongod -f /etc/slaver.conf
./mongod -f /etc/arbiter.conf
&有这样的提示说明启动成功
如果是下列的提示说明启动失败
启动失败的原因有很多,检查完配置文件,如果没有错误,可打开相应的配置文件查看详细的错误信息
cat /etc/master.conf
最常见的一个错误就是磁盘空间不足,会提示这样的错误
因为Mongodb的日志文件是成2g的增长,所以所需空间比较大,这时你可以在配置文件里添加这样的一个配置
smallfiles=true。
全部三个服务全部启动成功之后
4.配置主(master),备(slaver),仲裁(arbiter)节点
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。
./mongo 192.168.169.129:10000 & #ip和port是某个节点的地址
&use admin
&cfg={ _id:"rep1", members:[ {_id:0,host:'192.168.169.129:10000',priority:2}, {_id:1,host:'192.168.169.129:10001',priority:1},
{_id:2,host:'192.168.169.129:10002',arbiterOnly:true}] };
&rs.initiate(cfg) #使配置生效
& & & & "set" : "rep1",
& & & & "date" : ISODate("T02:44:43Z"),
& & & & "myState" : 1,
& & & & "members" : [
& & & & & & & & {
& & & & & & & & & & & & "_id" : 0,
& & & & & & & & & & & & "name" : "192.168.169.129:10000",
& & & & & & & & & & & & "health" : 1,
& & & & & & & & & & & & "state" : 1,
& & & & & & & & & & & & "stateStr" : "PRIMARY",
& & & & & & & & & & & & "uptime" : 200,
& & & & & & & & & & & & "optime" : Timestamp(0, 1),
& & & & & & & & & & & & "optimeDate" : ISODate("T07:46:05Z"),
& & & & & & & & & & & & "self" : true
& & & & & & & & },
& & & & & & & & {
& & & & & & & & & & & & "_id" : 1,
& & & & & & & & & & & & "name" : "192.168.169.129:10001",
& & & & & & & & & & & & "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" : "192.168.169.129:10002",
& & & & & & & & & & & & "health" : 1,
& & & & & & & & & & & & "state" : 7,
& & & & & & & & & & & & "stateStr" : "ARBITER",
& & & & & & & & & & & & "uptime" : 200,
& & & & & & & & & & & & "lastHeartbeat" : ISODate("T02:44:42Z"),
& & & & & & & & & & & & "pingMs" : 0
& & & & & & & & }
& & & & ],
& & & & "ok" : 1
配置过程中可能还会出现其他的一些错误,不过都可以去查看相应的日志文件,去解决。
阅读(...) 评论()Mongodb增加、移除Arbiter节点实例
增加Arbiter
增加配置文件mongod1,mongod2,mongod3分别为shard1,shard2,shard3三个set集合的arbiter。
replSet=shard1
replSet=shard2
replSet=shard3
启动mongod实例。
连接Primary.
rs.addArb(“192.168.1.50:10001″)
rs.addArb(“192.168.1.50:10002″)
rs.addArb(“192.168.1.50:10003″)
移除Arbiter
rs.remove(“192.168.1.50:10001″)
注意:最好移除结点时候先停掉服务,防止有特殊未知状态出现。
Note:Before running the rs.remove() operation, you must shut down the replica set member that you’re removing.
Changed in version 2.2: This procedure is no longer required when using rs.remove(), but it remains good practice.
相关文章:
暂时还没有评论.随机文章分类目录
2017年十月 &(1)
2017年九月 &(2)
2017年八月 &(4)
2017年七月 &(2)
2017年六月 &(3)
2017年五月 &(4)
2017年四月 &(2)
2017年三月 &(8)
2017年二月 &(7)
2017年一月 &(6)
2016年十二月 &(10)
2016年十一月 &(13)
2016年十月 &(20)
2016年九月 &(4)
2016年八月 &(9)
2016年七月 &(2)
2016年六月 &(6)
2016年五月 &(11)
2016年三月 &(6)
2016年二月 &(3)
2015年十二月 &(2)
2015年十一月 &(4)
2015年十月 &(2)
2015年九月 &(6)
2015年七月 &(8)
2015年一月 &(5)
2014年十二月 &(3)
2014年九月 &(7)
2014年七月 &(4)
2014年六月 &(11)
2014年四月 &(2)
2014年三月 &(2)
2014年二月 &(5)
2014年一月 &(1)
2013年十二月 &(1)
2013年十一月 &(6)
2013年十月 &(1)
2013年八月 &(1)
2013年七月 &(10)
2013年六月 &(10)
2013年三月 &(1)
2012年十二月 &(1)
2012年十一月 &(2)
2012年十月 &(1)
2012年九月 &(1)
2012年七月 &(4)
2012年六月 &(5)
2012年五月 &(4)
2012年四月 &(3)
2012年三月 &(1)
2012年二月 &(4)
2012年一月 &(1)
2011年十二月 &(4)
2011年十一月 &(2)
2011年十月 &(3)
2011年九月 &(3)
2011年八月 &(2)
2011年七月 &(4)
2011年六月 &(2)
2011年五月 &(3)
2011年四月 &(3)
2011年三月 &(3)
2011年二月 &(1)
2011年一月 &(3)
2010年十二月 &(1)
2010年十一月 &(3)
2010年十月 &(4)
2010年九月 &(4)
2010年八月 &(3)
2010年七月 &(6)
2010年六月 &(1)
2010年五月 &(4)
2010年四月 &(2)
2010年三月 &(3)
2010年二月 &(1)
2010年一月 &(6)
2009年十二月 &(4)
2009年十一月 &(3)
2009年十月 &(2)
2009年九月 &(2)
2009年八月 &(2)
2009年七月 &(5)
2009年六月 &(8)
2009年五月 &(1)
2009年四月 &(5)
2009年三月 &(5)
2009年二月 &(6)
2009年一月 &(7)
2008年十二月 &(6)
2008年十一月 &(6)
2008年十月 &(3)
2008年九月 &(8)
2008年八月 &(4)
2008年七月 &(9)
2008年六月 &(9)
2008年五月 &(8)
2008年四月 &(7)
2008年三月 &(9)
2008年二月 &(3)
2008年一月 &(13)
2007年十二月 &(9)
2007年十一月 &(8)
2007年十月 &(5)
2007年九月 &(10)
2007年八月 &(12)
2007年七月 &(78)
About MeDatabase Archit@DJI
- Blogger -
- Geeker -
- ACOUG member -
Troubleshooting & Tuning
Architecture & HA SolutionMongoDB数据库插入、更新和删除操作详解
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了MongoDB数据库插入、更新和删除操作详解,需要的朋友可以参考下
一、Insert操作
Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键。文档结构采用类似JSON的BSON格式。常见的插入操作主要有单条插入和批量插入两种形式。插入时只是简单地将文档存入数据库中,不进行额外的验证,也不会执行代码,所以不存在注入式攻击的可能。
1、单条插入
2、批量插入
MongoDB对批量插入的支持是通过传递多个文档组成的数组到数据库来实现的。由于它插入数据是通过发送TCP请求的,这样只需发送单个TCP请求,且数据库无需处理大量的消息头,减少插入时间。这种方式的批量插入一次只能将多个文档插入到一个集合中,对于插入到多个集合可以循环调用Insert操作。
二、Remove操作
remove函数可以用来删除数据,它能接受一个文档作为可选参数,只有符合条件的文档才会被删除。删除数据是永久性的,不能撤销,也不能恢复,需要谨慎。删除文档需要清空整个集合,不如直接删除集合快。
三、Update操作
update函数用于修改数据库中的数据,它接收两个参数,一个是查询文档,用来查找要更新的文档,另一个是修改器文档,用来描述对找到的文档做哪些修改。更新操作是原子性的,如果多个更新同时发生,则所有的更新都会执行,但最后的更新是最终赢家。
1、整体更新(文档替换)
2、局部更新(修改器)
&部分更新是通过原子的更新修改器实现的,使用修改器时除了”_id“的值不能改变,其他任何值都能改变。文档替换是可以改变所有值的。
&$inc修改器:将指定属性的值增加特定的步长,如果键不存在则创建它。
$set修改器:用来指定一个键的值,如果不存在则创建它。
$push:数组修改器,如果指定的键存在,则向已有的数组末尾加入一个元素,键不存在则会创建一个新的数组。
3、upsert操作
upsert操作具有saveOrUpdate的功能,如果没有文档符合更新条件,则以更新条件和更新文档为基础创建一个新的文档。如果有符合更新条件的文档,则正常更新。创建新文档时会以条件文档作为基础,将修改器作用其之上。upsert操作是原子性的,高效的。
4、批量更新
批量更新只需将update的第4个参数设为true即可。
四、瞬间完成
上面的插入,删除和更新操作都是瞬间完成的,它们不需要等待数据库响应。这样的实现可以获取高性能,速度非常快,只会受客户端发送速度和网络速度的制约。但由于不会获取服务器状态,所以不能保证操作顺利完成。这对于付费系统,安全性较高的系统是不可行的,此时对这些操作需要使用它们的安全版本。安全版本会在操作执行后立即运行getLastError命令,来检查是否执行成功。如果失败一般会抛出可捕获的异常,然后我们可以在代码中处理。
五、请求和连接
数据库会为每个MongoDB数据库连接创建一个队列,存放这个连接的请求,客户端新发送的请求会被放到队列的末尾。只有队列中的请求都执行完毕,后续的请求才会执行。即对于单个连接来说,请求都是顺序执行不存在并发问题,所以它总能读到自己写的东西。但对于不同的连接就有可能出现读取和写入不一致的问题,在驱动程序使用连接池时要特别注意此行为。具体连接池信息可参考官网:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具何小伟-向Mongodb集群添加新的成员节点_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
何小伟-向Mongodb集群添加新的成员节点
web应用开发工程师|
总评分3.7|
浏览量35562
用知识赚钱
&&何小伟-向Mongodb集群添加新的成员节点
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 mongodb arbiter作用 的文章

 

随机推荐