6、单机利用docker安装mongo4.4.1版本复制集replication set



docker run -itd --name mongo0 -p 27017:27017 mongo --replSet "rs0"

docker run -itd --name mongo1 -p 27018:27017 mongo --replSet "rs0"

docker run -itd --name mongo2 -p 27019:27017 mongo --replSet "rs0"


➜  ~ docker ps                                                                       
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
4fce7d278997        mongo               "docker-entrypoint..."   5 seconds ago       Up 4 seconds        0.0.0.0:27019->27017/tcp   mongo2
bd1dd69a52d8        mongo               "docker-entrypoint..."   16 seconds ago      Up 15 seconds       0.0.0.0:27018->27017/tcp   mongo1
9482f8f08aa7        mongo               "docker-entrypoint..."   39 seconds ago      Up 37 seconds       0.0.0.0:27017->27017/tcp   mongo0



查看各容器内部IP

➜  ~ docker inspect mongo0 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
➜  ~ docker inspect mongo1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
➜  ~ docker inspect mongo2 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.4",
                    "IPAddress": "172.17.0.4",


记录IP和端口 后面有用

进入一个容器

docker exec -it mongo0 /bin/bash 


启动mongo

mongo


登录后执行下面的命令,其中IP和端口自己替换下,一般不需要替换

rs.initiate( {_id : "rs0",members: [{ _id: 0, host: "172.17.0.2:27017" },{ _id: 1, host: "172.17.0.3:27017" },{ _id: 2, host: "172.17.0.4:27017" }]})


上面命令参数解释
可以使用 {_id:0,host:'127.0.0.1:10002',priority:1} 指定主节点(多个节点 priority越高的 会成为主节点)
_id:复制集的名称。必须与启动 mongod 的 --replSet 一致
members:成员配置文件的列表。
members[n]._id:用来识别成员的 id 不可以重复
members[n].host:成员对应的 host:port  之前通过 docker inspect mongo0 | grep IPAddress  得到的IP


查看状态

rs0:PRIMARY> rs.status();
{
	"set" : "rs0",
	"date" : ISODate("2020-11-10T11:04:59.918Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"majorityVoteCount" : 2,
	"writeMajorityCount" : 2,
	"votingMembersCount" : 3,
	"writableVotingMembersCount" : 3,
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1605006297, 1),
			"t" : NumberLong(1)
		},
		"lastCommittedWallTime" : ISODate("2020-11-10T11:04:57.985Z"),
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1605006297, 1),
			"t" : NumberLong(1)
		},
		"readConcernMajorityWallTime" : ISODate("2020-11-10T11:04:57.985Z"),
		"appliedOpTime" : {
			"ts" : Timestamp(1605006297, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1605006297, 1),
			"t" : NumberLong(1)
		},
		"lastAppliedWallTime" : ISODate("2020-11-10T11:04:57.985Z"),
		"lastDurableWallTime" : ISODate("2020-11-10T11:04:57.985Z")
	},
	"lastStableRecoveryTimestamp" : Timestamp(1605006267, 1),
	"electionCandidateMetrics" : {
		"lastElectionReason" : "electionTimeout",
		"lastElectionDate" : ISODate("2020-11-10T10:59:27.875Z"),
		"electionTerm" : NumberLong(1),
		"lastCommittedOpTimeAtElection" : {
			"ts" : Timestamp(0, 0),
			"t" : NumberLong(-1)
		},
		"lastSeenOpTimeAtElection" : {
			"ts" : Timestamp(1605005957, 1),
			"t" : NumberLong(-1)
		},
		"numVotesNeeded" : 2,
		"priorityAtElection" : 1,
		"electionTimeoutMillis" : NumberLong(10000),
		"numCatchUpOps" : NumberLong(0),
		"newTermStartDate" : ISODate("2020-11-10T10:59:27.945Z"),
		"wMajorityWriteAvailabilityDate" : ISODate("2020-11-10T10:59:28.561Z")
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "172.17.0.2:27017",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",
			"uptime" : 787,
			"optime" : {
				"ts" : Timestamp(1605006297, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-11-10T11:04:57Z"),
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1605005967, 1),
			"electionDate" : ISODate("2020-11-10T10:59:27Z"),
			"configVersion" : 1,
			"configTerm" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "172.17.0.3:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 342,
			"optime" : {
				"ts" : Timestamp(1605006297, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1605006297, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-11-10T11:04:57Z"),
			"optimeDurableDate" : ISODate("2020-11-10T11:04:57Z"),
			"lastHeartbeat" : ISODate("2020-11-10T11:04:58.095Z"),
			"lastHeartbeatRecv" : ISODate("2020-11-10T11:04:59.072Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncSourceHost" : "172.17.0.2:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1,
			"configTerm" : 1
		},
		{
			"_id" : 2,
			"name" : "172.17.0.4:27017",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 342,
			"optime" : {
				"ts" : Timestamp(1605006297, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1605006297, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-11-10T11:04:57Z"),
			"optimeDurableDate" : ISODate("2020-11-10T11:04:57Z"),
			"lastHeartbeat" : ISODate("2020-11-10T11:04:58.095Z"),
			"lastHeartbeatRecv" : ISODate("2020-11-10T11:04:59.073Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncSourceHost" : "172.17.0.2:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1,
			"configTerm" : 1
		}
	],
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1605006297, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1605006297, 1)
}



从库默认没有读写权限

需要进入从库的mongoDB执行rs.slaveOk();或者db.getMongo().setSlaveOk();
但是但是但是!!!
只有当次生效!只有当次生效!只有当次生效!
如果需要永久生效 可以依次执如下命令
find / -name .mongorc.js
vim /home/shengyang/.mongorc.js
添加内容
rs.slaveOk();



强制更换主节点办法
http://www.mongoing.com/docs/tutorial/force-member-to-be-primary.html

常用命令
设置从节点可用
mongo --port 27018(填写实际的从节点地址)
rs.slaveOk()
查看集群状态
mongo --port 27018
rs.status()
查看是否primary节点
mongo --port 27018
rs.isMaster()
查看集群配置
mongo --port 27018
rs.conf()
添加节点
mongo 主节点地址
rs.add({} | host地址) 例如rs.add('192.168.1.96:27017')
删除节点
mongo 主节点地址
删除前,建议先停止这个节点的服务
rs.remove(hostname) 例如rs.remove('192.168.1.96:27017')
更改集群配置
mongo 主节点地址
rs.reconfig({},{})


down掉primary

"members" : [
		{
			"_id" : 0,
			"name" : "172.17.0.2:27017",
			"health" : 0,
			"state" : 8,
			"stateStr" : "(not reachable/healthy)",
			"uptime" : 0,
			"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-11-10T11:31:24.313Z"),
			"lastHeartbeatRecv" : ISODate("2020-11-10T11:31:04.935Z"),
			"pingMs" : NumberLong(5),
			"lastHeartbeatMessage" : "no response within election timeout period",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"configVersion" : 1,
			"configTerm" : 1
		},
。。。。。。





 

replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性.

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值