
1、配置 hosts
# cat /etc/hosts
10.3.20.14 mq1
10.3.20.51 mq2
10.3.20.54 mq3
2、修改 /etc/mongod.conf,以 10.3.20.14 为例,其他两台配置类似
配置集群 keyfile(3台机器用同一个key)
# openssl rand -base64 756 > mongo.key
# mv mongo.key /var/lib/mongo/
# chown mongod:mongod /var/lib/mongo/mongo.key
# chmod 600 /var/lib/mongo/mongo.key
配置文件如下
# egrep -v "^$|^#" /etc/mongod.conf
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
timeZoneInfo: /usr/share/zoneinfo
net:
port: 27017
bindIp: 127.0.0.1,10.3.20.14 # Listen to local interface only, comment to listen on all interfaces.
security:
authorization: 'enabled'
keyFile: /var/lib/mongo/mongo.key
replication:
oplogSizeMB: 500
replSetName: repdata
# /etc/init.d/mongod restart
3、在 10.3.20.14 上开启复制集
# mongo -u root -p 123456 10.3.20.14/admin
> cfg={ _id:"repdata", members:[ {_id:0,host:'10.3.20.14:27017',priority:2}, {_id:1,host:'10.3.20.51:27017',priority:1}, {_id:2,host:'10.3.20.54:27017',arbiterOnly:true}] }
> rs.initiate(cfg)
说明:
// cfg 名字可选,只要跟 mongodb 参数不冲突,_id 为 Replica Set 名字,members 里面的优先级 priority 值高的为主节点,对于仲裁点一定要加上 arbiterOnly:true,否则主备模式不生效
// priority 表示优先级别,数值越大,表示是主节点
// arbiterOnly:true 表示仲裁节点
// 使集群cfg配置生效 rs.initiate(cfg)
// 查看是否生效 rs.status()
> rs.status()
{
"set" : "repdata",
"date" : ISODate("2018-07-17T07:49:30.307Z"),
"myState" : 1,
"term" : NumberLong(6),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"appliedOpTime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"durableOpTime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.3.20.14:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1018,
"optime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"optimeDate" : ISODate("2018-07-17T07:49:26Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1531812765, 1),
"electionDate" : ISODate("2018-07-17T07:32:45Z"),
"configVersion" : 37521,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "10.3.20.51:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 1015,
"optime" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"optimeDurable" : {
"ts" : Timestamp(1531813766, 1),
"t" : NumberLong(6)
},
"optimeDate" : ISODate("2018-07-17T07:49:26Z"),
"optimeDurableDate" : ISODate("2018-07-17T07:49:26Z"),
"lastHeartbeat" : ISODate("2018-07-17T07:49:30.272Z"),
"lastHeartbeatRecv" : ISODate("2018-07-17T07:49:30.275Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "10.3.20.14:27017",
"syncSourceHost" : "10.3.20.14:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 37521
},
{
"_id" : 2,
"name" : "10.3.20.54:27017",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 1015,
"lastHeartbeat" : ISODate("2018-07-17T07:49:30.272Z"),
"lastHeartbeatRecv" : ISODate("2018-07-17T07:49:29.750Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 37521
}
],
"ok" : 1,
"operationTime" : Timestamp(1531813766, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1531813766, 1),
"signature" : {
"hash" : BinData(0,"v6vv5ejGutQJnR0t8z/egTzN6nE="),
"keyId" : NumberLong("6579067222256254977")
}
}
}
4、Slave 启动读功能
repdata:SECONDARY> rs.slaveOk()
5、重置集群的方法
重置集群状态,指定 Replica Set 名字,members,
repdata:PRIMARY> cfg={ _id:"repdata", members:[ {_id:0,host:'10.3.20.14:27017',priority:2}, {_id:1,host:'10.3.20.51:27017',priority:1}, {_id:2,host:'10.3.20.54:27017',arbiterOnly:true}] };
{
"_id" : "repdata",
"members" : [
{
"_id" : 0,
"host" : "10.3.20.14:27017",
"priority" : 2
},
{
"_id" : 1,
"host" : "10.3.20.51:27017",
"priority" : 1
},
{
"_id" : 2,
"host" : "10.3.20.54:27017",
"arbiterOnly" : true
}
]
}
repdata:PRIMARY> rs.reconfig(cfg, {force: true})
{
"ok" : 1,
"operationTime" : Timestamp(1531811275, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1531811275, 1),
"signature" : {
"hash" : BinData(0,"0uUEH9rS5Ogao1IuIxscZ0UPdzQ="),
"keyId" : NumberLong("6579067222256254977")
}
}
}
repdata:PRIMARY> rs.conf()
{
"_id" : "repdata",
"version" : 37521,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "10.3.20.14:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "10.3.20.51:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "10.3.20.54:27017",
"arbiterOnly" : true,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5b4d8ac676326213278e0ac2")
}
}
网友评论