您的位置:首页 > 数据库 > Mongodb

MongoDB副本集(Linux)

2016-01-27 13:59 525 查看


环境:
192.168.1.1(primary)
192.168.1.2(secondary)
192.168.1.3(secondary)

开启防火
iptables -I  INPUT -p tcp  --dport 27018 -j ACCEPT

一、分别在三台服务器上 编辑配置文件
#配置文件mongodb.conf存放路径为 /opt/confg/mongo/mongodb.conf

dbpath=/opt/mongodb/data/
logpath=/var/log/mongodb/mongodb.log
pidfilepath=/opt/mongodb/data/mongodb.pid
logappend=true
fork=true
port=27017
quiet=true
directoryperdb=true
replSet=replSet01 
oplogSize=10240 #(MB单位)
maxConns=20000

二、分别启动三台服务器上的mongod服务
mongod -f /opt/confg/mongo/mongodb.conf

runuser -c "/opt/mongodb/bin/mongod -f /opt/confg/mongo/mongodb.conf " mongod

三、初始化副本集配置
登录任意一台服务器的mongo服务: mongo --port 27017
use admin
mongo>conf={_id :"replSet01",
                         "members":[{_id:1,"host":"192.168.1.1:27017",priority:3},                                                                                                                                                          
                                                                                    {_id :2,"host":"192.168.1.2:27017",priority:2},{_id :3,"host":"192.168.1.3:27017",priority:1}]}
mongo>rs.initiate(conf);
或者
db.adminCommand({"replSetInitiate":{_id:"replSet01",members:[{_id:1,host:"192.168.1.1:27017"},{_id:2,host:"192.168.1.2:27017"},{_id:3,host:"192.168.1.3:27017"}]}})

///////////////////////cnf_rplset的语法(将3台服务器串起来的语法选项)/////////////////////////////

{

  _id : <setname>,

  members: [

    {

      _id : <ordinal>,

      host : <hostname[:port]>

      [, arbiterOnly : true]

      [, buildIndexes : <bool>]

      [, hidden : true]

      [, priority: <priority>]

      [, tags: {loc1 : desc1, loc2 : desc2, ..., locN : descN}]

      [, slaveDelay : <n>]

      [, votes : <n>]

    }

    , ...

  ],

  [settings: {

    [getLastErrorDefaults: <lasterrdefaults>]

    [, getLastErrorModes : <modes>]

  }]

}

详细说明:(默认值在括号中)

_id:副本集的名字,必须和命令行的名字匹配,也就是您刚才启动mongodb数据库命令行的那个名字,数字字母,不能包含"/";

members:一个数组用来表示副本集中的每个成员,这个数组必须包含_id和host这2个key。

members 数组:

_id:在副本集中的每一个成员都必须有一个_id表示,这个_id是通常是数字,从0开始增长。需要注意的是当其中一个成员退休了(指从副本集config中移除了),新加入的成员不能重新使用这个退休成员的_id;

host:ip地址和端口号;

arbiterOnly(false):如果是true,则表示这个成员为仲裁节点,不接收数据;

buildIndexes(true):如果设置为false,则会阻止在这个节点上创建第二索引,通常这个节点是作为纯粹的数据备份,从不用来被查询。不过也因为此节点没有第二索引,所以他写入的东西很少,也就需要很少的内存和磁盘。_id的索引还是会被创建的。只有当priority属性设置为0时,此项才能设置为false,一般不会用到这个选项;

hidden(false):如果此项为true,不要告诉客户端的此节点的存在,设置隐藏节点的原因是此节点的数据的使用模式和其他节点大为不同,比如:报表,统计,备份等。设置为ture时,允许你针对这个节点发送非主要查询。

priority(1.0):权重,更高的权重会被选举为主节点.取值范围0-100,数字越大优先级越高,0代表永不能成为主节点。只有优先级为0(即被动成员)才可以设置为隐藏成员(hidden=0)

tags({}):一个文档代表这台服务器的位置,有利于位置感知的读写。其实就是表示此节点位于哪个数据中心的,mongodb会根据tags找近的数据中心节点同步数据。

slaveDelay(0):同步数据的延迟,设置为0表示立即更新同步数据。

votes(1):此节点可以发出的投票数,一般不用修改他

settings 对象:settings对象可以在集群建立起来以后用再进行设置,通常使用默认值

设置成员优先级

var config=rs.config()

config.members[1].priority=0

rs.reconfig(config);

设置成员为隐藏节点

var config=rs.config()

config.members[1].priority=0

config.members[1].hidden=0

rs.reconfig(config)

隐藏成员在isMaster()是看不到的。但是在rs.status() 和rs.config()是可见的。因为客户端连接到副本集时,首先会调用 isMaster()来查看可用成员。隐藏成员是不会接受客户端的读请求的。

如果想让节点变为 延迟备份节点 (slaveDelay 属性)那么该节点的优先级也必须是 0 和隐藏成员,目的是避免路由服务奖客户的读请求路由到该备份节点。

//////////////////////////cnf_rplset的语法(将3台服务器串起来的语法选项)/////////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb