同一台机器上安装,无分片
- 安装mongodb
#解压 tar -xzvf mongodb-linux-x86_64-4.0.8.tgz -C /usr/local/ #改名 mv mongodb-linux-x86_64-4.0.8 mongodb #复制 cp -r mongodb mongodb1 cp -r mongodb mongodb2
- 建立数据文件夹
可存放在任意位置#三个目录分别对应主,备,仲裁节点 mkdir -p /mongodb/data/{master,slave,arbiter} mkdir /mongodb/log
- 编写配置文件
master配置文件
slave配置文件cd /usr/local/mongodb/bin/ #master.conf dbpath=/mongodb/data/master #数据存放目录 logpath=/mongodb/log/master.log #日志存放路径 pidfilepath=/mongodb/master.pid #进程文件,方便停止mongodb directoryperdb=true #为每一个数据库按照数据库名建立文件夹存放 logappend=true #以追加的方式记录日志 replSet=testrs #replica set的名字,可任意配置 bind_ip=192.168.145.138 #mongodb所绑定的ip地址 port=27017 #mongodb进程所使用的端口号 oplogSize=10000 #mongodb操作日志文件的最大大小。单位为Mb fork=true #以后台方式运行进程 noprealloc=true #不预先分配存储
arbiter配置文件cd /usr/local/mongodb1/bin/ #slave.conf dbpath=/mongodb/data/slave #数据存放目录 logpath=/mongodb/log/slave.log #日志存放路径 pidfilepath=/mongodb/slave.pid #进程文件,方便停止mongodb directoryperdb=true #为每一个数据库按照数据库名建立文件夹存放 logappend=true #以追加的方式记录日志 replSet=testrs #replica set的名字,可任意配置 bind_ip=192.168.145.138 #mongodb所绑定的ip地址 port=27018 #mongodb进程所使用的端口号 oplogSize=10000 #mongodb操作日志文件的最大大小。单位为Mb fork=true #以后台方式运行进程 noprealloc=true #不预先分配存储
cd /usr/local/mongodb2/bin/ #arbiter.conf dbpath=/mongodb/data/arbiter #数据存放目录 logpath=/mongodb/log/arbiter.log #日志存放路径 pidfilepath=/mongodb/arbiter.pid #进程文件,方便停止mongodb directoryperdb=true #为每一个数据库按照数据库名建立文件夹存放 logappend=true #以追加的方式记录日志 replSet=testrs #replica set的名字,可任意配置 bind_ip=192.168.145.138 #mongodb所绑定的ip地址 port=27019 #mongodb进程所使用的端口号 oplogSize=10000 #mongodb操作日志文件的最大大小。单位为Mb fork=true #以后台方式运行进程 noprealloc=true #不预先分配存储
- 启动mongodb
cd /usr/local/mongodb/bin/ ./mongod -f master.conf cd /usr/local/mongodb1/bin/ ./mongod -f slave.conf cd /usr/local/mongodb2/bin/ ./mongod -f arbiter.conf
- 配置主,备,仲裁节点
可以通过客户端连接mongodb,也可以直接在三个节点中选择一个连接mongodb。cd /usr/local/mongodb/bin/ ./mongo 192.168.145.138:27017 #三个节点任选一个 > use admin > cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.145.138:27017',priority:2},{_id:1,host:'192.168.145.138:27018',priority:1},{_id:2,host:'192.168.145.138:27019',arbiterOnly:true}] }; > rs.initiate(cfg) #使配置生效
最外层的_id表示replica set的名字,与配置文件中的一致。members里包含的是所有节点的地址以及优先级。优先级最高的即成为主节点,即这里的192.168.145.138:27017。特别注意的是,对于仲裁节点,需要有个特别的配置——arbiterOnly:true。这个千万不能少了,不然主备模式就不能生效。
> rs.status() #查看配置是否生效 { "set" : "testrs", "date" : ISODate("2019-04-10T02:50:23.284Z"), "myState" : 1, "term" : NumberLong(1), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "readConcernMajorityOpTime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "appliedOpTime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) } }, "lastStableCheckpointTimestamp" : Timestamp(1554864611, 1), "members" : [ { "_id" : 0, "name" : "192.168.145.138:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 476, "optime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2019-04-10T02:50:12Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "could not find member to sync from", "electionTime" : Timestamp(1554864609, 1), "electionDate" : ISODate("2019-04-10T02:50:09Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "192.168.145.138:27018", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 24, "optime" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1554864612, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2019-04-10T02:50:12Z"), "optimeDurableDate" : ISODate("2019-04-10T02:50:12Z"), "lastHeartbeat" : ISODate("2019-04-10T02:50:21.738Z"), "lastHeartbeatRecv" : ISODate("2019-04-10T02:50:22.258Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "192.168.145.138:27017", "syncSourceHost" : "192.168.145.138:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 }, { "_id" : 2, "name" : "192.168.145.138:27019", "health" : 1, "state" : 7, "stateStr" : "ARBITER", "uptime" : 24, "lastHeartbeat" : ISODate("2019-04-10T02:50:21.739Z"), "lastHeartbeatRecv" : ISODate("2019-04-10T02:50:23.104Z"), "pingMs" : NumberLong(0), "lastHeartbeatMessage" : "", "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "configVersion" : 1 } ], "ok" : 1, "operationTime" : Timestamp(1554864612, 1), "$clusterTime" : { "clusterTime" : Timestamp(1554864612, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }