mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27018/data/db
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27018/log
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27018/conf
touch /usr/local/src/mongodb/replica_sets/myrs_27018/log/mongod.log
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27019/data/db
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27019/log
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27019/conf
touch /usr/local/src/mongodb/replica_sets/myrs_27019/log/mongod.log
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27020/data/db
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27020/log
mkdir -p /usr/local/src/mongodb/replica_sets/myrs_27020/conf
touch /usr/local/src/mongodb/replica_sets/myrs_27020/log/mongod.log
chmod -R 777 /usr/local/src/mongodb/replica_sets
2.创建配置文件mongod.conf
1.
storage:
dbPath: "/data/db"
journal:
enabled: true
systemLog:
destination: file
path: "/data/log/mongod.log"
logAppend: true
net:
bindIp: localhost,0.0.0.0
port: 27018
replication:
replSetName: myrs
2.
storage:
dbPath: "/data/db"
journal:
enabled: true
systemLog:
destination: file
path: "/data/log/mongod.log"
logAppend: true
net:
bindIp: localhost,0.0.0.0
port: 27019
replication:
replSetName: myrs
3.
storage:
dbPath: "/data/db"
journal:
enabled: true
systemLog:
destination: file
path: "/data/log/mongod.log"
logAppend: true
net:
bindIp: localhost,0.0.0.0
port: 27020
replication:
replSetName: myrs
3.创建容器
docker run -itd --name mongodb_rs27018 --restart=always --privileged -p 27018:27018 \
-v /usr/local/src/mongodb/replica_sets/myrs_27018/data/db:/data/db \
-v /usr/local/src/mongodb/replica_sets/myrs_27018/conf:/data/configdb \
-v /usr/local/src/mongodb/replica_sets/myrs_27018/log:/data/log/ \
mongo:4.2.8 --config /data/configdb/mongod.conf
docker run -itd --name mongodb_rs27019 --restart=always --privileged -p 27019:27019 \
-v /usr/local/src/mongodb/replica_sets/myrs_27019/data/db:/data/db \
-v /usr/local/src/mongodb/replica_sets/myrs_27019/conf:/data/configdb \
-v /usr/local/src/mongodb/replica_sets/myrs_27019/log:/data/log/ \
mongo:4.2.8 --config /data/configdb/mongod.conf
docker run -itd --name mongodb_rs27020 --restart=always --privileged -p 27020:27020 \
-v /usr/local/src/mongodb/replica_sets/myrs_27020/data/db:/data/db \
-v /usr/local/src/mongodb/replica_sets/myrs_27020/conf:/data/configdb \
-v /usr/local/src/mongodb/replica_sets/myrs_27020/log:/data/log/ \
mongo:4.2.8 --config /data/configdb/mongod.conf
4.初始化配置副本集和主节点
使用客户端命令连接任意一个节点,但这里尽量要连接主节点(27018节点):
[root@promote log]#docker exec -it d46982e5c9ea /bin/bash
root@d46982e5c9ea:/# mongo --port=27018
var config={
_id:"myrs",
members:[
{_id:0,host:"192.168.204.131:27018"},
{_id:1,host:"192.168.204.131:27019"},
{_id:2,host:"192.168.204.131:27020",arbiterOnly: true,}
]}
rs.initiate(config)
myrs:OTHER>
myrs:PRIMARY>
7.查看副本集状态
myrs:PRIMARY> rs.status()
{
...
"members" : [
{
"_id" : 0,
"name" : "d46982e5c9ea:27018",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 658,
"optime" : {
"ts" : Timestamp(1593675531, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2020-07-02T07:38:51Z"),
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1593675201, 2),
"electionDate" : ISODate("2020-07-02T07:33:21Z"),
"configVersion" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "192.168.204.131:27019",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 116,
"optime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDurable" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"optimeDurableDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2020-07-02T07:38:54.670Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : -2
},
{
"_id" : 2,
"name" : "192.168.204.131:27020",
"health" : 1,
"state" : 0,
"stateStr" : "STARTUP",
"uptime" : 42,
"lastHeartbeat" : ISODate("2020-07-02T07:38:54.669Z"),
"lastHeartbeatRecv" : ISODate("1970-01-01T00:00:00Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : -2
}
]
...
}
8.主节点上新增一个测试db
myrs:PRIMARY> use articledb
switched to db articledb
myrs:PRIMARY> db
articledb
myrs:PRIMARY> db.comment.insert({"articleid":"100000","content":"今天天气真好,阳光 明媚","userid":"1001","nickname":"Rose","createdatetime":new Date()})
WriteResult({ "nInserted" : 1 })
myrs:PRIMARY> db.comment.find()
{ "_id" : ObjectId("5efd931aea01b557f213c082"), "articleid" : "100000", "content" : "今天天气真好,阳光 明媚", "userid" : "1001", "nickname" : "Rose", "createdatetime" : ISODate("2020-07-02T07:56:10.778Z") }
9.副本节点接受slave
> rs.slaveOk()
10.仲裁从节点接受slave
> rs.slaveOk()